Beispiel #1
0
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
Beispiel #2
0
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)])
Beispiel #3
0
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!")
    ])
Beispiel #4
0
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())
Beispiel #5
0
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!")])
Beispiel #6
0
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'])
            ])
Beispiel #7
0
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="??")
        ])
Beispiel #8
0
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),
            ])
Beispiel #9
0
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}")])
Beispiel #10
0
 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'))]))
Beispiel #11
0
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)])
Beispiel #12
0
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!")
Beispiel #13
0
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 获取帮助")])
Beispiel #14
0
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
Beispiel #15
0
 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="??")
         ])
Beispiel #16
0
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
Beispiel #17
0
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!")
Beispiel #18
0
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)
Beispiel #19
0
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!")
Beispiel #20
0
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!")
Beispiel #21
0
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
Beispiel #22
0
 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
Beispiel #23
0
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("权限不足")])
Beispiel #24
0
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!")
Beispiel #25
0
 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
Beispiel #26
0
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)
Beispiel #27
0
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
Beispiel #28
0
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")
Beispiel #29
0
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")
Beispiel #30
0
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