Starry-Wind / StarRailAssistant

崩坏:星穹铁道自动化 | 崩坏:星穹铁道自动锄大地 | 崩坏:星穹铁道锄大地 | 自动锄大地 | 基于模拟按键
GNU General Public License v3.0
2.8k stars 236 forks source link

[功能请求] 点击小月卡领取以及定时启动功能 #757

Open lostduel opened 10 months ago

lostduel commented 10 months ago

原因

我想在每天4点小怪刷新之后自动锄地,这样醒来之后可以直接完成每日任务的一些项。 凌晨自动锄地的时候可能会因为小月卡的领取界面卡住不动。

功能简述

1.选择地图后增加一个选项,询问是否要定时启动,输入-1直接开始,输入时间则到点再开始。 2.在大地图上时如果跳出了小月卡的领取界面则自动点击跳过。

功能逻辑

1.选择完功能或地图后,询问用户是否要定时启动,并让用户输入时间,用户输入-1或类似于1234的时间,前者直接开始功能,后者等到12点34分时自动启动

实现参考

1.

定义一个函数,接受一个4位数作为参数,然后执行之前的逻辑

def run_at_time(num):

导入datetime模块

import datetime

# 定义一个函数,将4位数转换为datetime对象
def convert_to_datetime(num):
    # 检查输入是否是4位数
    if len(str(num)) != 4:
        print("请输入一个4位数")
        return None
    # 提取小时和分钟
    hour = int(str(num)[:2])
    minute = int(str(num)[2:])
    # 检查小时和分钟是否有效
    if hour < 0 or hour > 23 or minute < 0 or minute > 59:
        print("请输入一个有效的时间")
        return None
    # 获取当前日期
    today = datetime.date.today()
    # 创建一个datetime对象
    dt = datetime.datetime(today.year, today.month, today.day, hour, minute)
    return dt

# 调用函数,将用户输入转换为datetime对象
user_time = convert_to_datetime(num)
# 如果转换成功,继续执行
if user_time is not None:
    # 获取当前时间
    current_time = datetime.datetime.now()
    # 计算时间差
    delta = user_time - current_time
    # 如果时间差为正,每秒刷新剩余时间
    if delta.total_seconds() > 0:
        # 导入time模块
        import time
        # 循环直到时间差为0
        while delta.total_seconds() > 0:
            # 打印剩余时间
            print(f"剩余{delta.total_seconds()}秒  ",end="\r",flush=True)
            # 等待一秒
            time.sleep(1)
            # 更新当前时间和时间差
            current_time = datetime.datetime.now()
            delta = user_time - current_time
    # 如果时间差为负,判断是否是第二天的时间
    else:
        # 如果用户输入的时间比当前时间的小时数小,说明是第二天的时间
        if user_time.hour < current_time.hour:
            # 将用户时间加上一天
            user_time = user_time + datetime.timedelta(days=1)
            # 重新计算时间差
            delta = user_time - current_time
            # 每秒刷新剩余时间
            import time
            while delta.total_seconds() > 0:
                print(f"剩余{delta.total_seconds()}秒  ",end="\r",flush=True)
                time.sleep(1)
                current_time = datetime.datetime.now()
                delta = user_time - current_time
        # 如果用户输入的时间不是第二天的时间,提示用户输入的时间已过
        else:
            print("你输入的时间已过")
    # 运行接下来的代码
    print("运行接下来的代码")