예제 #1
0
async def get_key_joke(key: str) -> list:
    sql = "select * from %sJokes order by rand() limit 1" % key
    joke = await execute_sql(sql)
    if joke == (None, ):
        return ["None", MessageChain.create([Plain(text="笑话数据库为空!")])]
    else:
        joke = joke[0][0]
        return ["None", MessageChain.create([Plain(text=joke)])]
예제 #2
0
async def get_joke(name: str) -> list:
    sql = "select * from jokes order by rand() limit 1"
    joke = await execute_sql(sql)
    if joke == (None, ):
        return ["None", MessageChain.create([Plain(text="笑话数据库为空!")])]
    else:
        joke = joke[0][0]
        joke = joke.replace("%name%", name).replace("\n", "")
        return ["None", MessageChain.create([Plain(text=joke)])]
예제 #3
0
async def phantom_tank(app: GraiaMiraiApplication, message: MessageChain, group: Group):

    message_text = "".join([plain.text for plain in message.get(Plain)]).strip()
    if message_text in ["幻影", "彩色幻影"]:
        if len(message[Image]) != 2:
            try:
                await app.sendGroupMessage(group, MessageChain.create([Plain(text="非预期图片数量!请按 `显示图 隐藏图` 顺序发送,共两张")]))
            except AccountMuted:
                pass
            return None
        if globals()["signal"] >= 2:
            try:
                await app.sendGroupMessage(group, MessageChain.create([Plain(text=f"目前有{signal}个任务正在处理,请稍后再试!")]))
            except AccountMuted:
                pass
            return None

        globals()["signal"] += 1

        try:
            await app.sendGroupMessage(group, MessageChain.create([Plain(text="converting")]))
        except AccountMuted:
            pass

        im_1 = message[Image][0]
        async with aiohttp.ClientSession() as session:
            async with session.get(url=im_1.url) as resp:
                img_content = await resp.read()
        display_img = IMG.open(BytesIO(img_content))

        im_2 = message[Image][1]
        async with aiohttp.ClientSession() as session:
            async with session.get(url=im_2.url) as resp:
                img_content = await resp.read()
        hide_img = IMG.open(BytesIO(img_content))

        try:
            await app.sendGroupMessage(
                group,
                MessageChain.create([
                    Image.fromUnsafeBytes(await make_tank(display_img, hide_img) if message_text == "幻影" else await colorful_tank(display_img, hide_img))
                    # Image.fromUnsafeBytes(await colorful_tank(display_img, hide_img))
                ])
            )
        except AccountMuted:
            pass

        globals()["signal"] -= 1
async def friend_message_process(app: GraiaMiraiApplication, friend: Friend,
                                 message: MessageChain) -> None:
    message_test = message.asDisplay()
    if friend.id == await get_config("HostQQ"):
        if message_test[:5] == "发布消息:":
            msg = MessageChain.create([Plain(text=message_test[5:])])
            group_list = await app.groupList()
            for i in group_list:
                try:
                    await app.sendGroupMessage(i, msg)
                except AccountMuted:
                    pass
        elif message.has(Image):
            imgs = message.get(Image)
            for i in imgs:
                bot_setu_count = await get_total_calls("botSetuCount") + 1
                await update_total_calls(bot_setu_count, "botSetuCount")
                path = "%s%s.png" % (await get_config("listenImagePath"),
                                     bot_setu_count)

                async with aiohttp.ClientSession() as session:
                    async with session.get(url=i.url) as resp:
                        img_content = await resp.read()

                image = IMG.open(BytesIO(img_content))
                image.save(path)

                await insert_image_hash(
                    "%s%d.png" %
                    (await get_config("listenImagePath"), bot_setu_count),
                    await image_hash(path), "tribute")
            await app.sendFriendMessage(
                friend,
                MessageChain.create(
                    [Plain(text="%d Image saved!" % len(imgs))]))
            await write_log("save img from Host", path, await
                            get_config("HostQQ"), 0, True, "img")
예제 #5
0
async def get_group_quotes(group_id: int, app: GraiaMiraiApplication,
                           nickname: str, quote_type: str,
                           source_status: str) -> list:
    member_id = None
    if source_status == "nickname":
        sql = "select memberId from nickname where groupId=%d and nickname='%s'" % (
            group_id, nickname)
        member_id = await execute_sql(sql)
        print(member_id)
        # print(quotes)
        if member_id == ():
            return [
                "None",
                MessageChain.create(
                    [Plain(text="%s是谁我不知道呐~快来添加别名吧~" % nickname)])
            ]
        member_id = member_id[0][0]
    elif source_status == "memberId":
        member_id = int(nickname)
    elif source_status == "None":
        pass

    if quote_type == "random":
        sql = "select * from celebrityQuotes where groupId=%d order by rand() limit 1" % group_id
        quotes = await execute_sql(sql)[0]
        # print(quotes)
        if quotes is None:
            return [
                "None",
                MessageChain.create([Plain(text="本群还没有群语录哟~快来添加吧~")])
            ]
        else:
            member_id = int(quotes[1])  # 说出名言的人
            content = quotes[2]  # 内容,可能为地址/文本
            quote_format = quotes[3]  # 语录形式 img/text
            if quote_format == "text":
                member = await app.getMember(group_id, member_id)
                return [
                    "None",
                    MessageChain.create([
                        Plain(text=content),
                        Plain(text="\n————%s" % member.name)
                    ])
                ]
            elif quote_format == "img":
                return [
                    "None",
                    MessageChain.create([Image.fromLocalFile(content)])
                ]
            else:
                return [
                    "None",
                    MessageChain.create(
                        [Plain(text="quoteFormat error!(%s)" % quote_format)])
                ]
    elif quote_type == "all":
        sql = "select * from celebrityQuotes where groupId=%s and memberId=%s" % (
            group_id, member_id)
        quotes = await execute_sql(sql)
        if quotes is None:
            return [
                "None",
                MessageChain.create(
                    [Plain(text="%s还没有语录哦~快来添加吧~" % nickname[0])])
            ]
        member = await app.getMember(group_id, member_id)
        msg = [Plain(text="%s语录\n" % member.name)]
        index = 1
        for i in quotes:
            # print(i)
            content = i[2]  # 内容,可能为地址/文本
            quote_format = i[3]  # 语录形式 img/text
            if quote_format == "text":
                msg.append(Plain(text="%d.%s\n" % (index, content)))
            elif quote_format == "img":
                msg.append(Plain(text="%d.\n" % index))
                msg.append(Image.fromLocalFile(content))
                msg.append(Plain(text="\n"))
            else:
                return [
                    "None",
                    MessageChain.create(
                        [Plain(text="quoteFormat error!(%s)" % quote_format)])
                ]
            index += 1
        return ["None", MessageChain.create(msg)]
    elif quote_type == "select":
        sql = "select * from celebrityQuotes where groupId=%s and memberId=%s order by rand() limit 1" % (
            group_id, member_id)
        quotes = await execute_sql(sql)
        quotes = quotes[0]
        if quotes is None:
            return [
                "None",
                MessageChain.create(
                    [Plain(text="%s还没有语录哦~快来添加吧~" % nickname[0])])
            ]
        content = quotes[2]  # 内容,可能为地址/文本
        quote_format = quotes[3]  # 语录形式 img/text
        print(group_id, member_id)
        member = await app.getMember(group_id, member_id)
        if quote_format == "text":
            return [
                "None",
                MessageChain.create([
                    Plain(text=content),
                    Plain(text="\n————%s" % member.name)
                ])
            ]
        elif quote_format == "img":
            return [
                "None",
                MessageChain.create([Image.fromLocalFile(content)])
            ]
        else:
            return [
                "None",
                MessageChain.create(
                    [Plain(text="quoteFormat error!(%s)" % quote_format)])
            ]
    else:
        return ["None"]
예제 #6
0
async def head_splicer(app: GraiaMiraiApplication, message: MessageChain, member: Member, group: Group):
    print(globals()["signal"])
    if not os.path.exists("./modules/HeadSplicer/temp/"):
        os.mkdir("./modules/HeadSplicer/temp/")
    if "".join([plain.text for plain in message.get(Plain)]).strip() == "接头":
        if globals()["signal"] >= 2:
            try:
                await app.sendGroupMessage(group, MessageChain.create([Plain(text=f"目前有{signal}个任务正在处理,请稍后再试!")]))
            except AccountMuted:
                pass
            return None

        globals()["signal"] += 1

        if message.get(Image):
            image = message[Image][0]
            img_url = image.url
            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(f"./modules/HeadSplicer/temp/temp-{group.id}-{member.id}.png")
            try:
                try:
                    splicing_result = await process(
                        f"./modules/HeadSplicer/temp/temp-{group.id}-{member.id}.png",
                        f"./modules/HeadSplicer/temp/tempResult-{group.id}-{member.id}.png"
                    )
                except TooManyFacesDetected:
                    globals()["signal"] -= 1
                    await app.sendGroupMessage(
                        group,
                        MessageChain.create([Plain(text="脸太tm多了!说!你是不是故意欺负我!爪巴啊啊啊啊啊啊!")])
                    )
                    return None
                except Exception:
                    globals()["signal"] -= 1
                    await app.sendGroupMessage(
                        group,
                        MessageChain.create([Image.fromLocalFile("./modules/HeadSplicer/statics/接头失败.png")])
                    )
                    return None
                if splicing_result:
                    globals()["signal"] -= 1
                    await app.sendGroupMessage(
                        group,
                        MessageChain.create([
                            Image.fromLocalFile(f"./modules/HeadSplicer/temp/tempResult-{group.id}-{member.id}.png")
                        ])
                    )
                else:
                    globals()["signal"] -= 1
                    await app.sendGroupMessage(
                        group,
                        MessageChain.create([Image.fromLocalFile("./modules/HeadSplicer/statics/没找到头.png")])
                    )
            except AccountMuted:
                return None
        else:
            globals()["signal"] -= 1
            try:
                await app.sendGroupMessage(group, MessageChain.create([Plain(text="请附带图片!")]))
            except AccountMuted:
                pass
예제 #7
0
async def get_group_quotes(group_id: int, memberList, nickname, Type,
                           status) -> list:
    if status == "nickname":
        sql = "select memberId from nickname where groupId=%d and nickname='%s'" % (
            group_id, nickname[0])
        member_id = await execute_sql(sql)
        member_id = member_id[0][0]
        # print(quotes)
        if member_id is None:
            return [
                "None",
                MessageChain.create(
                    [Plain(text="%s是谁我不知道呐~快来添加别名吧~" % nickname[0])])
            ]
    elif status == "memberId":
        member_id = nickname
    elif status == "none":
        pass
    if Type == "random":
        sql = "select * from celebrityQuotes where groupId=%d order by rand() limit 1" % group_id
        quotes = await execute_sql(sql)[0]
        # print(quotes)
        if quotes is None:
            return [
                "None",
                MessageChain.create([Plain(text="本群还没有群语录哟~快来添加吧~")])
            ]
        else:
            member_id = quotes[1]  # 说出名言的人
            content = quotes[2]  # 内容,可能为地址/文本
            quote_format = quotes[3]  # 语录形式 img/text
            if quote_format == "text":
                return [
                    Plain(text=content),
                    Plain(text="\n————%s" % qq2name(memberList, member_id))
                ]
            elif quote_format == "img":
                return [
                    # At(target=memberId),
                    Image.fromFileSystem(content)
                    # Plain(text="\n————%s"%qq2name(memberList,memberId))
                ]
            else:
                return [Plain(text="quoteFormat error!(%s)" % quote_format)]
    elif Type == "all":
        sql = "select * from celebrityQuotes where groupId=%s and memberId=%s" % (
            group_id, member_id[0])
        quotes = await execute_sql(sql)
        if quotes is None:
            return [Plain(text="%s还没有语录哦~快来添加吧~" % nickname[0])]
        msg = [Plain(text="%s语录\n" % nickname[0])]
        index = 1
        for i in quotes:
            # print(i)
            content = i[2]  # 内容,可能为地址/文本
            quote_format = i[3]  # 语录形式 img/text
            if quote_format == "text":
                msg.append(Plain(text="%d.%s\n" % (index, content)))
            elif quote_format == "img":
                msg.append(Plain(text="%d.\n" % index))
                msg.append(Image.fromFileSystem(content))
                msg.append(Plain(text="\n"))
            else:
                return [Plain(text="quoteFormat error!(%s)" % quote_format)]
            index += 1
        return msg
    else:
        sql = "select * from celebrityQuotes where groupId=%s and memberId=%s order by rand() limit 1" % (
            group_id, member_id[0])
        quotes = await execute_sql(sql)
        if quotes is None:
            return [Plain(text="%s还没有语录哦~快来添加吧~" % nickname[0])]
        content = quotes[2]  # 内容,可能为地址/文本
        quote_format = quotes[3]  # 语录形式 img/text
        if quote_format == "text":
            return [Plain(text=content), Plain(text="\n————%s" % nickname[0])]
        elif quote_format == "img":
            return [
                # At(target=memberId),
                Image.fromFileSystem(content)
                # Plain(text="\n————%s"%qq2name(memberList,memberId))
            ]
        else:
            return [Plain(text="quoteFormat error!(%s)" % quote_format)]