async def morning_handle(event: GroupMessageEvent, arg: Message = CommandArg()): args = arg.extract_plain_text() group_id = event.group_id if args == "today": await morning_cmd.finish(await get_moring_message()) if args == "update": await HOLIDAYS_DATA.update() await morning_cmd.finish("节假日数据更新成功") if args and group_id: if strtobool(args): plugin_config.morning_group_id += [group_id] await morning_cmd.finish("已在本群开启每日早安功能") else: plugin_config.morning_group_id = [ n for n in plugin_config.morning_group_id if n != group_id ] await morning_cmd.finish("已在本群关闭每日早安功能") else: if group_id in plugin_config.morning_group_id: await morning_cmd.finish("每日早安功能开启中") else: await morning_cmd.finish("每日早安功能关闭中")
async def _(bot: Bot, event: Event, state: dict): args = str(event.message).strip() group_id = event.group_id if args and group_id: if strtobool(args): plugin_config.push_news_group_id += [group_id] await news_cmd.finish('已开始新闻自动推送') else: plugin_config.push_news_group_id = [ n for n in plugin_config.push_news_group_id if n != group_id ] await news_cmd.finish('已停止新闻自动推送') else: if group_id in plugin_config.push_news_group_id: await news_cmd.finish('新闻自动推送开启中') else: await news_cmd.finish('新闻自动推送关闭中')
async def hello_handle(event: GroupMessageEvent, arg: Message = CommandArg()): args = arg.extract_plain_text() group_id = event.group_id if args and group_id: if strtobool(args): plugin_config.hello_group_id += [group_id] await hello_cmd.finish("已在本群开启启动问候功能") else: plugin_config.hello_group_id = [ n for n in plugin_config.hello_group_id if n != group_id ] await hello_cmd.finish("已在本群关闭启动问候功能") else: if group_id in plugin_config.hello_group_id: await hello_cmd.finish("启动问候功能开启中") else: await hello_cmd.finish("启动问候功能关闭中")
async def _(bot: Bot, event: Event, state: dict): args = str(event.message).strip() group_id = event.group_id if args and group_id: if strtobool(args): plugin_config.group_id += [group_id] await morning_cmd.finish('已在本群开启每日早安功能') else: plugin_config.group_id = [ n for n in plugin_config.group_id if n != group_id ] await morning_cmd.finish('已在本群关闭每日早安功能') else: if group_id in plugin_config.group_id: await morning_cmd.finish('每日早安功能开启中') else: await morning_cmd.finish('每日早安功能关闭中')
async def repeat_handle(event: GroupMessageEvent, arg: Message = CommandArg()): args = arg.extract_plain_text() group_id = event.group_id if args and group_id: if strtobool(args): plugin_config.group_id += [group_id] recorder_obj.add_new_group() await repeat_cmd.finish("已在本群开启复读功能") else: plugin_config.group_id = [ n for n in plugin_config.group_id if n != group_id ] await repeat_cmd.finish("已在本群关闭复读功能") else: if group_id in plugin_config.group_id: await repeat_cmd.finish("复读功能开启中") else: await repeat_cmd.finish("复读功能关闭中")
async def _(bot: Bot, event: Event, state: dict): args = str(event.message).strip() group_id = event.group_id if args and group_id: if strtobool(args): plugin_config.group_id += [group_id] recorder.add_new_group() await repeat_cmd.finish('已在本群开启复读功能') else: plugin_config.group_id = [ n for n in plugin_config.group_id if n != group_id ] await repeat_cmd.finish('已在本群关闭复读功能') else: if group_id in plugin_config.group_id: await repeat_cmd.finish('复读功能开启中') else: await repeat_cmd.finish('复读功能关闭中')
async def _(bot: Bot, event: Event, state: dict): args = str(event.message).strip() group_id = event.group_id if args in ['status', '状态']: if group_id in plugin_config.push_calender_group_id: await news_cmd.finish('日程自动推送开启中') else: await news_cmd.finish('日程自动推送关闭中') elif args and group_id: if strtobool(args): plugin_config.push_calender_group_id += [group_id] await news_cmd.finish('已开始日程自动推送') else: plugin_config.push_calender_group_id = [ n for n in plugin_config.push_calender_group_id if n != group_id ] await news_cmd.finish('已停止日程自动推送') else: await calender_cmd.finish(await calender.get_week_events())
async def _(bot: Bot, event: Event, state: dict): argv = str(event.message).strip().split() if not argv: await fflogs_cmd.finish(get_command_help('ff14.dps')) if not event.user_id: raise FinishedException user_id = event.user_id # 设置 Token if argv[0] == 'token' and len(argv) == 2: # 检查是否是超级用户 if user_id not in bot.config.superusers: await fflogs_cmd.finish('抱歉,你没有权限修改 Token。') plugin_config.fflogs_token = argv[1] await fflogs_cmd.finish('Token 设置完成。') # 检查 Token 是否设置 if not plugin_config.fflogs_token: await fflogs_cmd.finish( '对不起,Token 未设置,无法查询数据。\n请先使用命令\n/dps token <token>\n配置好 Token 后再尝试查询数据。' ) if argv[0] == 'token' and len(argv) == 1: # 检查是否是超级用户 if user_id not in bot.config.superusers: await fflogs_cmd.finish('抱歉,你没有权限查看 Token。') await fflogs_cmd.finish(f'当前的 Token 为 {plugin_config.fflogs_token}') # 缓存相关设置 if argv[0] == 'cache': # 检查是否是超级用户 if user_id not in bot.config.superusers: await fflogs_cmd.finish('抱歉,你没有权限设置缓存。') if len(argv) == 2: if strtobool(argv[1]): if not fflogs.is_cache_enabled: fflogs.enable_cache() await fflogs_cmd.finish('已开始定时缓存') else: if fflogs.is_cache_enabled: fflogs.disable_cache() await fflogs_cmd.finish('已停止定时缓存') else: if fflogs.is_cache_enabled: await fflogs_cmd.finish('定时缓存开启中') else: await fflogs_cmd.finish('定时缓存关闭中') if argv[0] == 'me' and len(argv) == 1: if user_id not in fflogs.characters: await fflogs_cmd.finish( '抱歉,你没有绑定最终幻想14的角色。\n请使用\n/dps me 角色名 服务器名\n绑定自己的角色。') await fflogs_cmd.finish( f'你当前绑定的角色:\n角色:{fflogs.characters[user_id][0]}\n服务器:{fflogs.characters[user_id][1]}' ) if '[CQ:at,qq=' in argv[0] and len(argv) == 1: user_id = int(argv[0][10:-1]) if user_id not in fflogs.characters: await fflogs_cmd.finish('抱歉,该用户没有绑定最终幻想14的角色。') await fflogs_cmd.finish( f'[CQ:at,qq={user_id}] 当前绑定的角色:\n角色:{fflogs.characters[user_id][0]}\n服务器:{fflogs.characters[user_id][1]}' ) if argv[0] == 'me' and len(argv) == 3: fflogs.set_character(user_id, argv[1], argv[2]) await fflogs_cmd.finish('角色绑定成功!') if argv[0] == 'classes' and len(argv) == 1: reply = await fflogs.classes() await fflogs_cmd.finish(str(reply)) if argv[0] == 'zones' and len(argv) == 2: reply = await fflogs.zones() await fflogs_cmd.finish(str(reply[int(argv[1])])) # 判断查询排行是指个人还是特定职业 if len(argv) == 2: # <BOSS名> me # <BOSS名> <@他人> # <BOSS名> <职业名> if argv[1].lower() == 'me': reply = await get_character_dps_by_user_id(argv[0], user_id) elif '[CQ:at,qq=' in argv[1]: # @他人的格式 # [CQ:at,qq=12345678] user_id = int(argv[1][10:-1]) reply = await get_character_dps_by_user_id(argv[0], user_id) else: reply = await fflogs.dps(*argv) #type:ignore await fflogs_cmd.finish(reply) if len(argv) == 3: # <BOSS名> <职业名> <DPS种类> # <BOSS名> <角色名> <服务器名> argv[2] = argv[2].lower() if argv[2] in ['adps', 'rdps', 'pdps']: reply = await fflogs.dps(*argv) #type:ignore else: reply = await fflogs.character_dps(*argv) #type:ignore await fflogs_cmd.finish(reply) await fflogs_cmd.finish(get_command_help('ff14.dps'))
class Config(BaseSettings): # 新闻推送相关配置 # 自动推送新闻的间隔,单位 分钟 push_news_interval: int = int( DATA.get_config('ff14', 'push_news_interval', '30')) # 上次推送新闻的发布时间 push_news_last_news_date: datetime = parse( DATA.get_config('ff14', 'push_news_last_news_date', '2000-01-01')) # 启用新闻推送的群 push_news_group_id: List[int] = strtogroupid( DATA.get_config('ff14', 'push_news_group_id')) @validator('push_news_last_news_date', always=True) def push_news_last_news_date_validator(cls, v: datetime): """ 验证并保存配置 """ DATA.set_config('ff14', 'push_news_last_news_date', v.isoformat()) return v @validator('push_news_group_id', always=True) def push_news_group_id_validator(cls, v: List[int]): """ 验证并保存配置 """ DATA.set_config('ff14', 'push_news_group_id', groupidtostr(v)) return v # FFLogs 相关配置 fflogs_token: str = DATA.get_config('fflogs', 'token') # 默认从两周的数据中计算排名百分比 fflogs_range: int = int(DATA.get_config('fflogs', 'range', '14')) # 是否开启定时缓存 fflogs_cache: bool = strtobool( DATA.get_config('fflogs', 'cache_enable', '0')) # 缓存的时间 fflogs_cache_hour: int = int( DATA.get_config('fflogs', 'cache_hour', fallback='4')) fflogs_cache_minute: int = int( DATA.get_config('fflogs', 'cache_minute', fallback='30')) fflogs_cache_second: int = int( DATA.get_config('fflogs', 'cache_second', fallback='0')) # 需要缓存的副本 fflogs_cache_boss: List[str] = DATA.get_config('fflogs', 'cache_boss').split() @validator('fflogs_token', always=True) def fflogs_token_validator(cls, v): """ 验证并保存配置 """ DATA.set_config('fflogs', 'token', v) return v @validator('fflogs_cache', always=True) def fflogs_cache_validator(cls, v): """ 验证并保存配置 """ if v: DATA.set_config('fflogs', 'cache_enable', '1') else: DATA.set_config('fflogs', 'cache_enable', '0') return v class Config: extra = 'ignore' validate_assignment = True
async def fflogs_handle(event: MessageEvent, arg: Message = CommandArg()): argv = arg.extract_plain_text().split() if not argv: await fflogs_cmd.finish(get_command_help("ff14.dps")) user_id = event.user_id # 设置 Token if argv[0] == "token" and len(argv) == 2: # 检查是否是超级用户 if user_id not in global_config.superusers: await fflogs_cmd.finish("抱歉,你没有权限修改 Token。") plugin_config.fflogs_token = argv[1] await fflogs_cmd.finish("Token 设置完成。") # 检查 Token 是否设置 if not plugin_config.fflogs_token: await fflogs_cmd.finish( "对不起,Token 未设置,无法查询数据。\n请先使用命令\n/dps token <token>\n配置好 Token 后再尝试查询数据。" ) if argv[0] == "token" and len(argv) == 1: # 检查是否是超级用户 if user_id not in global_config.superusers: await fflogs_cmd.finish("抱歉,你没有权限查看 Token。") await fflogs_cmd.finish(f"当前的 Token 为 {plugin_config.fflogs_token}") if argv[0] == "update" and len(argv) == 1: await FFLOGS_DATA.update() await fflogs_cmd.finish("副本数据更新成功") # 缓存相关设置 if argv[0] == "cache": # 检查是否是超级用户 if user_id not in global_config.superusers: await fflogs_cmd.finish("抱歉,你没有权限设置缓存。") if len(argv) == 2: if strtobool(argv[1]): if not fflogs.is_cache_enabled: fflogs.enable_cache() await fflogs_cmd.finish("已开始定时缓存") else: if fflogs.is_cache_enabled: fflogs.disable_cache() await fflogs_cmd.finish("已停止定时缓存") else: if fflogs.is_cache_enabled: await fflogs_cmd.finish("定时缓存开启中") else: await fflogs_cmd.finish("定时缓存关闭中") if argv[0] == "me" and len(argv) == 1: if user_id not in fflogs.characters: await fflogs_cmd.finish( "抱歉,你没有绑定最终幻想14的角色。\n请使用\n/dps me 角色名 服务器名\n绑定自己的角色。") await fflogs_cmd.finish( f"你当前绑定的角色:\n角色:{fflogs.characters[user_id][0]}\n服务器:{fflogs.characters[user_id][1]}" ) if "[CQ:at,qq=" in argv[0] and len(argv) == 1: user_id = int(argv[0][10:-1]) if user_id not in fflogs.characters: await fflogs_cmd.finish("抱歉,该用户没有绑定最终幻想14的角色。") await fflogs_cmd.finish( f"[CQ:at,qq={user_id}] 当前绑定的角色:\n角色:{fflogs.characters[user_id][0]}\n服务器:{fflogs.characters[user_id][1]}" ) if argv[0] == "me" and len(argv) == 3: fflogs.set_character(user_id, argv[1], argv[2]) await fflogs_cmd.finish("角色绑定成功!") if argv[0] == "classes" and len(argv) == 1: reply = await fflogs.classes() await fflogs_cmd.finish(str(reply)) if argv[0] == "zones" and len(argv) == 2: reply = await fflogs.zones() if reply: await fflogs_cmd.finish(str(reply[int(argv[1])])) # 判断查询排行是指个人还是特定职业 if len(argv) == 2: # <BOSS名> me # <BOSS名> <@他人> # <BOSS名> <职业名> if argv[1].lower() == "me": reply = await get_character_dps_by_user_id(argv[0], user_id) elif "[CQ:at,qq=" in argv[1]: # @他人的格式 # [CQ:at,qq=12345678] user_id = int(argv[1][10:-1]) reply = await get_character_dps_by_user_id(argv[0], user_id) else: reply = await fflogs.dps(*argv) # type:ignore await fflogs_cmd.finish(reply) if len(argv) == 3: # <BOSS名> <职业名> <DPS种类> # <BOSS名> <角色名> <服务器名> argv[2] = argv[2].lower() if argv[2] in ["adps", "rdps", "pdps"]: reply = await fflogs.dps(*argv) # type:ignore else: reply = await fflogs.character_dps(*argv) # type:ignore await fflogs_cmd.finish(reply) await fflogs_cmd.finish(get_command_help("ff14.dps"))