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 price_handle(event: MessageEvent, args: Message = CommandArg()): """查价""" argv = args.extract_plain_text().split() if len(argv) == 0: await price_cmd.finish(get_command_help("ff14.price")) if len(argv) == 1 and argv[0] == "默认值": world_or_dc = DATA.config.get(f"price-default-{event.user_id}", "猫小胖") await price_cmd.finish(f"当前设置的默认值为:{world_or_dc}") if len(argv) == 2 and argv[0] == "默认值": DATA.config.set(f"price-default-{event.user_id}", argv[1]) await price_cmd.finish("查询区域默认值设置成功!") if len(argv) > 0: name = argv[0] if len(argv) >= 2: world_or_dc = argv[1] else: world_or_dc = DATA.config.get(f"price-default-{event.user_id}", "猫小胖") try: reply = await get_item_price(name, world_or_dc) except httpx.HTTPError: reply = "抱歉,网络出错,请稍后再试。" await price_cmd.finish(reply)
async def _(arg: Message = CommandArg()): msg = arg.extract_plain_text().strip() if not msg: await mc.finish() if msg.startswith("status"): addr = msg.replace("status", "", 1).strip() if addr: status = await get_mcstatus(addr) if status: await mc.finish(status) else: await mc.finish("出错了,请稍后再试") else: types = ["avatar", "head", "body", "skin", "cape", "model"] for t in types: if msg.startswith(t): username = msg.replace(t, "", 1).strip() if username: uuid = await get_mc_uuid(username) if not uuid: await mc.finish("出错了,请稍后再试") if uuid == "none": await mc.finish("找不到该用户") if t == "model": await mc.send("生成中,请耐心等待。。。") result = await get_mcmodel(uuid) else: result = await get_crafatar(t, uuid) if result: await mc.finish(MessageSegment.image(result)) else: await mc.finish("出错了,请稍后再试") await mc.finish()
async def _(msg: Message = CommandArg()): text = msg.extract_plain_text().strip() if not text: await md2pic.finish() img = await m2p(text) if img: await md2pic.finish(MessageSegment.image(img))
async def handle(matcher: Type[Matcher], msg: Message, r18=False): keyword = msg.extract_plain_text().strip() res = await get_setu(keyword=keyword, r18=r18) if not res: await matcher.finish("出错了,请稍后再试") if isinstance(res, str): await matcher.finish(res) else: await matcher.finish(MessageSegment.image(res))
async def roll_handle_first_receive(matcher: Matcher, arg: Message = CommandArg()): input = arg.extract_plain_text() # 如果有输入,则直接检查,出错就直接提示并结束对话 if input and not check_roll_syntax(input): await roll_cmd.finish("请输入正确的参数 ~>_<~") if input: matcher.set_arg("input", arg)
async def _(msg: Message = CommandArg()): equation = msg.extract_plain_text().strip().strip("$") if not equation: await tex.finish() image = await tex2pic(equation) if image: await tex.finish(MessageSegment.image(image)) else: await tex.finish("出错了,请检查公式或稍后再试")
async def _(msg: Message = CommandArg()): text = msg.extract_plain_text().strip() if not text: await speak.finish() voice = await get_voice(text) if voice: await speak.finish(MessageSegment.record(voice)) else: await speak.finish("出错了,请稍后再试")
async def _(msg: Message = CommandArg()): keyword = msg.extract_plain_text().strip() if not keyword: await baike.finish() res = await get_content(keyword) if res: await baike.finish(res) else: await baike.finish("找不到相关的条目")
async def ban_handle_first_receive(state: T_State, bot: Bot, arg: Message = CommandArg()): """获取需要的参数""" # 如果没有获取机器人在群中的职位,则获取 if not _bot_role: await refresh_bot_role(bot) plaintext = arg.extract_plain_text() if plaintext and plaintext.isdigit(): state["duration"] = int(plaintext)
async def _(msg: Message = CommandArg()): keyword = msg.extract_plain_text().strip() if not keyword: await nbnhhsh.finish() if not re.fullmatch(r"[a-zA-Z]+", keyword): await nbnhhsh.finish() res = await get_content(keyword, sources=["nbnhhsh"]) if res: await nbnhhsh.finish(res) else: await nbnhhsh.finish("找不到相关的缩写")
async def history_handle_first_receive(state: T_State, arg: Message = CommandArg()): match = re.match(r"^(\d+)(?:\-(\d+)(?:\-(\d+))?)?$", arg.extract_plain_text()) if match: year = match.group(1) month = match.group(2) day = match.group(3) if year: state["year"] = int(year) if month: state["month"] = int(month) if day: state["day"] = int(day)
async def _(msg: Message = CommandArg(), tome: bool = EventToMe()): keyword = msg.extract_plain_text().strip() if not keyword: await pixiv.finish() if not keyword.isdigit() and keyword not in ["日榜", "周榜", "月榜"]: if not tome: await pixiv.finish() res = await get_pixiv(keyword) if not res: await pixiv.finish("出错了,请稍后再试") await pixiv.finish(res)
async def help_handle(arg: Message = CommandArg()): args = arg.extract_plain_text() if args == "all": commands = get_commands() docs = "命令(别名)列表:\n" docs += "\n".join(sorted(map(format_name_aliases, commands))) await help_cmd.finish(docs) elif args: command_help = get_command_help(args) if command_help: await help_cmd.finish(command_help) await help_cmd.finish("请输入支持的命令") else: await help_cmd.finish(get_command_help("help"))
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 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 rank_handle_first_receive(state: T_State, arg: Message = CommandArg()): match = re.match(r"^(?:(\d+))?(?:n(\d+))?$", arg.extract_plain_text()) if match: display_number = match.group(1) minimal_msg_number = match.group(2) display_total_number = False if display_number: display_number = int(display_number) else: display_number = 3 if minimal_msg_number: minimal_msg_number = int(minimal_msg_number) display_total_number = True else: minimal_msg_number = 30 state["display_number"] = display_number state["minimal_msg_number"] = minimal_msg_number state["display_total_number"] = display_total_number
async def _(msg: Message = CommandArg()): text = msg.extract_plain_text().strip() plaintext = False pattern = [r"-p +.*?", r".*? +-p", r"--plaintext +.*?", r".*? +--plaintext"] for p in pattern: if re.fullmatch(p, text): plaintext = True break text = text.replace("-p", "").replace("--plaintext", "").strip() if not text: await wolfram.finish() if plaintext: res = await get_wolframalpha_text(text) else: res = await get_wolframalpha_simple(text) if not res: await wolfram.finish("出错了,请稍后再试") await wolfram.finish(res)
async def _(event: MessageEvent, msg: Message = CommandArg()): keyword = msg.extract_plain_text().strip() if not keyword: return plugins = get_plugins(event) plugin = None for p in plugins[::-1]: if keyword.lower() in (p.name.lower(), p.short_name.lower()): plugin = p break if not plugin: await unblock.finish(f"插件 {keyword} 不存在!") plugin_manager = PluginManager() conv: Conv = get_conv(event) if conv["group"]: conv["user"] = [] result = plugin_manager.unblock_plugin([plugin.name], conv) if result.get(plugin.name, False): res = f"插件 {plugin.short_name} 启用成功" else: res = f"插件 {plugin.short_name} 不存在或已关闭编辑权限!" await unblock.finish(res)
async def handle_first_receive(event: Event, state: T_State, args: Message = CommandArg()): # 通过是否为group判读信息结构 global group group = True if event.get_event_name().find( "group") != -1 else plugin_config.same_message_structure args: list = args.extract_plain_text().strip().split() state["help"] = False state["redraw"] = False state["test"] = "" if args: if "help" in args: state["help"] = True elif ("r" in args) or ("重抽" in args) or ("redraw" in args): state["redraw"] = True elif "test" in args: state["test"] = args[1] else: await luck.send(await luck_daily(user_id=int(event.get_user_id()), redraw=False, group_message=group), at_sender=group)
async def weather_handle_first_receive(matcher: Matcher, arg: Message = CommandArg()): plain_text = arg.extract_plain_text() if plain_text: matcher.set_arg("location", arg)
async def _(matcher: Matcher, msg: Message = CommandArg()): keyword = msg.extract_plain_text().strip() if not keyword: await cc98.finish() matcher.set_arg("keyword", Message(keyword))
async def _(matcher: Matcher, msg: Message = CommandArg()): keyword = msg.extract_plain_text().strip() if keyword and keyword.isdigit(): matcher.set_arg("topic_id", Message(keyword)) else: await show.finish()
async def rand_handle(arg: Message = CommandArg()): str_data = get_rand(arg.extract_plain_text()) await rand_cmd.finish(str_data, at_sender=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"))
async def gate_handle_first_receive(matcher: Matcher, arg: Message = CommandArg()): if arg.extract_plain_text(): matcher.set_arg("door_number", arg)
async def handler(msg: Message = CommandArg()): text = msg.extract_plain_text().strip() await handle(matcher, type, text)
async def music_handle_first_receive(matcher: Matcher, arg: Message = CommandArg()): if arg.extract_plain_text(): matcher.set_arg("name", arg)