async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): if message.has(At) and message.get(At)[0].target == get_config("BotQQ"): await update_user_call_count_plus1(group, member, UserCalledCount.at, "at") content = "".join(plain.text for plain in message.get(Plain)).strip().replace(" ", ",") set_result(message, await self.get_reply(member.id, group.id, content)) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): message_text = message.asDisplay() if message.has(At) and message_text.startswith("摸"): await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.petpet(message.get(At)[0].target)) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): if re.match("营销号#.*#.*#.*", message.asDisplay()): await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") _, somebody, something, other_word = message.asDisplay().split("#") content = f"""{somebody}{something}是怎么回事呢?{somebody}相信大家都很熟悉,但是{somebody}{something}是怎么回事呢,下面就让小编带大家一起了解下吧。\n{somebody}{something},其实就是{somebody}{other_word},大家可能会很惊讶{somebody}怎么会{something}呢?但事实就是这样,小编也感到非常惊讶。\n这就是关于{somebody}{something}的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!""" set_result(message, MessageItem(MessageChain.create([Plain(text=content)]), QuoteSource(GroupStrategy()))) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): message_text = message.asDisplay() if re.match(r'缩\s?[A-Za-z0-9]+', message_text): await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") abbreviation = message_text[1:].strip() set_result(message, await self.get_abbreviation_explain(group, member, abbreviation)) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): if message.asDisplay() == "历史上的今天": await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.get_today_in_history(group, member)) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): if message.asDisplay() == "教务通知": await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.format_output_notices()) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): if message.asDisplay() == "搜图": await update_user_call_count_plus1(group, member, UserCalledCount.search, "search") if not await get_setting(group.id, Setting.img_search): set_result(message, MessageItem(MessageChain.create([Plain(text="搜图功能未开启呐~请联系管理员哦~")]), Normal(GroupStrategy()))) try: await app.sendGroupMessage(group, MessageChain.create([ At(member.id), Plain("请在30秒内发送要搜索的图片呐~(仅支持pixiv图片搜索呐!)") ])) except AccountMuted: logger.error(f"Bot 在群 <{group.name}> 被禁言,无法发送!") return None image_get = None message_received = None @Waiter.create_using_function([GroupMessage]) def waiter( event: GroupMessage, waiter_group: Group, waiter_member: Member, waiter_message: MessageChain ): nonlocal image_get nonlocal message_received if time.time() - start_time < 30: if all([ waiter_group.id == group.id, waiter_member.id == member.id, len(waiter_message[Image]) == len(waiter_message.__root__) - 1 ]): image_get = True message_received = waiter_message return event else: logger.warning("等待用户超时!ImageSearchHandler进程推出!") return event bcc = AppCore.get_core_instance().get_bcc() inc = InterruptControl(bcc) start_time = time.time() await inc.wait(waiter) if image_get: logger.success("收到用户图片,启动搜索进程!") try: await app.sendGroupMessage( group, await self.search_image(message_received[Image][0]), quote=message_received[Source][0] ) raise AsyncioTasksGetResult except AccountMuted: logger.error(f"Bot 在群 <{group.name}> 被禁言,无法发送!") pass return None else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): if message.asDisplay().startswith("pdf "): await update_user_call_count_plus1(group, member, UserCalledCount.search, "search") keyword = message.asDisplay()[4:] set_result(message, await self.search_pdf(group, member, keyword)) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): message_text = message.asDisplay() if re.match("5000兆 .* .*", message_text): await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.gosencho_en_hoshi_style_image_generator(group, member, message)) elif re.match("ph .* .*", message_text): await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.pornhub_style_image_generator(group, member, message)) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): if message.asDisplay() == "舔": set_result( message, MessageItem( MessageChain.create([ Plain(text=random.choice(pero_dog_contents).replace( '*', '')) ]), Normal(GroupStrategy()))) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): if message.asDisplay().startswith("steam "): await update_user_call_count_plus1(group, member, UserCalledCount.search, "search") set_result( message, await self.get_steam_game_search(group, member, message.asDisplay()[6:])) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): if re.match(r"[1-7]日内新番", message.asDisplay()): await update_user_call_count_plus1(group, member, UserCalledCount.search, "search") days = int(message.asDisplay()[0]) set_result( message, await self.formatted_output_bangumi(group, member, days)) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): message_text = message.asDisplay() if message_text.startswith("setting -set "): set_result( message, await execute_setting_update(group, member, message_text)) elif re.match(r"user -grant @[1-9][0-9]{4,14} .*", message_text): set_result( message, await execute_grant_permission(group, member, message_text)) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): message_text = message.asDisplay() if message_text == "我的月内总结": await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.get_review(group, member, "month", "member")) elif message_text == "我的年内总结": await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.get_review(group, member, "year", "member")) elif message_text == "本群月内总结": await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.get_review(group, member, "month", "group")) elif message_text == "本群年内总结": await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.get_review(group, member, "year", "group")) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): message_serialization = message.asSerializationString().replace( "[mirai:source:" + re.findall(r'\[mirai:source:(.*?)]', message.asSerializationString(), re.S)[0] + "]", "") if re.match(r"添加回复关键词#[\s\S]*#[\s\S]*", message_serialization): if await user_permission_require(group, member, 2): set_result( message, await self.update_keyword(message, message_serialization)) else: return MessageItem(MessageChain.create([Plain(text="权限不足,爬")]), QuoteSource(GroupStrategy())) elif re.match(r"删除回复关键词#[\s\S]*", message_serialization): if await user_permission_require(group, member, 2): set_result( message, await self.delete_keyword(app, message_serialization, group, member)) else: set_result( message, MessageItem(MessageChain.create([Plain(text="权限不足,爬")]), QuoteSource(GroupStrategy()))) elif result := await self.keyword_detect(message_serialization): set_result(message, result)
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): message_text = message.asDisplay() if re.match(r"leetcode \S+", message_text): await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.leetcode_user_info_crawer(message)) elif re.match(r"(leetcode|力扣)每日一题", message_text): await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.get_leetcode_daily_question()) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): if re.match(r"qrcode .+", message.asDisplay()): await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") content = message.asDisplay()[7:] qrcode_img = qrcode.make(content) bytes_io = BytesIO() qrcode_img.save(bytes_io) set_result( message, MessageItem( MessageChain.create( [Image.fromUnsafeBytes(bytes_io.getvalue())]), QuoteSource(GroupStrategy()))) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): await app.revokeMessage if message.asDisplay().startswith("/merge "): await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") elements = [ element for element in message.__root__ if (isinstance(element, Image) or isinstance(element, Plain)) ] elements[0].text = elements[0].text[7:] set_result( message, MessageItem( await MessageChainUtils.messagechain_to_img( MessageChain.create(elements)), QuoteSource(GroupStrategy()))) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): group_id = group.id message_serialization = message.asSerializationString() message_serialization = message_serialization.replace( "[mirai:source:" + re.findall(r'\[mirai:source:(.*?)]', message_serialization, re.S)[0] + "]", "" ) if await get_setting(group_id, Setting.repeat): if group_id in self.__group_repeat.keys(): self.__group_repeat[group.id]["lastMsg"] = self.__group_repeat[group.id]["thisMsg"] self.__group_repeat[group.id]["thisMsg"] = message_serialization if self.__group_repeat[group.id]["lastMsg"] != self.__group_repeat[group.id]["thisMsg"]: self.__group_repeat[group.id]["stopMsg"] = "" else: if self.__group_repeat[group.id]["thisMsg"] != self.__group_repeat[group.id]["stopMsg"]: self.__group_repeat[group.id]["stopMsg"] = self.__group_repeat[group.id]["thisMsg"] set_result(message, MessageItem(message.asSendable(), Normal(GroupStrategy()))) else: self.__group_repeat[group_id] = {"lastMsg": "", "thisMsg": message_serialization, "stopMsg": ""} return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): if apps := message.get(App): app_json = json.loads(apps[0].content) if app_json["prompt"] == "[QQ小程序]哔哩哔哩" or "meta" in app_json and "detail_1" in app_json["meta"] and app_json["meta"]["detail_1"]["title"] == "哔哩哔哩": short_url = app_json["meta"]["detail_1"]["qqdocurl"] async with aiohttp.ClientSession() as session: async with session.get(url=short_url, allow_redirects=False) as resp: result = (await resp.read()).decode("utf-8") bv_url = result.split("\"")[1].split("?")[0].split("/")[-1].strip() # print(bv_url) bilibili_video_api_url = f"http://api.bilibili.com/x/web-interface/view?aid={self.bv_to_av(bv_url)}" async with aiohttp.ClientSession() as session: async with session.get(url=bilibili_video_api_url) as resp: result = (await resp.read()).decode('utf-8') result = json.loads(result) set_result(message, MessageItem(await self.generate_messagechain(result), Normal(GroupStrategy()))) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): message_text = "".join([plain.text for plain in message.get(Plain)]).strip() if message_text == "幻影" or message_text == "彩色幻影": await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") if len(message.get(Image)) != 2: set_result(message, MessageItem( MessageChain.create([Plain(text="非预期图片数!请按照 `显示图 隐藏图` 顺序发送,一共两张图片")]), QuoteSource(GroupStrategy()) )) else: display_img = message[Image][0] async with aiohttp.ClientSession() as session: async with session.get(url=display_img.url) as resp: display_img = IMG.open(BytesIO(await resp.read())) hide_img = message[Image][1] async with aiohttp.ClientSession() as session: async with session.get(url=hide_img.url) as resp: hide_img = IMG.open(BytesIO(await resp.read())) set_result(message, await self.get_message(group, member, display_img, hide_img)) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): message_text = message.asDisplay() if message_text == "微博热搜": await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.get_weibo_trending(group, member)) elif message_text == "知乎热搜": await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.get_zhihu_trending(group, member)) elif message_text == "github热搜": await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") set_result(message, await self.get_github_trending(group, member)) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): message_text = message.asDisplay() if re.match(r"super .*:[\n\r]+[\s\S]*", message_text): await update_user_call_count_plus1(group, member, UserCalledCount.functions, "functions") if not await get_setting(group.id, Setting.compile): set_result(message, MessageItem(MessageChain.create([Plain(text="网络编译器功能关闭了呐~去联系管理员开启吧~")]), Normal(GroupStrategy()))) language = re.findall(r"super (.*?):", message_text, re.S)[0] code = message_text[8 + len(language):] result = await self.network_compiler(group, member, language, code) if isinstance(result, str): set_result(message, MessageItem(MessageChain.create([Plain(text=result)]), QuoteSource(GroupStrategy()))) else: set_result(message, MessageItem( MessageChain.create([Plain(text=result["output"] if result["output"] else result["errors"])]), QuoteSource(GroupStrategy()) )) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): expression = None if expression: set_result(origin_message=message, item=MessageItem(MessageChain.create([Plain(text="模板")]), Normal(GroupStrategy()))) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): if message.asDisplay() in ["来碗鸡汤", "鸡汤", "毒鸡汤"]: set_result(message, await self.get_soup()) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): if message.asDisplay().startswith("/抽象 "): set_result(message, await self.transform_abstract_message(message.asDisplay()[4:])) else: return None
async def handle(self, app: GraiaMiraiApplication, message: MessageChain, group: Group, member: Member): message_serialization = message.asSerializationString().replace( "[mirai:source:" + re.findall(r'\[mirai:source:(.*?)]', message.asSerializationString(), re.S)[0] + "]", "") if re.match(r"添加功能关键词#[\s\S]*#[\s\S]*", message_serialization): if await user_permission_require(group, member, 2): set_result(message, await self.update_keyword(message_serialization)) else: set_result( message, MessageItem(MessageChain.create([Plain(text="权限不足,爬")]), QuoteSource(GroupStrategy()))) elif re.match(r"删除功能关键词#[\s\S]*", message_serialization): if await user_permission_require(group, member, 2): set_result( message, await self.delete_keyword(app, group, member, message_serialization)) else: set_result( message, MessageItem(MessageChain.create([Plain(text="权限不足,爬")]), QuoteSource(GroupStrategy()))) if re.match(r"\[mirai:image:{.*}\..*]", message_serialization): message_serialization = re.findall(r"\[mirai:image:{(.*?)}\..*]", message_serialization, re.S)[0] if resp_functions := list( orm.fetchall( select(TriggerKeyword.function).where( TriggerKeyword.keyword == message_serialization))): resp_functions = resp_functions[0] tfunc = None for function in resp_functions: if function in self.functions: tfunc = function break if not tfunc: return None else: await update_user_call_count_plus1( group, member, user_called_column_index[tfunc], user_called_name_index[tfunc]) if tfunc == "setu": if await get_setting(group.id, Setting.setu): if await get_setting(group.id, Setting.r18): set_result( message, await self.get_image_message(group, member, "setu18")) else: set_result( message, await self.get_image_message(group, member, tfunc)) else: set_result( message, MessageItem( MessageChain.create( [Plain(text="这是正规群哦~没有那种东西的呢!lsp爬!")]), Normal(GroupStrategy()))) elif tfunc == "realHighq": if await get_setting( group.id, Setting.real) and await get_setting( group.id, Setting.real_high_quality): set_result( message, await self.get_image_message(group, member, tfunc)) else: set_result( message, MessageItem( MessageChain.create( [Plain(text="这是正规群哦~没有那种东西的呢!lsp爬!")]), Normal(GroupStrategy()))) else: if await get_setting(group.id, setting_column_index[tfunc]): set_result( message, await self.get_image_message(group, member, tfunc)) else: set_result( message, MessageItem( MessageChain.create( [Plain(text="这是正规群哦~没有那种东西的呢!lsp爬!")]), Normal(GroupStrategy())))