async def group_message_listener(app: GraiaMiraiApplication, group: Group, message: MessageChain, member: Member): # print(group) # id=1130879466 name='测试群' accountPerm=<MemberPerm.Member: 'MEMBER'> # print(type(group)) if group.id in config.GROUPS: # print(message.asDisplay()) # print(message.__root__) # print(message.__root__[2].target) # print(type(message.__root__[2].target)) if config.STATE == 0 and message.asDisplay() == "开启bot": await app.sendGroupMessage(group, MessageChain.create([Plain("加载群成员数据")])) group_info = await app.memberList(group) for i in group_info: Player.member_list[i.id] = i.name print(Player.member_list) await app.sendGroupMessage( group, MessageChain.create([Plain("加载成功\n bot已开启")])) # bot start config.STATE = 1 elif config.STATE == 1 and message.asDisplay() == "关闭bot": config.STATE = 0 await app.sendGroupMessage(group, MessageChain.create([Plain("关闭bot")])) elif (config.STATE == 0 and message.asDisplay() == "关闭bot") or \ (config.STATE == 1 and message.asDisplay() == "开启bot"): await app.sendGroupMessage(group, MessageChain.create([Plain("异常操作")])) elif config.STATE == 1: message_return = "" # 申请出刀,解除出刀,完成,击杀,代打,撤回出刀,挂树,查树,强行下树 if message.asDisplay() == "申请出刀": if member.name not in Player.player_list and member.name not in Player.player_on_tree_list: # 正常 Player.player_list.append(member.name) message_return = "%s开始出刀" % member.name elif member.name in Player.player_list: message_return = "您已在出刀序列中" elif member.name in Player.player_on_tree_list: message_return = "您已挂树" elif message.asDisplay() == "解除出刀": if member.name in Player.player_list: Player.player_list.remove(member.name) message_return = "成功解除出刀" elif member.name not in Player.player_list: message_return = "您不在出刀序列中" elif member.name in Player.player_on_tree_list: message_return = "您已挂树" elif message.asDisplay().startswith("完成"): hurtNum = Boss.split_message(Boss, message.asDisplay()) hurtNum = int(hurtNum) if member.name in Player.player_list: message_return = Boss.hurtNum(Boss, member.name, hurtNum) Player.player_list.remove(member.name) elif member.name not in Player.player_list: message_return = "您还没有出刀" elif message.asDisplay().startswith("代打"): print(message.__root__[2].target) print(type(message.__root__[2].target)) name = Player.member_list.get(message.__root__[2].target) print("name", name) hurtNum = int(Boss.split_message(Boss, message.asDisplay())) message_return = Boss.hurtNum(Boss, name, hurtNum) elif message.asDisplay() == "撤回出刀": message_return = Boss.recall_last_hurtNum(Boss, member.name) elif message.asDisplay() == "挂树": if member.name in Player.player_list: Player.player_list.remove(member.name) Player.player_on_tree_list.append(member.name) message_return = "%s挂树" % (member.name) elif member.name not in Player.player_list: message_return = "您还没有出刀" elif member.name in Player.player_on_tree_list: message_return = "您已经挂树" elif message.asDisplay() == "查树": message_return = Player.read_tree(Player) elif message.asDisplay().startswith("强行下树"): if member.name in Player.player_on_tree_list: hurtNum = Boss.split_message(Boss, message.asDisplay()) hurtNum = int(hurtNum) message_return = Boss.hurtNum(Boss, member.name, hurtNum) elif member.name in Player.player_list: message_return = "您没有挂树,请正常报刀" elif member.name not in Player.player_list and member.name not in Player.player_on_tree_list: message_return = "请申请出刀" # boss数据操作 elif message.asDisplay() == "查看": message_return = Boss.get_boss_info(Boss) elif message.asDisplay().startswith("修正"): round, i, boss_remain = Boss.split_message( Boss, message.asDisplay()) round = int(round) i = int(i) boss_remain = int(boss_remain) message_return = Boss.set_boss_info(Boss, round, i, boss_remain) # 会战数据操作 elif message.asDisplay() == "出刀数据": message_return = Player.read(Player, Player.fight_data) elif message.asDisplay() == "读取": message_return = Player.readf(Player) elif message.asDisplay() == "保存": message_return = Player.savef(Player) else: message_return = "" await app.sendGroupMessage( group, MessageChain.create([Plain(message_return)]))
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.bangumi_search): set_result( message, MessageItem( MessageChain.create([Plain(text="搜番功能未开启呐~请联系管理员哦~")]), Normal(GroupStrategy()))) try: await app.sendGroupMessage( group, MessageChain.create( [At(member.id), Plain("请在30秒内发送要搜索的图片呐~")])) 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("等待用户超时!BangumiSearchHandler进程推出!") 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_bangumi(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 pixiv_Group_listener(message: MessageChain, app: GraiaMiraiApplication, group: Group, member: Member): pinyinStr = "" for i in range(len(lazy_pinyin(message.asDisplay()))): pinyinStr += lazy_pinyin(message.asDisplay())[i] if not pinyinStr.startswith("/"): if pinyinStr.find("setu") >= 0: if member.id in BlackId: await app.sendGroupMessage( group, MessageChain.create( [At(member.id), Plain("哼(╯▔皿▔)╯,不理你了!")])) else: if SearchSetting(group.id)["function"]["setu"]: try: url = "https://api.lolicon.app/setu/?apikey=" + LoliconKey[ 0] # 1号api data = json.loads(await aioRequest(url)) if data['code'] == 0: messageId = await app.sendGroupMessage( group, MessageChain.create([ At(member.id), Image.fromNetworkAddress( data['data'][0]['url']) ])) await asyncio.sleep(60) await app.revokeMessage(messageId) elif data['code'] == 429: url = "https://api.lolicon.app/setu/?apikey=" + LoliconKey[ 1] # 2号api data = json.loads(await aioRequest(url)) if data['code'] == 0: messageId = await app.sendGroupMessage( group, MessageChain.create([ At(member.id), Image.fromNetworkAddress( data['data'][0]['url']) ])) await asyncio.sleep(60) await app.revokeMessage(messageId) else: await app.sendGroupMessage( group, MessageChain.create([ At(member.id), Plain("今天发的已经够多了,明天再来吧~") ])) else: await app.sendGroupMessage( group, MessageChain.create( [At(member.id), Plain("今天发的已经够多了,明天再来吧~")])) except: await app.sendGroupMessage( group, MessageChain.create([ At(member.id), Plain("诶呀,发生一个未知的错误(ˉ▽ˉ;)...") ])) else: await app.sendGroupMessage( group, MessageChain.create( [At(member.id), Plain("本群因管理要求已禁止使用色图功能╮(╯▽╰)╭")]))
async def friend_message_listener(app: GraiaMiraiApplication, friend: Friend, message: MessageChain): await app.sendFriendMessage( friend, MessageChain.create([Plain(reply(message[Plain][0].text) + ' ')]))
async def search_image(group_id: int, sender: int, img: Image) -> list: """ Return search result Args: group_id: Group id sender: Sender img: Image to search Examples: message = await search_image(group_id, sender, image) Return: [ str: Auxiliary treatment to be done(Such as add statement), MessageChain: Message to be send(MessageChain) ] """ await set_get_img_ready(group_id, sender, False, "searchReady") print(await get_image_ready(group_id, sender, "searchReady")) search_total_count = await get_total_calls("search") + 1 await update_total_calls(search_total_count, "search") path = "%s%s.png" % (await get_config("searchPath"), search_total_count) async with aiohttp.ClientSession() as session: async with session.get(url=img.url) as resp: img_content = await resp.read() image = IMG.open(BytesIO(img_content)) image.save(path) # url for headers url = "https://saucenao.com/search.php" # picture url pic_url = img.url # json requesting url url2 = f"https://saucenao.com/search.php?db=999&output_type=2&testmode=1&numres=1&url={pic_url}" # data for posting. payload = { "url": pic_url, "numres": 1, "testmode": 1, "db": 999, "output_type": 2, } # header to fool the website. headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36", "Sec-Fetch-Dest": "document", "Sec-Fetch-Mode": "navigate", "Sec-Fetch-Site": "none", "Sec-Fetch-User": "******", "Referer": url, "Origin": "https://saucenao.com", "Host": "saucenao.com", "cookie": await get_config("saucenaoCookie") } # async with aiohttp.ClientSession() as session: # async with session.post(url=url, headers=headers, data=payload) as resp: # json_data = await resp.json() # print thumbnail URL. # print(json_data) # print(json_data["results"][0]["header"]["thumbnail"]) path = "M:\\pixiv\\Thumbnail\\%s.png" % search_total_count async with aiohttp.ClientSession() as session: async with session.post(url=url, headers=headers, data=payload) as resp: json_data = await resp.json() print(json_data) async with aiohttp.ClientSession() as session: async with session.get( url=json_data["results"][0]["header"]["thumbnail"]) as resp: img_content = await resp.read() image = IMG.open(BytesIO(img_content)) image.save(path) similarity = json_data["results"][0]["header"]["similarity"] try: pic_url = "\n" + "\n".join(json_data["results"][0]["data"]["ext_urls"]) except KeyError: pic_url = "None" if "pixiv_id" not in json_data["results"][0]["data"]: if "source" not in json_data["results"][0]["data"]: return [ "quoteSource", MessageChain.create([Plain(text="8好意思~没有找到相似的图诶~")]) ] else: try: creator = json_data["results"][0]["data"]["creator"][0] except Exception: creator = "Unknown!" return [ "quoteSource", MessageChain.create([ Image.fromLocalFile(path), Plain(text="\n相似度:%s%%\n" % similarity), Plain(text="原图地址:%s\n" % pic_url), Plain(text="作者:%s\n" % creator), Plain(text="如果不是你想找的图的话可能因为这张图是最近才画出来的哦,网站还未收录呢~过段日子再来吧~") ]) ] else: pixiv_id = json_data["results"][0]["data"]["pixiv_id"] user_name = json_data["results"][0]["data"]["member_name"] user_id = json_data["results"][0]["data"]["member_id"] # record("search",dist,sender,groupId,True,"img") return [ "quoteSource", MessageChain.create([ Image.fromLocalFile(path), Plain(text="\n相似度:%s%%\n" % similarity), Plain(text="原图地址:%s\n" % pic_url), Plain(text="作品id:%s\n" % pixiv_id), Plain(text="作者名字:%s\n" % user_name), Plain(text="作者id:%s\n" % user_id) ]) ]
async def group_recall_event(event: GroupRecallEvent): rmsg = str(event.authorId) rmsg += ' 撤回消息啦!\n' rmsg += group_msg_database[str(event.group.id) + str(event.authorId)] await app.sendGroupMessage(event.group, MessageChain(__root__=[Plain(rmsg)]))
async def search_bangumi(group_id: int, sender: int, img_url: str) -> list: await set_get_img_ready(group_id, sender, False, "searchBangumiReady") async with aiohttp.ClientSession() as session: async with session.get(url=img_url) as resp: img_content = await resp.read() url = "https://trace.moe/search" headers = { "X-Requested-With": "XMLHttpRequest", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", } image_b64 = base64.b64encode(img_content) params = f"data={quote(f'data:image/jpeg;base64,{image_b64.decode()}')}&filter={''}&trial={'0'}" async with aiohttp.ClientSession() as session: async with session.post(url=url, headers=headers, data=params) as resp: result = await resp.json() docs = result["docs"] if docs: try: print(docs[0]) title_chinese = docs[0]["title_chinese"] title_origin = docs[0]["title_chinese"] file_name = docs[0]["file"] anilist_id = docs[0]["anilist_id"] time_from = docs[0]["from"] time_to = docs[0]["to"] t = docs[0]["t"] tokenthumb = docs[0]["tokenthumb"] thumbnail_url = f"https://trace.moe/thumbnail.php?anilist_id={anilist_id}&file={quote(file_name)}&t={t}&token={tokenthumb}" print(thumbnail_url) # 下载缩略图 path = "./statics/temp/tempSearchBangumi.jpg" async with aiohttp.ClientSession() as session: async with session.get(url=thumbnail_url) as resp: thumbnail_content = await resp.read() image = IMG.open(BytesIO(thumbnail_content)) image.save(path) url = f"https://trace.moe/info?anilist_id={anilist_id}" async with aiohttp.ClientSession() as session: async with session.get(url=url) as resp: result = await resp.json() result = result[0] start_date = f"{result['startDate']['year']}-{result['startDate']['month']}-{result['startDate']['day']}" end_date = f"{result['endDate']['year']}-{result['endDate']['month']}-{result['endDate']['day']}" score = result["averageScore"] message = MessageChain.create([ Plain(text="搜索到结果:\n"), Image.fromLocalFile(path), Plain(text=f"name: {title_origin}\n"), Plain(text=f"Chinese name: {title_chinese}\n"), Plain(text=f"file name: {file_name}\n"), Plain( text= f"time: {await sec_to_str(time_from)} ~ {await sec_to_str(time_to)}\n" ), Plain(text=f"score: {score}\n"), Plain(text=f"Broadcast date: {start_date} ~ {end_date}\n") ]) return [ "quoteSource", await messagechain_to_img(message=message, max_width=1080, img_fixed=True) ] except Exception as e: return [ "quoteSource", MessageChain.create( [Plain(text="出错了呢~\n"), Plain(text=str(e))]) ] else: return ["quoteSource", MessageChain.create([Plain(text="没有搜索到结果呐~")])]
async def group_message_process(message: MessageChain, message_info: GroupMessage, app: GraiaMiraiApplication) -> list: """ Process the received message and return the corresponding message Args: message: Received message(MessageChain) message_info: Received message(GroupMessage) app: APP Examples: message_list = await message_process(message, message_info) Return: [ str: Auxiliary treatment to be done(Such as add statement), MessageChain: Message to be send(MessageChain) ] """ message_text = message.asDisplay() message_serialization = message.asSerializationString() sender = message_info.sender.id group_id = message_info.sender.group.id # 黑名单检测 if sender in await get_blacklist(): print("Blacklist!No reply!") return ["None"] # print("message_serialization:", message_serialization) if message.has(At) and message.get(At)[0].target == await get_config( "BotQQ"): await update_user_called_data(group_id, sender, "at", 1) if message.has(At) and message.get(At)[0].target == await get_config( "BotQQ") and re.search("@.* setting.*", message_text): try: _, config, new_value = message_text.split(".") return await setting_process(group_id, sender, config, new_value) except ValueError: return [ "None", MessageChain.create([Plain(text="Command Error!")]) ] """ 图片功能: setu real bizhi time search yellow predict lsp rank """ if message_text in response_set["setu"]: if await get_setting(group_id, "setu"): if sender == 80000000: return [ "None", MessageChain.create([Plain(text="要涩图就光明正大!匿名算什么好汉!")]) ] await update_dragon_data(group_id, sender, "normal") await update_user_called_data(group_id, sender, "setu", 1) if await get_setting(group_id, "r18"): return await get_pic("setu18", group_id, sender) else: return await get_pic("setu", group_id, sender) else: return [ "None", MessageChain.create([Plain(text="我们是正规群呐,不搞那一套哦,想看去辣种群看哟~")]) ] elif re.search("来点.*[色涩]图", message_text): if await get_setting(group_id, "setu"): if sender == 80000000: return [ "None", MessageChain.create([Plain(text="要涩图就光明正大!匿名算什么好汉!")]) ] keyword = re.findall("来点(.*?)[涩色]图", message_text, re.S)[0] print(keyword) if keyword in ["r18", "R18", "r-18", "R-18"]: return [ "quoteSource", MessageChain.create( [Plain(text="此功能暂时还不支持搜索R18涩图呐~忍忍吧LSP!")]) ] # await app.sendGroupMessage( await update_dragon_data(group_id, sender, "normal") await update_user_called_data(group_id, sender, "setu", 1) return await get_setu_keyword(keyword=keyword) else: return [ "None", MessageChain.create([Plain(text="我们是正规群呐,不搞那一套哦,想看去辣种群看哟~")]) ] elif message_text in response_set["real"]: if await get_setting(group_id, "real"): if sender == 80000000: return [ "None", MessageChain.create([Plain(text="要涩图就光明正大!匿名算什么好汉!")]) ] await update_dragon_data(group_id, sender, "normal") await update_user_called_data(group_id, sender, "real", 1) return await get_pic("real", group_id, sender) else: return [ "None", MessageChain.create([Plain(text="我们是正规群呐,不搞那一套哦,想看去辣种群看哟~")]) ] elif message_text in response_set["realHighq"]: if await get_setting(group_id, "real"): if sender == 80000000: return [ "None", MessageChain.create([Plain(text="要涩图就光明正大!匿名算什么好汉!")]) ] await update_dragon_data(group_id, sender, "normal") await update_user_called_data(group_id, sender, "real", 1) return await get_pic("realHighq", group_id, sender) else: return [ "None", MessageChain.create([Plain(text="我们是正规群呐,不搞那一套哦,想看去辣种群看哟~")]) ] elif message_text in response_set["bizhi"]: if await get_setting(group_id, "bizhi"): if sender == 80000000: return [ "None", MessageChain.create([Plain(text="要涩图就光明正大!匿名算什么好汉!")]) ] await update_user_called_data(group_id, sender, "bizhi", 1) return await get_pic("bizhi", group_id, sender) else: return [ "None", MessageChain.create([Plain(text="壁纸功能关闭了呐~想要打开的话就联系管理员吧~")]) ] elif message_text.startswith("setu*") or message_text.startswith( "real*") or message_text.startswith("bizhi*"): if message_text.startswith("bizhi*"): command = "bizhi" num = message_text[6:] else: command = message_text[:4] num = message_text[5:] if num.isdigit(): num = int(num) if sender not in await get_admin(group_id): if 0 <= num <= 5: return [ "None", MessageChain.create([ Plain(text="只有主人和管理员可以使用%s*num命令哦~你没有权限的呐~" % command) ]) ] elif num < 0: return [ "None", MessageChain.create( [Plain(text="%d?你有问题?不如给爷吐出%d张来" % (num, -num))]) ] else: return [ "None", MessageChain.create( [Plain(text="不是管理员你要你🐎呢?老色批!还要那么多?给你🐎一拳,给爷爬!")]) ] if num < 0: return [ "None", MessageChain.create( [Plain(text="%d?你有问题?不如给爷吐出%d张来" % (num, -num))]) ] elif num > 5: if sender == await get_config("HostQQ"): return ["%s*" % command, num] else: return [ "None", MessageChain.create( [Plain(text="管理最多也只能要5张呐~我可不会被轻易玩儿坏呢!!!!")]) ] else: if sender != await get_config("HostQQ"): await update_user_called_data(group_id, sender, command, num) return ["%s*" % command, int(num)] else: return ["None", MessageChain.create([Plain(text="必须为数字!")])] elif message_text == "几点了": return await get_wallpaper_time(group_id, sender) elif message_text.startswith("选择表盘"): if message_text == "选择表盘": return await show_clock_wallpaper(sender) elif message_text == "搜图": if await get_setting(group_id, "search"): await set_get_img_ready(group_id, sender, True, "searchReady") return [ "None", MessageChain.create( [At(sender), Plain(text="请发送要搜索的图片呐~(仅支持pixiv图片搜索呐!)")]) ] else: return [ "None", MessageChain.create( [At(sender), Plain(text="搜图功能关闭了呐~想要打开就联系管理员吧~")]) ] elif message.has(Image) and await get_setting( group_id, "search") and await get_image_ready( group_id, sender, "searchReady"): # print("status:", await get_image_ready(group_id, sender, "searchReady")) image = message.get(Image)[0] await update_user_called_data(group_id, sender, "search", 1) return await search_image(group_id, sender, image) elif message_text == "这张图涩吗": if await get_setting(group_id, "yellowPredict"): await set_get_img_ready(group_id, sender, True, "yellowPredictReady") return [ "None", MessageChain.create( [At(target=sender), Plain(text="请发送要预测的图片呐~")]) ] else: return [ "None", MessageChain.create([ At(target=sender), Plain(text="图片涩度评价功能关闭了呐~想要打开就联系机器人管理员吧~") ]) ] elif message.has(Image) and await get_setting( group_id, "yellowPredict") and await get_image_ready( group_id, sender, "yellowPredictReady"): image = message.get(Image)[0] await update_user_called_data(group_id, sender, "yellowPredict", 1) return await image_yellow_judge(group_id, sender, image, "yellowPredict") elif message_text == "搜番": if await get_setting(group_id, "searchBangumi"): await set_get_img_ready(group_id, sender, True, "searchBangumiReady") return [ "None", MessageChain.create( [At(sender), Plain(text="请发送要搜索的图片呐~(仅支持番剧图片搜索呐!)")]) ] else: return [ "None", MessageChain.create( [At(sender), Plain(text="搜番功能关闭了呐~想要打开就联系管理员吧~")]) ] elif message.has(Image) and await get_setting( group_id, "searchBangumi") and await get_image_ready( group_id, sender, "searchBangumiReady"): # print("status:", await get_image_ready(group_id, sender, "searchReady")) image = message.get(Image)[0] await update_user_called_data(group_id, sender, "search", 1) return await search_bangumi(group_id, sender, image.url) elif message_text == "rank": return await get_rank(group_id, app) # 爬虫相关功能 """ SAGIRI API相关功能: 历史上的今天 """ if message_text == "历史上的今天": return await get_history_today() """ 微博相关功能: 微博热搜 """ if message_text == "weibo" or message_text == "微博": # return [ # "None", # MessageChain.create([ # Plain(text="本功能已停用,短时间内不再开放!请勿多次申请") # ]) # ] return await get_weibo_hot(group_id) """ B站相关功能: B站新番时间表 B站直播间查询 """ if message_text[-4:] == "日内新番": num = message_text[:-4] if not num.isdigit() or int(num) <= 0 or int(num) > 7: return [At(target=sender), Plain(text="参数错误!必须为数字1-7!")] else: return await formatted_output_bangumi(int(num), group_id) """ 力扣相关功能: 用户信息查询 每日一题查询 具体题目查询 """ if message_text.startswith("leetcode "): return await get_leetcode_statics(message_text.replace( "leetcode ", "")) """ steam相关功能: steam游戏查询 """ if message_text.startswith("steam "): return await get_steam_game_search(message_text.replace("steam ", "")) """ bangumi相关功能: 番剧查询 """ if message_text.startswith("番剧 "): keyword = message_text[3:] return await get_bangumi_info(sender, keyword) """ 其他功能: 文本翻译 点歌 机器人帮助 自动回复 笑话 群语录 平安经(群人数过多时慎用) pornhub风格图片生成 缩写 获取磁力链 摸~ """ if message.has(At) and message.get(At)[0].target == await get_config( "BotQQ") and re.search(".*用.*怎么说", message_text): return await get_translate(message_text, sender) elif message_text.startswith("点歌 ") and len(message_text) >= 4: print("search song:", message_text[3:]) return await get_song_ordered(message_text[3:]) if message_text == "help" or message_text == "!help" or message_text == "/help" or message_text == "!help": return [ "None", MessageChain.create([ Plain( text= "点击链接查看帮助:http://doc.sagiri-web.com/web/#/p/c79d523043f6ec05c1ac1416885477c7\n" ), Plain(text="文档尚未完善,功能说明还在陆续增加中!") ]) ] if message_text == "教务通知": return await get_jlu_csw_notice(group_id) if re.search("来点.*笑话", message_text): joke_dict = { "苏联": "soviet", "法国": "french", "法兰西": "french", "美国": "america", "美利坚": "america" } name = re.findall(r'来点(.*?)笑话', message_text, re.S) if name == ['']: return [ "None", MessageChain.create( [At(target=sender), Plain(text="来点儿啥笑话啊,你又不告诉人家!哼!")]) ] elif name[0] in joke_dict.keys(): msg = await get_key_joke(joke_dict[name[0]]) await write_log("joke", "none", sender, group_id, True, "function") return msg else: msg = await get_joke(name[0]) await write_log("joke", "none", sender, group_id, True, "function") return msg if message_text == "群语录": return await get_group_quotes(group_id, app, "None", "random", "None") elif re.search("来点.*语录", message_text): name = re.findall(r'来点(.*?)语录', message_text, re.S)[0] at_obj = message.get(At) if name == [] and at_obj == []: return ["None"] elif at_obj: at_str = at_obj[0].asSerializationString() member_id = re.findall(r'\[mirai:at:(.*?),@.*?\]', at_str, re.S)[0] await write_log("quotes", "None", sender, group_id, True, "function") if message_text[-4:] == ".all": return await get_group_quotes(group_id, app, member_id, "all", "memberId") else: return await get_group_quotes(group_id, app, member_id, "select", "memberId") elif name: await write_log("quotes", "None", sender, group_id, True, "function") if message_text[-4:] == ".all": return await get_group_quotes(group_id, app, name, "all", "nickname") else: return await get_group_quotes(group_id, app, name, "select", "nickname") if message_text == "平安": member_list = await app.memberList(group_id) msg = list() msg.append(Plain(text=f"群{message_info.sender.group.name}平安经\n")) for i in member_list: msg.append(Plain(text=f"{i.name}平安\n")) return ["None", MessageChain.create(msg)] if message_text.startswith("ph ") and len(message_text.split(" ")) == 3: if "\\" in message_text or "/" in message_text: return [ "None", MessageChain.create([Plain(text="不支持 '/' 与 '\\' !")]) ] args = message_text.split(" ") left_text = args[1] right_text = args[2] path = f'./statics/temp/ph_{left_text}_{right_text}.png' if not os.path.exists(path): try: await make_ph_style_logo(left_text, right_text) except OSError as e: if "[Errno 22] Invalid argument:" in str(e): return [ "quoteSource", MessageChain.create([Plain(text="非法字符!")]) ] return ["None", MessageChain.create([Image.fromLocalFile(path)])] # if message_text.startswith("缩 "): # abbreviation = message_text[2:] # print(abbreviation) # if abbreviation.isalnum(): # return await get_abbreviation_explain(abbreviation, group_id) # else: # return [ # "quoteSource", # MessageChain.create([ # Plain(text="只能包含数字及字母!") # ]) # ] if message_text.startswith("magnet "): target = message_text[7:] return await search_magnet(target, group_id) if message.has(At) and message_text.startswith( "摸") or message_text.startswith("摸 "): target_id = message.get(At)[0].target await petpet(target_id) return [ "None", MessageChain.create([ Image.fromLocalFile( f'./statics/temp/tempPetPet-{target_id}.gif') ]) ] if message.has(At) and message.get(At)[0].target == await get_config( "BotQQ"): return await reply_process(group_id, sender, message_text) return ["None"]
async def search_image(img: Image) -> MessageChain: path = "./modules/PixivImageSearcher/tempSavedImage.png" thumbnail_path = "./modules/PixivImageSearcher/tempThumbnail.png" async with aiohttp.ClientSession() as session: async with session.get(url=img.url) as resp: img_content = await resp.read() image = IMG.open(BytesIO(img_content)) image.save(path) # url for headers url = "https://saucenao.com/search.php" # picture url pic_url = img.url # json requesting url url2 = f"https://saucenao.com/search.php?db=999&output_type=2&testmode=1&numres=1&url={pic_url}" # data for posting. payload = { "url": pic_url, "numres": 1, "testmode": 1, "db": 999, "output_type": 2, } # header to fool the website. headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36", "Sec-Fetch-Dest": "document", "Sec-Fetch-Mode": "navigate", "Sec-Fetch-Site": "none", "Sec-Fetch-User": "******", "Referer": url, "Origin": "https://saucenao.com", "Host": "saucenao.com", "cookie": saucenao_cookie } async with aiohttp.ClientSession() as session: async with session.post(url=url, headers=headers, data=payload) as resp: json_data = await resp.json() if json_data["header"]["status"] == -1: return MessageChain.create( [Plain(text=f"错误:{json_data['header']['message']}")]) print(json_data) if not json_data["results"]: return MessageChain.create([Plain(text="没有搜索到结果呐~")]) result = json_data["results"][0] header = result["header"] data = result["data"] async with aiohttp.ClientSession() as session: async with session.get(url=header["thumbnail"]) as resp: img_content = await resp.read() image = IMG.open(BytesIO(img_content)) image.save(thumbnail_path) similarity = header["similarity"] data_str = f"搜索到如下结果:\n\n相似度:{similarity}%\n" for key in data.keys(): if isinstance(data[key], list): data_str += (f"\n{key}:\n " + "\n".join(data[key]) + "\n") else: data_str += f"\n{key}:\n {data[key]}\n" return MessageChain.create( [Image.fromLocalFile(thumbnail_path), Plain(text=f"\n{data_str}")])
async def printDM(app, data, room_id): '''解析并输出数据包的数据''' # 获取数据包的长度,版本和操作类型 packetLen = int(data[:4].hex(), 16) ver = int(data[6:8].hex(), 16) op = int(data[8:12].hex(), 16) # 有的时候可能会两个数据包连在一起发过来,所以利用前面的数据包长度判断, if(len(data) > packetLen): await printDM(app, data[packetLen:], room_id) data = data[:packetLen] # 有时会发送过来 zlib 压缩的数据包,这个时候要去解压。 if(ver == 2): data = zlib.decompress(data[16:]) await printDM(app, data, room_id) return # ver 为1的时候为进入房间后或心跳包服务器的回应。op 为3的时候为房间的人气值。 if(ver == 1): if(op == 3): t = datetime.datetime.now().strftime("[%Y-%m-%d %H:%M:%S,%f") t = t[:len(t) - 3] + ']' print('%s[POPULARITY]: %s: %d' % (t, room_id, int(data[16:].hex(), 16))) return # ver 不为2也不为1目前就只能是0了,也就是普通的 json 数据。 # op 为5意味着这是通知消息,cmd 基本就那几个了。 if(op == 5): try: jd = json.loads(data[16:].decode('utf-8', errors='ignore')) sstr = '' ''' if(jd['cmd'] == 'DANMU_MSG'): sstr = '[DANMU] ' + jd['info'][2][1] + ': ' + jd['info'][1] elif(jd['cmd'] == 'LIVE'): sstr = '[Notice] LIVE Start!' elif(jd['cmd'] == 'PREPARING'): sstr = '[Notice] LIVE Ended!' elif(jd['cmd'] == 'SEND_GIFT'): sstr = '[GIFT]' + jd['data']['uname'] + ' ' + jd['data']['action'] + ' ' + str(jd['data']['num']) + 'x' + jd['data']['giftName'] elif(jd['cmd'] == "INTERACT_WORD"): if jd['data']['msg_type'] == 1: sstr = '[ENTRY] ' + jd['data']['uname'] + ' 进入直播间' elif jd['data']['msg_type'] == 2: sstr = '[FOLLOW] ' + jd['data']['uname'] + ' 关注了直播间' elif(jd['cmd'] == "未知"): print(jd) sstr = '[SHARE] ' + jd['data']['uname'] + ' 分享了直播间' else: sstr = '[OTHER] ' + jd['cmd'] if sstr != '': await app.sendGroupMessage(group, MessageChain.create([Plain(sstr)])) ''' if(jd['cmd'] == 'LIVE'): Localpath = './data/live.json' data = {} fr = open(Localpath, encoding='utf-8') data = json.load(fr) fr.close() info = get_info(room_id) for i in data["data"]: if (room_id != str(i['room_id'])): continue for j in i['group']: sstr = '%s的直播开始啦!\n直播关键帧:' % info['user'] await app.sendGroupMessage(j, MessageChain.create([ Plain(sstr), Image.fromNetworkAddress(info['keyframe']), Plain('\n直播间地址:https://live.bilibili.com/%d' % info['room_id']) ])) break except Exception as e: pass
async def process(messagePlain: str, group, member): """ 处理游戏进度 :param messagePlain :param group :param member """ global a, q if messagePlain == "exit": akinatorGame.hold = False akinatorGame.end = False if akinatorGame.end: # 评价结果 if messagePlain.lower() == "yes" or messagePlain.lower() == "y": await atri.app.sendGroupMessage(group, MessageChain.create( [ Plain("Yay") ] )) else: await atri.app.sendGroupMessage(group, MessageChain.create( [ Plain("Oof") ] )) akinatorGame.end = False if akinatorGame.hold and messagePlain in [ 'yes', 'y', '0', 'no', 'n', '1', 'i', 'idk', 'i dont know', "i don't know", '2', 'probably', 'p', '3', 'probably not', 'pn', '4' ]: # 分支过程中 a = messagePlain if a == "b": try: q = akinatorGame.aki.back() await atri.app.sendGroupMessage(group, MessageChain.create( [ Plain(q) ] )) except akinator.CantGoBackAnyFurther: pass else: q = akinatorGame.aki.answer(a) await atri.app.sendGroupMessage(group, MessageChain.create( [ Plain(q + "\n\t"), Plain(f"{akinatorGame.aki.progression}%") ] )) if akinatorGame.aki.progression > 99: # 给出结果 akinatorGame.hold = False akinatorGame.aki.win() await atri.app.sendGroupMessage(group, MessageChain.create( [ Plain( f"It's {akinatorGame.aki.first_guess['name']} ({akinatorGame.aki.first_guess['description']})! Was I correct?\n"), Image.fromNetworkAddress(akinatorGame.aki.first_guess['absolute_picture_path']) ] )) akinatorGame.end = True if messagePlain in akinatorGame.AkinatorCmd and not akinatorGame.hold: # start akinatorGame.end = False akinatorGame.hold = True await atri.app.sendGroupMessage(group, MessageChain.create( [ Plain("Please wait...\n" '''yes or y or 0 for YES no or n or 1 for NO i or idk or i dont know or i don't know or 2 for I DON’T KNOW probably or p or 3 for PROBABLY probably not or pn or 4 for PROBABLY NOT''' ), ] )) q = akinatorGame.aki.start_game("cn") await atri.app.sendGroupMessage(group, MessageChain.create( [ Plain(q + "\n\t"), Plain(f"{akinatorGame.aki.progression}%") ] ))
async def GoodNight(app: GraiaMiraiApplication, group: Group, mesg: MessageChain): msg = getAt(mesg)[1] if msg == '晚安': await app.sendGroupMessage(group, MessageChain.create([ Plain(text='晚安')])) pass
async def IndeedNext(app: GraiaMiraiApplication, group: Group, mesg: MessageChain): msg = getAt(mesg)[1] if '下次一定' in msg: await app.sendGroupMessage(group, MessageChain.create([ Plain(text='下次一定')])) pass
async def GetHelp(app: GraiaMiraiApplication, group: Group, mesg: MessageChain): msg = getAt(mesg)[1] if msg == '帮助': await app.sendGroupMessage(group, MessageChain.create([ Plain(text='帮助参见:https://github.com/CoTecho/Cobot/blob/master/README.md')])) pass
async def get_abbreviation_explain(abbreviation: str, group_id: int) -> list: url = "https://lab.magiconch.com/api/nbnhhsh/guess" headers = { "referer": "https://lab.magiconch.com/nbnhhsh/" } data = { "text": abbreviation } async with aiohttp.ClientSession() as session: async with session.post(url=url, headers=headers, data=data) as resp: res = await resp.json() # print(res) result = "可能的结果:\n\n" has_result = False for i in res: if "trans" in i: if i["trans"]: has_result = True result += f"{i['name']} => {','.join(i['trans'])}\n\n" else: result += f"{i['name']} => 没找到结果!\n\n" else: if i["inputting"]: has_result = True result += f"{i['name']} => {','.join(i['inputting'])}\n\n" else: result += f"{i['name']} => 没找到结果!\n\n" long_text_setting = await get_setting(group_id, "longTextType") if has_result: if long_text_setting == "img": img = text2piiic(string=result, poster="", length=max(len(x) for x in result.split("\n"))) img.save("./statics/temp/tempAbbreviation.png") return [ "quoteSource", MessageChain.create([ Image.fromLocalFile("./statics/temp/tempAbbreviation.png") ]) ] elif long_text_setting == "text": return [ "quoteSource", MessageChain.create([ Plain(text=result) ]) ] else: return [ "None", MessageChain.create([ Plain(text="数据库 longTextType 项出错!请检查!") ]) ] else: return [ "quoteSource", MessageChain.create([ Plain(text="没有找到结果哦~") ]) ]
async def sync_send_group_message(self, qq, msg): message = MessageChain.create([Plain(msg)]).asSendable() await self.app.sendGroupMessage(qq, message)
async def friend_message_listener(message: MessageChain, friend: Friend, app: GraiaMiraiApplication): print(str(friend.id) + " " + friend.nickname + " " + friend.remark) msg = message.asDisplay() rmsg = r0se_main(msg, friend=friend) await app.sendFriendMessage(friend, MessageChain(__root__=[Plain(rmsg)]))
async def sync_send_temp_message(self, group, qq, msg): message = MessageChain.create([Plain(msg)]).asSendable() await self.app.sendTempMessage(group, qq, message)
async def group_push_msg_scheduler(): group_list = [ 729054809, # pwnsky ] rmsg = '' # 每日先知文章群推送 if (time.localtime().tm_hour == 8 and time.localtime().tm_min == 0): for group_n in group_list: group = await app.getGroup(group_n) rmsg = get_xz_article() await app.sendGroupMessage(group, MessageChain(__root__=[Plain(rmsg)])) # 每日看雪文二进制章群推送 if (time.localtime().tm_hour == 9 and time.localtime().tm_min == 0): rmsg = get_kx_binary_article() for group_n in group_list: group = await app.getGroup(group_n) await app.sendGroupMessage(group, MessageChain(__root__=[Plain(rmsg)])) # 每日看雪密码学文章群推送 if (time.localtime().tm_hour == 12 and time.localtime().tm_min == 0): rmsg = get_kx_crypto_article() for group_n in group_list: group = await app.getGroup(group_n) await app.sendGroupMessage(group, MessageChain(__root__=[Plain(rmsg)])) # 每日看雪逆向文章群推送 if (time.localtime().tm_hour == 22 and time.localtime().tm_min == 0): rmsg = get_kx_reverse_article() for group_n in group_list: group = await app.getGroup(group_n) await app.sendGroupMessage(group, MessageChain(__root__=[Plain(rmsg)])) ''' # 每日看雪区块链文章群推送 if(time.localtime().tm_hour == 12 and time.localtime().tm_min == 0): rmsg = get_kx_blockchain_article() for group_n in group_list: group = await app.getGroup(group_n) await app.sendGroupMessage(group, MessageChain(__root__=[Plain( rmsg )])) ''' # 每日看ctf赛事群推送 if (time.localtime().tm_hour == 20 and time.localtime().tm_min == 0): rmsg = get_ctf_comming_match() for group_n in group_list: group = await app.getGroup(group_n) await app.sendGroupMessage(group, MessageChain(__root__=[Plain(rmsg)])) # 每日好友推送 if (time.localtime().tm_hour == 7 and time.localtime().tm_min == 0): rmsg = '早安! 宝贝 \n' rmsg += daily_words[random.randint(0, len(daily_words) - 1)] friend_list = await app.friendList() for friend in friend_list: await app.sendFriendMessage(friend, MessageChain(__root__=[Plain(rmsg)])) # 每日好友推送 if (time.localtime().tm_hour == 23 and time.localtime().tm_min == 30): rmsg = '晚安!宝贝 \n' rmsg += daily_words[random.randint(0, len(daily_words) - 1)] friend_list = await app.friendList() for friend in friend_list: await app.sendFriendMessage(friend, MessageChain(__root__=[Plain(rmsg)]))
msg = [ Plain(cmd[pos - 1] if random. randint(0, 1) else f'不{cmd[pos - 1]}') ] await app.sendGroupMessage(message.sender.group, MeCh.create(msg)) if cmd == '吃什么': rate = random.randint(0, 100) if rate < 2: eat = '吃屎吧' else: what_we_eat = ttkConfig.getConfig('setting').get('what_we_eat') index = random.randint(0, len(what_we_eat) - 1) eat = f'吃{what_we_eat[index]}' await app.sendGroupMessage(message.sender.group, MeCh.create([Plain(eat)])) async def atOrQuoteHandler(self, app, message: GroupMessage): logger.debug('TalkToMe at handler act') cmd: str = message.messageChain.asDisplay().split(' ')[0] if cmd == '骂他': if self.Economy: if not await self.Economy.Economy.pay( message.sender.id, self.Economy.capitalist, 500): info: dict = await self.Economy.Economy.money( message.sender.id) plain: Plain = Plain( f"你的{self.Economy.unit}不足,你还剩{info['balance']}只{self.Economy.unit},单价500只{self.Economy.unit}" ) await app.sendGroupMessage(message.sender.group, MeCh.create([plain]))
async def addddl(app, s, group, member, msg: str): event_title = '' event_start = '' event_end = '' event_local = '' _method = 'POST' text = msg.split(' ') if len(text) == 1: await app.sendGroupMessage(group, MessageChain.create([Plain('请输入标题!')])) elif len(text) == 2: event_end = event_start = ( datetime.now() - timedelta(hours=8) + timedelta(days=7)).strftime('%Y-%m-%dT%H:%M:%SZ') event_title = text[1] if event_start == '': text[2] = text[2].replace('-', '.') y = datetime.now().year m = 0 d = 0 subtext = text[2].split('.') if len(subtext) == 3: y = subtext[0] m = subtext[1] d = subtext[2] elif len(subtext) == 2: m = subtext[0] d = subtext[1] else: return event_end = event_start = ( datetime(int(y), int(m), int(d)) - timedelta(hours=8)).strftime('%Y-%m-%dT%H:%M:%SZ') url = 'http://canvas.tongji.edu.cn/api/v1/calendar_events' data = { 'calendar_event[title]': event_title, 'calendar_event[start_at]': event_start, 'calendar_event[end_at]': event_end, 'calendar_event[location_name]': event_local, 'calendar_event[context_code]': 'user_' + str(get_id(member.id)), '_method': _method, 'authenticity_token': parse.unquote( requests.utils.dict_from_cookiejar(s.cookies)['_csrf_token']) } r = s.post(url, data=data) if not is_json(r.text) or 'errors' in r.json(): await app.sendGroupMessage(group, MessageChain.create([Plain('添加失败!')])) else: await app.sendGroupMessage(group, MessageChain.create([Plain('添加成功!')]))
if args['key'] == 's': ripper.search().tags(args['tags']) if args['key'] == 'r': ripper.random().tags(args['tags']) if args['key'] == 'd': ripper.detail().specific([args['tags'], self.db]) if args['key'] == 'j': ja: JASearcher = JASearcher() ja.useProxy().setID(args['id']) result: dict = await ja.get(args['offset'], args['limit']) msg = [] for re in result: if 'image' in re.keys(): msg.append(Image.fromUnsafeBytes(re['image'])) if 'text' in re.keys(): msg.append(Plain(re['text'])) if not msg: await app.sendGroupMessage(message.sender.group, MeCh.create([Plain('未搜索到')])) return await app.sendGroupMessage(message.sender.group, MeCh.create(msg)) return tasks: List[asyncio.Task] = [] try: result = await ripper.offset(args['offset']).count(args['count']).rating(self.ratings[gid]).get() except ClientConnectorError: msg = [At(message.sender.id), Plain('不给发,爬')] await app.sendGroupMessage(message.sender.group, MeCh.create(msg)) return number = len(result) if not number: msg = [At(message.sender.id), Plain('未搜索到')]
async def get_song_ordered(keyword: str, app: GraiaMiraiApplication) -> list: """ Search song from CloudMusic Args: keyword: Keyword to search Examples: message = await get_song_ordered("lemon") Return: [ str: Auxiliary treatment to be done(Such as add statement), MessageChain: Message to be send(MessageChain) ] """ song_search_url = "http://music.163.com/api/search/get/web?csrf_token=hlpretag=&hlposttag=&s={" \ "%s}&type=1&offset=0&total=true&limit=1" % keyword # print(song_search_url) async with aiohttp.ClientSession() as session: async with session.get(url=song_search_url) as resp: data_json = await resp.read() data_json = json.loads(data_json) if data_json["code"] != 200: return [ "quoteSource", MessageChain.create( [Plain(text=f"服务器返回错误:{data_json['message']}")]) ] if data_json["result"]["songCount"] == 0: return [ "quoteSource", MessageChain.create([Plain(text="没有搜索到呐~换一首歌试试吧!")]) ] song_id = data_json["result"]["songs"][0]["id"] detail_url = f"http://musicapi.leanapp.cn/song/detail?ids={song_id}" async with aiohttp.ClientSession() as session: async with session.get(url=detail_url) as resp: data_json = await resp.json() song_name = data_json["songs"][0]["name"] pic_url = data_json["songs"][0]["al"]["picUrl"] desc = data_json["songs"][0]["ar"][0]["name"] json_code = { "app": "com.tencent.structmsg", "desc": "音乐", "meta": { "music": { "action": "", "android_pkh_name": "", "app_type": 1, "appid": 100495085, "desc": desc, "jumpUrl": f"https://y.music.163.com/m/song/{song_id}", "musicUrl": f"http://music.163.com/song/media/outer/url?id={song_id}", "preview": pic_url, "sourceMsgId": 0, "source_icon": "", "source_url": "", "tag": "假装自己是网易云音乐的屑机器人", "title": song_name } }, "prompt": f"[分享]{song_name}", "ver": "0.0.0.1", "view": "music" } music_url = f"http://music.163.com/song/media/outer/url?id={song_id}" async with aiohttp.ClientSession() as session: async with session.get(url=music_url) as resp: music_bytes = await resp.read() music_bytes = await silk(music_bytes, 'b', '-ss 0 -t 120') upload_resp = await app.uploadVoice(music_bytes) return [ "None", MessageChain.create([ # App(content=json.dumps(json_code)) upload_resp ]) ]
def on_info(server: ServerInterface, info: Info, group: Group): if info.is_player: if info.content.startswith('!!qq'): await app.sendGroupMessage(group, MessageChain.create([Plain('[{}]{}'.format(info.player, info.content[5:]))]))
print(thumbnail_url) async with aiohttp.ClientSession() as session: async with session.get(url=thumbnail_url) as resp: thumbnail_content = await resp.read() # url = f"https://anilist.co/anime/{anilist_id}" # async with aiohttp.ClientSession() as session: # async with session.get(url=url) as resp: # result = await resp.json() # result = result[0] # start_date = f"{result['startDate']['year']}-{result['startDate']['month']}-{result['startDate']['day']}" # end_date = f"{result['endDate']['year']}-{result['endDate']['month']}-{result['endDate']['day']}" # score = result["averageScore"] message = MessageChain.create([ Plain(text="搜索到结果:\n"), Image.fromUnsafeBytes(thumbnail_content), Plain(text=f"name: {title_origin}\n"), Plain(text=f"Chinese name: {title_chinese}\n"), Plain(text=f"file name: {file_name}\n"), Plain( text= f"time: {sec_to_str(time_from)} ~ {sec_to_str(time_to)}\n" ), # Plain(text=f"score: {score}\n"), # Plain(text=f"Broadcast date: {start_date} ~ {end_date}\n") ]) return message else: return MessageChain.create([Plain(text="没有查到结果呐~")])
def __make_msg(self, rank: int, illust: dict) -> MessageChain: return Template(self.item_pattern).render( rank=Plain(str(rank)), title=Plain(illust["title"]), id=Plain(str(illust["id"])) )
async def battlefield(message: MessageChain, app: GraiaMiraiApplication, group: Group, member: Member): if SearchSetting(group.id)["function"]["battlefield"]: MessageStr = message.asDisplay() if any([MessageStr.startswith("/最近"), MessageStr.startswith("/战绩"), MessageStr.startswith("/服务器"), MessageStr.startswith("/武器"), MessageStr.startswith("/载具"), MessageStr.startswith("/帮助"), MessageStr.startswith("/绑定")]) or \ any([MessageStr.startswith("/手榴弹"), MessageStr.startswith("/步枪"), MessageStr.startswith("/轻机枪"), MessageStr.startswith("/手枪"), MessageStr.startswith("/半自动"), MessageStr.startswith("/霰弹枪"), MessageStr.startswith("/精英兵"), MessageStr.startswith("/近战"), MessageStr.startswith("/冲锋枪"), MessageStr.startswith("/装备")]): if member.id in BlackId: await app.sendGroupMessage(group, MessageChain.create([ At(member.id), Plain("哼(╯▔皿▔)╯,不理你了!") ]), quote=message[Source][0]) else: if MessageStr.startswith("/最近"): await app.sendGroupMessage( group, MessageChain.create([ At(member.id), Plain("\n" + await BFservers(member.id, MessageStr)) ]), quote=message[Source][0]) elif MessageStr.startswith("/战绩"): MessageGet = await BFservers(member.id, MessageStr) if MessageGet.startswith("头像"): avatar = re.findall('头像:(.*)', MessageGet)[0] MessageStr = re.findall('昵称:[\s\S]*', MessageGet)[0] try: await app.sendGroupMessage( group, MessageChain.create([ At(member.id), Image.fromNetworkAddress(avatar), Plain("\n" + MessageStr) ]), quote=message[Source][0]) except: await app.sendGroupMessage( group, MessageChain.create( [At(member.id), Plain("\n" + MessageGet)]), quote=message[Source][0]) else: await app.sendGroupMessage(group, MessageChain.create([ At(member.id), Plain("\n" + MessageGet) ]), quote=message[Source][0]) elif MessageStr.startswith("/服务器") or MessageStr.startswith( "/武器") or MessageStr.startswith("/载具"): if MessageStr == "/服务器": MessageStr += SearchSetting(group.id)["name"] MessageGet = await BFservers(member.id, MessageStr) if MessageGet.startswith("./"): await app.sendGroupMessage( group, MessageChain.create([ At(member.id), Image.fromLocalFile(MessageGet) ]), quote=message[Source][0]) await asyncio.sleep(30) os.remove(MessageGet) else: await app.sendGroupMessage(group, MessageChain.create([ At(member.id), Plain("\n" + MessageGet) ]), quote=message[Source][0]) elif MessageStr.startswith("/帮助"): await app.sendGroupMessage( group, MessageChain.create([ At(member.id), Plain("\n" + await BFservers(member.id, MessageStr)) ]), quote=message[Source][0]) elif MessageStr.startswith("/绑定"): await app.sendGroupMessage( group, MessageChain.create([ At(member.id), Plain( Binding( member.id, MessageStr.replace("/绑定", "").replace(" ", ""))) ]), quote=message[Source][0]) elif any([ MessageStr.startswith("/手榴弹"), MessageStr.startswith("/步枪"), MessageStr.startswith("/轻机枪"), MessageStr.startswith("/手枪"), MessageStr.startswith("/半自动"), MessageStr.startswith("/霰弹枪"), MessageStr.startswith("/精英兵"), MessageStr.startswith("/近战"), MessageStr.startswith("/冲锋枪"), MessageStr.startswith("/装备") ]): MessageGet = await BFservers(member.id, MessageStr) if MessageGet.startswith("./"): await app.sendGroupMessage( group, MessageChain.create([ At(member.id), Image.fromLocalFile(MessageGet) ]), quote=message[Source][0]) await asyncio.sleep(30) os.remove(MessageGet) else: await app.sendGroupMessage(group, MessageChain.create([ At(member.id), Plain("\n" + MessageGet) ]), quote=message[Source][0])
ImageDownload(imgInfo['img_src'], BILI_ASSET_PATH)) for imgInfo in dynamicInfo[1] ] + [ Plain( f'\n原动态链接:https://t.bilibili.com/{dynamicID}?tab=2' ) ]))) elif dynamicInfo := GetDynamicInfo(dynamic, [['card', 'item', 'content']]): if RegExMultiPattern(TEXT_IMAGE_PATTERN, dynamicInfo[0]): botBroadcast.postEvent( BiliDynamicEvent( MessageChain.create([ Plain( f'{dynamicInfo[0]}\n原动态链接:https://t.bilibili.com/{dynamicID}?tab=2' ) ]))) elif dynamicInfo := GetDynamicInfo( dynamic, [['card', 'image_urls'], ['card', 'title'], ['card', 'id']]): botBroadcast.postEvent( BiliDynamicEvent([ MessageChain.create([ ImageQQ.fromLocalFile( ImageDownload(imgsrc, BILI_ASSET_PATH)) for imgsrc in dynamicInfo[0] ] + [ Plain( f'来自小加加的专栏:\n{dynamicInfo[1]}\nhttps://www.bilibili.com/read/cv{dynamicInfo[2]}' )
async def BlackId_Group_listener(message: MessageChain, app: GraiaMiraiApplication, group: Group, member: Member): if message.has(At): AtLsit = [] for i in range(len(message.get(At))): AtLsit.append( int(re.findall('target=(.*) ', str(message.get(At)[i]))[0])) MessageGet = message.asDisplay().replace(" ", "") for i in range(len(AtLsit)): if AtLsit[i] == Bot: pinyinStr = "" for i in range(len(lazy_pinyin(MessageGet))): pinyinStr += lazy_pinyin(MessageGet)[i] if pinyinStr.find("shabi") >= 0 or pinyinStr.find( "hanhan") >= 0 or pinyinStr.find("bendan") >= 0: if pinyinStr.find("woshishabi") < 0: await app.sendGroupMessage(group, MessageChain.create([ At(member.id), Plain("不理你了!") ]), quote=message[Source][0]) BlackId.add(member.id) elif MessageGet.find("对不起") >= 0 or MessageGet.find( "我错了") >= 0 or MessageGet.find("抱歉") >= 0: if member.id in BlackId: await app.sendGroupMessage( group, MessageChain.create([ At(member.id), Image.fromLocalFile("./Menhera/37.jpg"), Plain("想让我原谅你?请问谁是傻逼?") ])) @Waiter.create_using_function([GroupMessage]) async def Remove_Blacklist( event: GroupMessage, waiter_group: Group, waiter_member: Member, waiter_message: MessageChain): if waiter_group.id == group.id and waiter_member.id == member.id and waiter_message.asDisplay( ).find("我是傻逼") >= 0: await app.sendGroupMessage( group, MessageChain.create([ At(member.id), Image.fromLocalFile( "./Menhera/110.jpg"), Plain("哼,这还差不多┑( ̄Д  ̄)┍") ])) BlackId.remove(member.id) await app.sendGroupMessage( group, MessageChain.create( [Plain("这次就算了,下不为例哦╰( ̄ω ̄o)")])) return event try: await asyncio.wait_for(inc.wait(Remove_Blacklist), timeout=30) except asyncio.TimeoutError: await app.sendGroupMessage( group, MessageChain.create([ At(member.id), Image.fromLocalFile("./Menhera/63.jpg"), Plain("\n不承认自己是傻逼就算了(*  ̄︿ ̄)") ])) pass else: await app.sendGroupMessage( group, MessageChain.create( [Image.fromLocalFile("./Menhera/139.png")]), quote=message[Source][0]) else: await app.sendGroupMessage(group, MessageChain.create( [Plain("@我没有用哦~")]), quote=message[Source][0])
async def java_main(): url = 'http://launchermeta.mojang.com/mc/game/version_manifest.json' try: version_file = os.path.abspath('./assets/mcversion.txt') logger_info('Checking mcv...') verlist = getfileversions(version_file) file = await get_data(url, 'json') release = file['latest']['release'] snapshot = file['latest']['snapshot'] if release not in verlist: logger_info(f'huh, we find {release}.') for qqgroup in check_enable_modules_all( 'group_permission', 'mcv_rss'): try: await app.sendGroupMessage( int(qqgroup), MessageChain.create([ Plain('启动器已更新' + file['latest']['release'] + '正式版。') ])) await asyncio.sleep(0.5) except Exception: traceback.print_exc() for qqfriend in check_enable_modules_all( 'friend_permission', 'mcv_rss'): try: await app.sendFriendMessage( int(qqfriend), MessageChain.create([ Plain('启动器已更新' + file['latest']['release'] + '正式版。') ])) await asyncio.sleep(0.5) except Exception: traceback.print_exc() addversion = open(version_file, 'a') addversion.write('\n' + release) addversion.close() verlist = getfileversions(version_file) if snapshot not in verlist: logger_info(f'huh, we find {snapshot}.') for qqgroup in check_enable_modules_all( 'group_permission', 'mcv_rss'): try: await app.sendGroupMessage( int(qqgroup), MessageChain.create([ Plain('启动器已更新' + file['latest']['snapshot'] + '快照。') ])) await asyncio.sleep(0.5) except Exception: traceback.print_exc() for qqfriend in check_enable_modules_all( 'friend_permission', 'mcv_rss'): try: await app.sendFriendMessage( int(qqfriend), MessageChain.create([ Plain('启动器已更新' + file['latest']['snapshot'] + '快照。') ])) await asyncio.sleep(0.5) except Exception: traceback.print_exc() addversion = open('./assets/mcversion.txt', 'a') addversion.write('\n' + snapshot) addversion.close() logger_info('mcv checked.') except Exception: traceback.print_exc()