Ejemplo n.º 1
0
async def handle_setu(bot: Bot, event: Event, state: dict):
    # 处理参数
    args = await parse_args(pixiv, event, str(event.message))
    await pixiv.send(
        msg.reply(id_=event.message_id) +
        "你的涩图正在处理,依据关键词{}".format(args['key_word']))

    # 得到涩图url
    try:
        setu = get_setu(tag=args['key_word'], type=args['type'])
    except Exception as e:
        await pixiv.finish(
            msg.reply(id_=event.message_id) + 'info:{}'.format(e.args[0]))

    # 储存涩图
    try:
        pic_file = save_setu(setu.url)
    except Exception as e:
        await pixiv.finish(
            msg.reply(id_=event.message_id) + 'info:{}'.format(e.args[0]))

    # 构造涩图形式
    # 以cardimage形式发送
    if (args['mode'] == 'xml'):
        if (setu.type == 2):
            setu_reply = '[CQ:cardimage,file=' + 'file:///' + pic_file + ',source=id:{pic_id} tag:{pic_tag}]'.format(
                pic_id=setu.info['id'], pic_tag=setu.info['tag'])
        elif (setu.type == 3):
            setu_reply = '[CQ:cardimage,file=' + 'file:///' + pic_file + ']'
    # 以普通图片形式发送
    elif (args['mode'] == 'pic'):
        if (setu.type == 2):
            setu_reply = 'pixiv id:{id}\r\nauthor:{author}\r\ntitle={title}\r\ntag={tag}\r\n[CQ:image,file={file}]'.format(
                id=setu.info['id'],
                author=setu.info['author'],
                title=setu.info['title'],
                tag=setu.info['tag'],
                file='file:///' + pic_file)
        elif (setu.type == 3):
            setu_reply = '[CQ:image,file={file}]'.format(file='file:///' +
                                                         pic_file)

    login_info = await bot.call_api("get_login_info")
    msgs = [{
        "type": "node",
        "data": {
            "name": login_info['nickname'],
            "uin": str(login_info['user_id']),
            "content": setu_reply
        }
    }]
    try:
        await bot.call_api("send_group_forward_msg",
                           group_id=event.group_id,
                           messages=msgs)
    except Exception:
        await pixiv.finish(
            msg.reply(id_=event.message_id) + 'info:{}'.format('涩图发送失败!'))
    finally:
        os.remove(pic_file)
Ejemplo n.º 2
0
async def _handle(bot: Bot, event: Event, state: dict):
    args_list = str(event.message).strip().split()
    error_reply = '\
所输入命令有误!现在支持的命令如下:\r\n\
add:添加一个rss源。/rss add 源名称 源地址\r\n\
list:查看自己所添加的所有源 /rss list \r\n\
remove:移除所添加的一个源。/rss remove 订阅源的id'

    if (len(args_list) >= 1):
        if (args_list[0] == 'add' and len(args_list) >= 3):
            rss_name, rss_url = args_list[1], args_list[2]
            rss = Rss(name=rss_name,
                      url=rss_url,
                      user_id=event.user_id,
                      group_id=event.group_id,
                      type='group')
            des = check_rss(rss.url)
            if (des == ''):
                await RSS.finish(
                    msg.reply(id_=event.message_id) + '你所输入的rss源有误!')
            else:
                rss.describe = des
                add_result = add_rss(rss)
                if (add_result == 'repeat'):
                    await RSS.finish(
                        msg.reply(id_=event.message_id) + '你已添加过该源,请勿重复添加!')
                await update_rss(rss, mode='init')
                await RSS.finish(
                    msg.reply(id_=event.message_id) +
                    'RSS {rss_name} 添加成功\r\nrss简介:{describe}'.format(
                        rss_name=rss_name, describe=des))
        elif (args_list[0] == 'list'):
            results = query_user_rss(user_id=event.user_id)
            reply = '您的订阅:\r\n' if len(results) > 0 else '您还没有订阅rss'
            for result in results:
                reply += 'id:{rss_id} {rss_name}\r\n{rss_url}\r\n'.format(
                    rss_id=result[0], rss_name=result[5], rss_url=result[-1])
            await RSS.finish(msg.reply(id_=event.message_id) + reply)
        elif (args_list[0] == 'remove' and len(args_list) >= 2):
            remove_result = remove_rss(user_id=event.user_id,
                                       subscibe_id=int(args_list[1]))
            if (remove_result == 'none'):
                await RSS.finish(
                    msg.reply(id_=event.message_id) + '没有该rss记录,请使用正确的id')
            elif (remove_result == 'no_permission'):
                await RSS.finish(
                    msg.reply(id_=event.message_id) + '你没有该rss记录的权限')
            elif (remove_result == 'success'):
                await RSS.finish(msg.reply(id_=event.message_id) + '删除成功')
            elif (remove_result == 'error'):
                await RSS.finish(msg.reply(id_=event.message_id) + '删除错误!')
        else:
            await RSS.finish(msg.reply(id_=event.message_id) + error_reply)
    else:
        await RSS.finish(msg.reply(id_=event.message_id) + error_reply)
Ejemplo n.º 3
0
async def handle_error_command(bot: Bot, event: Event, state: dict):
    error_reply='您输入的命令有误!现在支持的命令如下:\r\n'\
        +'/setu:搜索一张涩图\r\n'\
        +'/waifu:随机得到一张GAN生成的美少女头像\r\n'\
        +'/rss:rss订阅功能\r\n'\
        +'/mcping:判断该群绑定的mc服务器是否正常运行\r\n'\
        +'戳一戳:随机发送一条语音'
    await function_manager.finish(
        msg.reply(id_=event.message_id) + error_reply)
Ejemplo n.º 4
0
async def search(bot: Bot, event: Event, state: T_State):
    images = get_message_image(event.json())
    if have_image(images):
        for image in images:
            logger.info(f"imgsearch: search -> \"{image}\"")

            logger.info(f"SauceNAO: searching...")
            res_sauce = await saucenao.search(image)
            if res_sauce.status_code // 100 == 2:
                logger.info(f"SauceNAO: hit on {res_sauce.content['rate']}")
                res_text = f"[ {res_sauce.content['index']} / {res_sauce.content['rate']} ]\n" + \
                    "\n".join(f"{k}: {v}"for k,
                              v in res_sauce.content['data'].items())
                message = MessageSegment.reply(
                    event.message_id) + MessageSegment.text(res_text)
                await bot.send(event, message)
            elif res_sauce.status_code // 100 == 3:
                logger.info("SauceNAO: not found")
                logger.info(f"Ascii2D: searching...")
                res_ascii = await ascii2d.search(image)
                if res_ascii.status_code // 100 == 2:
                    message = MessageSegment.reply(
                        event.message_id) + MessageSegment.text("\n".join(
                            f"{k}: {v}" for k, v in res_ascii.content.items()))
                    await bot.send(event, message)

                elif res_ascii.status_code // 100 == 3:
                    message_1 = MessageSegment.reply(event.message_id)+MessageSegment.text("\n".join(f"{k}: {v}"for k, v in res_ascii.content[0].items())) +\
                        MessageSegment.image(res_ascii.content[1])
                    message_2 = MessageSegment.reply(event.message_id)+MessageSegment.text("\n".join(f"{k}: {v}"for k, v in res_ascii.content[2].items())) +\
                        MessageSegment.image(res_ascii.content[3])
                    logger.info(f"Ascii2D: sending possible results...")
                    await bot.send(event, message_1)
                    await bot.send(event, message_2)
                elif res_ascii.status_code // 100 == 4:
                    logger.info(f"Ascii2D: {res_ascii.message}")

            elif res_sauce.status_code // 100 == 4:
                logger.error(f"SauceNAO: {res_sauce.message}")
Ejemplo n.º 5
0
async def _(bot: Bot, event: Event, state: T_State):
    username = str(event.get_message()).strip()
    if username == "":
        payload = {'qq': str(event.get_user_id()), 'b50': True}
    else:
        payload = {'username': username, 'b50': True}
    img, success = await generate50(payload)
    if success == 400:
        await best_50_pic.send("未找到此玩家,请确保此玩家的用户名和查分器中的用户名相同。")
    elif success == 403:
        await best_50_pic.send("该用户禁止了其他人获取数据。")
    else:
        await best_50_pic.send(
            Message([
                MessageSegment.reply(event.message_id),
                MessageSegment.image(
                    f"base64://{str(image_to_base64(img), encoding='utf-8')}")
            ]))
Ejemplo n.º 6
0
async def _(bot: Bot, event: Event, state: dict) -> None:
    waifu_url = 'https://www.thiswaifudoesnotexist.net/example-' + str(
        random.randint(0, 100000)) + '.jpg'
    reply = MessageSegment.reply(id_=event.message_id)
    try:
        pic_name = save_pic(waifu_url)
        try:
            sys = platform.system()
            pic_file = ''
            if sys == "Windows":
                pic_file = os.getcwd() + '\pic\\' + pic_name
            elif sys == "Linux":
                pic_file = os.getcwd() + '/pic/' + pic_name
            reply += MessageSegment.image(file='file:///' + pic_file)
            await bot.send_group_msg(group_id=event.group_id, message=reply)
        finally:
            os.remove(pic_file)
    except Exception:
        reply = reply + "waifu生成错误!请再次尝试!"
        await bot.send_group_msg(group_id=event.group_id, message=reply)
Ejemplo n.º 7
0
async def parse_args(pixiv: Matcher, event: Event, message: str) -> dict:
    args_list = message.strip().split()
    opt = ['-s', '-m', '-3', '-2', '--help', '--debug']
    args = {'key_word': 'random', 'mode': 'pic', 'type': 2, 'debug': False}
    for arg in args_list:
        if (arg[:1] == '-' and arg not in opt):
            await pixiv.finish(
                msg.reply(id_=event.message_id) +
                '你输入的{}有误,请输入--help获得命令帮助'.format(arg))
    if ('--debug' in args_list):
        args['debug'] = True
    if ('--help' in args_list):
        await pixiv.finish(
            msg.reply(id_=event.message_id) +
            '-m:设置回复模式,xml/pic\r\n-s:搜索关键词,置空则为随机\r\n--debug:开启debug模式,打印更多信息\r\n-2/-3::搜索2次元涩图或者三次元涩图'
        )

    if ('-s' in args_list):
        if (args_list.index('-s') != len(args_list) - 1):
            if (args_list[args_list.index('-s') + 1] not in opt):
                args['key_word'] = args_list[args_list.index('-s') + 1]
            else:
                await pixiv.finish(
                    msg.reply(id_=event.message_id) +
                    '你所输入的-s搜索参数有误!搜索参数应该为不带空格的单词,语言不定。')
        else:
            await pixiv.finish(
                msg.reply(id_=event.message_id) +
                '你所输入的-s搜索参数有误!搜索参数应该为不带空格的单词,语言不定。')
    if ('-m' in args_list):
        if (args_list.index('-m') != len(args_list) - 1):
            if (args_list[args_list.index('-m') + 1] in ['xml', 'pic', '3']):
                args['mode'] = args_list[args_list.index('-m') + 1]
            else:
                await pixiv.finish(
                    msg.reply(id_=event.message_id) +
                    "你所输入的-m显示参数有误!\r\nxml:以xml大图发送\r\npic:以小图形式发送,默认选项\r\n")
        else:
            await pixiv.finish(
                msg.reply(id_=event.message_id) +
                "你所输入的-m显示参数有误!\r\nxml:以xml大图发送\r\npic:以小图形式发送,默认选项")
    if ('-3' in args_list):
        args['type'] = 3
    return args
Ejemplo n.º 8
0
async def bot_reply(bot:Bot,event:Event,message:Union[str, Message]):
    reply=MessageSegment.reply(id_=event.id)+message
    await  bot.send_group_msg(group_id=event.group_id,message=message)