def chain_split(chain: MessageChain, split_str: str) -> List[MessageChain]: chain = fix_merge(chain) # 已经重新生成了一个 MessageChain(以list的形式) length = len(chain) result = [] last_str = None for index, component in enumerate(chain): if isinstance(component, Plain): char_lists = component.toString().split(split_str) if len(char_lists) > 1: result.append(MessageChain(__root__=[ Plain(splited_plain_string) for splited_plain_string in \ (char_lists[:-1] if index != length - 1 else char_lists) ])) if index != length - 1: last_str = char_lists[-1] else: last_str = None else: last_str = component.toString() else: result.append( MessageChain(__root__=[ *([Plain(last_str)] if last_str else []), component ])) return result
async def Main(app: Mirai, group: Group, member: Member, message: MessageChain, source: Source): m_id = message.getSource() m_text = message.toString() if m_text.startswith("pkg"): if m_text == "pkg": await app.sendGroupMessage(group, [Plain(text="使用pkg+空格+包名来使用!")]) raise IndexError(message.toString()) try: await app.sendGroupMessage(group, [Plain(text="正在搜索...请稍后...")]) nn = await search(m_text[4:]) except IndexError: await app.sendGroupMessage(group, [Plain(text="未找到此包!")]) else: nnn = len(nn) if nnn > 2: nnnn = "" for i in range(nnn): if i > 6: break nnnn += nn[i]["pkgname"] + "\n" await app.sendGroupMessage(group, [Plain(text="搜索到了多个包:\n%s" % nnnn)]) else: text = tmp % (nn[0]["repo"], nn[0]["pkgname"], nn[0]["pkgver"], nn[0]["pkgdesc"], nn[0]["last_update"], nn[0]["url"]) await app.sendGroupMessage(group, [Plain(text=text)])
async def event_gm(app: Mirai, group: Group, message: MessageChain): print(message.toString()) if message.hasComponent(At): print('at me') await app.sendGroupMessage(group.id, [ Plain(text="Hello, world!") ])
async def GMHandler(app: Mirai, group: Group, message: MessageChain): command = Command.getCommand(message.toString()) if command: try: msg = await command(group, message.toString()) await app.sendGroupMessage(group, msg.strip()) except Exception as e: EventLogger.error(e) EventLogger.error(traceback.format_exc())
async def event_gm(app: Mirai, friend: Friend, message: MessageChain): if friend.id == Account.admin: aplain: Plain = message.getFirstComponent(Plain) atext = aplain.text if atext == "save image": aimage: Image = message.getFirstComponent(Image) if aimage is not None: utility.download_imgae2(aimage.url, "Downloads/Images") await app.sendFriendMessage(friend, [Plain(text="已存储")]) else: await app.sendFriendMessage(friend, [Plain(text="Greetings!")])
async def event_gm(app: Mirai, friend: Friend, message: MessageChain): print(message.toString()) reply = tuling.reply_text(0, message.toString(), info) if reply['url'] != '': print('sent url') await app.sendFriendMessage(friend, [ Plain(text=reply['url']), Plain(text=reply['text']) ]) else: await app.sendFriendMessage(friend, [ Plain(text=reply['text']) ])
async def event_gm(app: Mirai, message: MessageChain, group: Group): if message.toString().startswith("/image"): await app.sendGroupMessage(group, [ Image.fromFileSystem( "E:\\Image\\00C49FCD-D8D9-4966-B2FC-F18F6220485E.jpg"), Plain(text="??") ])
async def daily_pic(app: Mirai, group: Group, member: Member, message: MessageChain): matches = ['.setu', '来张色图', '来份色图', '不够色', '就这?'] if any(x in message.toString() for x in matches): ans = random.randint(0, 1) if ans: try: path = os.path.abspath(__file__) path = os.path.dirname(path) path = os.path.join(path, 'Tornado_webite_test') path = os.path.join(path, 'Pixiv') # print(path) pic_name = os.listdir(path) # print(pic_name) random_pic = os.path.join(path, random.choice(pic_name)) await app.sendGroupMessage(group.id, [ At(target=member.id), Image.fromFileSystem(random_pic), Plain(text="这是您点的一份色图~") ]) except (RuntimeError, ValueError, EnvironmentError, PermissionError, ConnectionRefusedError): print("send setu message error!") else: await app.sendGroupMessage(group.id, [ At(target=member.id), Plain(text="本烫不想理你"), Face(faceId=212), ])
async def edit_config(app: Mirai, group: Group, member: Member, message: MessageChain): if member.id in conf.get("permission", "operator"): try: _, segment, block, method, value = message.toString().split(" ") except ValueError: await app.sendGroupMessage(group, [At(member.id), Plain("参数不足")]) return try: data = json.loads(value) except json.decoder.JSONDecodeError: data = value try: if method == "replace": conf.set(segment, block, data) elif method == "update": c = conf.get(segment, block) if isinstance(c, (list, tuple)): c.append(data) elif isinstance(c, dict): c.update(data) else: await app.sendGroupMessage( group, [At(member.id), Plain(f"未知方法:{method}")]) return await app.sendGroupMessage(group, [At(member.id), Plain("修改成功")]) except ValueError as e: await app.sendGroupMessage( group, [At(member.id), Plain(f"修改配置时发生错误:\n{e}")])
def before_qr(self): force_auth(qq) client.send_group_message(target_group, '每天25分钟智慧树, 健康生活50年, 幸福生活一辈子') client.send_group_message( target_group, MessageChain([Image(client.upload_image('group', './qrcode.jpg'))]))
async def search_image(app: Mirai, group: Group, member: Member, cp: CommandParser, message: MessageChain): pa = cp.parse_with_valid(["[Image"]) if isinstance(pa, str): return await app.sendGroupMessage(group, [At(member.id), Plain(pa)]) elif not pa: return await app.sendGroupMessage(group, [At(member.id), Plain("参数不能为空")]) img = message.getFirstComponent(Image) with open(f"{ROOT}{str(img.imageId)}.jpg", "wb") as f: f.write((await img.toBytes()).getvalue()) try: _, raw = await wget(f"https://saucenao.com/search.php?output_type=2&testmode=0&numres=4&url=https://www.pixivdl.net/static/img/{str(img.imageId)}.jpg") finally: os.remove(f"{ROOT}{str(img.imageId)}.jpg") data = Parser.parse_raw(raw) if data.header.status != 0: print(raw) return await app.sendGroupMessage(group, [At(member.id), Plain(f"发生错误:status: {data.header.status}")]) result = ["查询结果:\n", f"作品类型:{DataBase.get(data.results[0].header.index_id)}\n", f"准确度:{data.results[0].header.similarity}%\n", f"剩余次数:{data.header.long_remaining}\n"] if data.results[0].header.index_id in (21, 22): # Anime, HAnime result.append(f"作品名:{data.results[0].data.source}\n") result.append(f"年份:{data.results[0].data.year}\n") result.append(f"目标位置:第{data.results[0].data.part}集,{data.results[0].data.est_time}\n") elif data.results[0].header.index_id in (5, 31, 33, 34): # Image result.append(f"标题:{data.results[0].data.title}\n") result.append(f"更多信息:{data.results[0].data.ext_urls[0]}") await app.sendGroupMessage(group, [At(member.id), *(Plain(msg) for msg in result)])
async def mosaic(app: Mirai, group: Group, message: MessageChain): matches = ['.mosaic', '.镶嵌种类', '.镶嵌种族', '.镶嵌材料'] if any(x in message.toString() for x in matches): try: await app.sendGroupMessage(group.id, [Plain(text=Mosaic_info)]) except (RuntimeError, ValueError, EnvironmentError, PermissionError, ConnectionRefusedError): print("send mosaic message error!")
async def set_active(app: Mirai, group: Group, member: Member, message: MessageChain): if message.toString().find(conf.get("basic", "command_head") + "cs") == 0: if group.id in conf.get("banner", "group_id"): return conf.get("active", "group_id").append(group.id) await app.sendGroupMessage( group, [At(member.id), Plain("激活成功,输入 !help 获取帮助")])
async def revoke(app: Mirai, group: Group, message: MessageChain, source: Source): def reply(msg: MESSAGE_T, at: bool = False): _s = source if at else None return app.sendGroupMessage(group, msg, _s) plain: Plain if any(plain.text.strip() == '撤回' for plain in message.getAllofComponent(Plain)): quote: T.Optional[Quote] = message.getFirstComponent(Quote) if quote: try: await app.revokeMessage(quote.id) await app.revokeMessage(source.id) except UnknownReceiverTarget as e: if quote.senderId == app.qq: await reply(str(e), at=True) except PermissionError: pass
async def event_gm(session: Session, message: MessageChain, friend: Friend): if message.toString().startswith("/image"): await session.sendFriendMessage(friend, [ Image.fromFileSystem( "E:\\Image\\00C49FCD-D8D9-4966-B2FC-F18F6220485E.jpg"), Plain(text="??") ])
async def quote(app: Mirai, group: Group, message: MessageChain, member: Member, source: Source): if message.toString().find("骂我") != -1: txt1 = requests.get(url1) await app.sendGroupMessage( group, [At(member.id), Plain(text=txt1.text)], quoteSource=source) return True if message.toString().find("夸我") != -1: txt2 = requests.get(url2) await app.sendGroupMessage( group, [At(member.id), Plain(text=txt2.text)], quoteSource=source) return True if message.toString().find("tu") != -1: pic = picbase() print(pic) await app.sendGroupMessage(group, [Image.fromBase64(pic)]) return True
async def spicy(app: Mirai, group: Group, message: MessageChain): matches = ['.spicy', '.香料'] if any(x in message.toString() for x in matches): try: await app.sendGroupMessage(group.id, [Plain(text=spicy_info)]) except (RuntimeError, ValueError, EnvironmentError, PermissionError, ConnectionRefusedError): print("send spicy_info message error!")
async def set_active(app: Mirai, group: Group, member: Member, message: MessageChain): if message.toString().find(conf.get("basic", "command_head") + "cs") == 0: if group.id in conf.get("banner", "group_id"): return conf.get("active", "group_id").append(group.id) msg = await app.sendGroupMessage(group, [At(member.id), Plain("启用")]) call_later(10, app.revokeMessage, msg.messageId)
async def help(app: Mirai, group: Group, message: MessageChain): matches = ['.help', '.帮助', '.使用说明'] if any(x in message.toString() for x in matches): try: await app.sendGroupMessage(group.id, [Plain(text=Help_text)]) except (RuntimeError, ValueError, EnvironmentError, PermissionError, ConnectionRefusedError): print("send help message error!")
async def face_fight(app: Mirai, group: Group, message: MessageChain): matches = ['.face', '发个表情'] if any(x in message.toString() for x in matches): try: await app.sendGroupMessage(group.id, [Face(faceId=random.randint(0, 324))]) except (EnvironmentError, PermissionError, ConnectionRefusedError): print("send help message error!")
def chain_regex_match_headpop(chain: MessageChain, pop_with_regex: str) -> MessageChain: if not chain: return else: if not chain.__root__: return length = len(chain) if length >= 2: first_plain = chain.getFirstComponent(Plain) if first_plain: first_plain_index = chain.__root__.index(first_plain) match_result = re.match(pop_with_regex, first_plain.text) if match_result: chain.__root__[first_plain_index] = Plain( first_plain.text[match_result.end():]) return chain
def __init__(self, message: MessageChain): sp = re.split( r"\s+", message.toString()[len(conf.get("basic", "command_head")):], 1) if len(sp) == 1: self.command, self.arg = sp[0], "" else: self.command, self.arg = sp self._msg = message
async def rm_modules(app: Mirai, group: Group, member: Member, message: MessageChain): if member.id in conf.get("permission", "operator"): mp = message.toString().split(" ", 1)[1] conf.get("plugins", "active").remove(mp) await app.sendGroupMessage( group, [At(member.id), Plain("删除模块成功,将在下次重载生效")]) else: await app.sendGroupMessage(group, [At(member.id), Plain("权限不足")])
async def rp(app: Mirai, group: Group, message: MessageChain): matches = ['.jrrp', '今日运势', '求签', '抽签'] if any(x in message.toString() for x in matches): try: await app.sendGroupMessage(group.id, [Plain(text="抱歉,我的主人最近偷懒,还没有写这个模块呢")]) except (RuntimeError, ValueError, EnvironmentError, PermissionError, ConnectionRefusedError): print("send jrrp message error!")
async def at_wrapper(app: Mirai, message: MessageChain): at_set: List[At] = message.getAllofComponent(At) qq = qq or app.qq if at_set: for at in at_set: if at.target == qq: return else: raise Cancelled
async def show_help(app: Mirai, sender: "Sender", event_type: "Type", message: MessageChain): app_reply = reply(app, sender, event_type) keywords = ['.help', '。help', '使用帮助'] text = message.toString().strip().lower() if (text in keywords) or (at_me(app, message) and any(keyword in text for keyword in keywords)): await app_reply(helpMsg)
async def quote(app: Mirai, group: Group, message: MessageChain, member: Member, source: Source): if message.toString().find("骂我") != -1: await app.sendGroupMessage(group, [ At(member.id), Plain( (await wget("https://nmsl.shadiao.app/api.php?lang=zh_cn"))[1]) ], quoteSource=source) return True
async def show_help(app: Mirai, sender: "Sender", event_type: "Type", message: MessageChain): app_reply = reply(app, sender, event_type) keywords = ['使用说明', '帮助', 'help'] text = message.toString().strip().lower() if (text in keywords) or (at_me(app, message) and any(keyword in text for keyword in keywords)): await app_reply("使用说明:https://github.com/Lycreal/MiraiBot#miraibot")
async def event_gm(app: Mirai, friend: Friend, message:MessageChain): print("friend Message") if friend.id==HostQQ: if message.toString()[:5]=="发布消息:": msg=message.toString().replace("发布消息:","") groupList = await app.groupList() for i in groupList: await app.sendGroupMessage(i,msg) elif message.hasComponent(Image): botSetuCount=getData("botSetuCount")+1 dist="%s%s.png"%(setuBotDist,botSetuCount) img = message.getFirstComponent(Image) img=requests.get(img.url).content image=IMG.open(BytesIO(img)) image.save(dist) updateData(botSetuCount,"botSetuCount") await app.sendFriendMessage(friend,[ Plain(text="Image saved!") ]) record("save img from Host",dist,HostQQ,0,True,"img")
async def fudu(app: Mirai, group: Group, message: MessageChain): global last_message match = re.match(r'(?:.*?([\d一二两三四五六七八九十]*)张|来点)?(.{0,10}?)的?[色|涩]图$', message.toString()) if match: return if last_message != None and last_message.toString() == message.toString(): EventLogger.info(f"{message.toString()}消息已复读") replyArray = [] for v in message: if type(v) == Image or type(v) == Plain or type(v) == At or type(v) == AtAll or type(v) == Face: replyArray.append(v) last_message = None await app.sendGroupMessage(group, replyArray) else: if last_message != None: EventLogger.info(f"last_message:{last_message.toString()}") EventLogger.info(f"{message.toString()}消息已缓存") last_message = message