Beispiel #1
0
 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
Beispiel #3
0
 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
Beispiel #6
0
 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
Beispiel #7
0
    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
Beispiel #8
0
 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
Beispiel #9
0
 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
Beispiel #10
0
 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
Beispiel #14
0
 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
Beispiel #15
0
 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
Beispiel #19
0
    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
Beispiel #20
0
    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
Beispiel #22
0
 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
Beispiel #24
0
 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
Beispiel #26
0
 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())))