コード例 #1
0
async def _(bot: Bot, event: Event, state: dict):
    """ 如果在群里发送,则在当前群禁言/解除 """
    if event.detail_type == 'group':
        group_id = state['group_id']
        user_id = state['user_id']

        duration = state['duration']
        duration_sec = duration * 60

        bot_role = _bot_role[group_id]
        sender_role = event.sender['role']

        ban_type = get_ban_type(bot_role, sender_role)
        if ban_type == BanType.OWNER:
            await ban_cmd.finish(render_expression(EXPR_OWNER), at_sender=True)
        elif ban_type == BanType.NEED_HELP:
            owner_id = await get_owner_id(group_id, bot)
            if not owner_id:
                raise Exception('无法获取群主QQ号')
            await ban_cmd.finish(
                render_expression(
                    EXPR_NEED_HELP,
                    duration=duration,
                    at_owner=MessageSegment.at(owner_id),
                    at_user=MessageSegment.at(user_id)
                )
            )
        else:
            await bot.set_group_ban(
                group_id=group_id, user_id=user_id, duration=duration_sec
            )
            await ban_cmd.finish(
                render_expression(EXPR_OK, duration=duration), at_sender=True
            )
コード例 #2
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)
コード例 #3
0
ファイル: __init__.py プロジェクト: zangxx66/cheruBot
async def get_image(pid):
    url = 'https://api.pixiv.cat/v1/generate'
    headers = {
        'user-agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
    }
    payload = {'p': pid}
    try:
        resp = await aiorequests.post(url,
                                      headers=headers,
                                      json=payload,
                                      timeout=20)
        res = await resp.json()
    except Exception as e:
        return None
    success = res['success']
    if success is False:
        return res['error']
    multiple = res['multiple']
    msg = ''
    if multiple:
        img_url = res['original_urls_proxy']
        for item in img_url:
            image = MessageSegment.image(item)
            msg += f'{image}\n'
        msg = msg.strip()
    else:
        img_url = res['original_url_proxy']
        msg = MessageSegment.image(img_url)
    return msg
コード例 #4
0
ファイル: __init__.py プロジェクト: ShawnQiang1/nonebot_tools
async def set_receive(bot: Bot, event: Event, state: dict):  # 功能设置接收
    true = ["True", "T", "true", "t"]
    false = ["False", "F", "false", "f"]
    args = str(event.get_message()).strip().split()
    state["key"] = args
    # logger.info(bot.__dict__)
    # logger.info(event.dict())
    # logger.info(state)
    mold = state["key"][0]
    info = setting.search(Q["group_id"] == event.dict()["group_id"])
    if info:
        if mold in true:
            info[0]["song"] = True
            setting.update(info, Q["group_id"] == event.dict()["group_id"])
            msg = "已开启自动下载功能"
            await bot.send(event=event,
                           message=Message(MessageSegment.text(msg)))
        elif mold in false:
            info[0]["song"] = False
            setting.update(info, Q["group_id"] == event.dict()["group_id"])
            msg = "已关闭自动下载功能"
            await bot.send(event=event,
                           message=Message(MessageSegment.text(msg)))
    else:
        setting.insert({"group_id": event.dict()["group_id"], "song": True})
コード例 #5
0
async def handle(bot: Bot, event: MessageEvent, state: T_State):
    raw_args = str(event.get_message()).strip()
    argc = 0
    if raw_args:
        arg_list = raw_args.split()
        argc = len(arg_list)
        for i in range(argc):
            state[f"arg{i+1}"] = arg_list[i]

    if argc > 0 and state["arg1"] == "日榜":
        is_timeout, is_error, status, data = await get_image_data_v1(
            url="https://rakuen.thec.me/PixivRss/daily-10")
    elif argc > 0 and state["arg1"] == "周榜":
        is_timeout, is_error, status, data = await get_image_data_v1(
            url="http://rakuen.thec.me/PixivRss/weekly-10")
    elif argc > 0 and state["arg1"] == "月榜":
        is_timeout, is_error, status, data = await get_image_data_v1(
            url="https://rakuen.thec.me/PixivRss/monthly-10")
    elif argc > 0:
        keyword = unescape(state["arg1"])
        await pixiv.send(f"正在搜索[{keyword}]……")
        is_timeout, is_error, status, data = await get_image_data_v2(
            tag=keyword)
    else:
        is_timeout, is_error, status, data = await get_image_data_v2()

    uid = event.user_id
    session_id = event.get_session_id().split("_")
    # 消息来自群聊
    if len(session_id) == 3:
        at = MessageSegment.at(uid) + "\n"
    else:
        at = ""

    if is_timeout:
        await pixiv.finish(at + "苦しい……请求超时了(´。_。`)")
    if status != 200 and status != 0:
        await pixiv.finish(at + f"苦しい……连接出错了({status}),可以马上重试一下呢!")
    if is_error:
        await pixiv.finish(at + "苦しい……连接出错了(´。_。`)")
    elif len(data) == 0:
        await pixiv.finish(at + "寂しい……什么都没找到呢。试试范围更大的关键词哦!")
    else:
        chosen = choice(data)
        try:
            await pixiv.send(at + f"{chosen[0]}\nPixiv 链接:{chosen[1]}\n" +
                             MessageSegment.image(chosen[2]) +
                             "可能会发不出图片呜呜,复制下面链接到浏览器查看吧")
        except ActionFailed as e:
            await pixiv.send(
                at +
                f"{chosen[0]}\nPixiv 链接:{chosen[1]}\n大概是太涩了差点发不出来,复制下面链接到浏览器查看吧"
            )
            print(f"[pixiv.py]: {e}")
        finally:
            await pixiv.finish(await async_shorten_url(chosen[2]))
コード例 #6
0
ファイル: res.py プロジェクト: zangxx66/cheruBot
 def cqcode(self) -> MessageSegment:
     if cheru.config.RES_PROTOCOL == 'http':
         return MessageSegment.image(self.url)
     elif cheru.config.RES_PROTOCOL == 'file':
         return MessageSegment.image(f'file:///{os.path.abspath(self.path)}')
     else:
         try:
             return MessageSegment.image(helper.pic2b64(self.open()))
         except Exception as e:
             return MessageSegment.text('[图片出错]')
コード例 #7
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)
コード例 #8
0
ファイル: __init__.py プロジェクト: ShawnQiang1/nonebot_tools
async def pic(bot: Bot, event: Event, state: dict):  # 数据库
    # logger.info(bot.__dict__)
    # logger.info(event.dict())
    # logger.info(state)
    args = str(event.get_message()).strip().split()
    url = args[0]
    if url[:4] == "http":
        await bot.send(message=Message(MessageSegment.image(url)), event=event)
    else:
        key = "https://pixiv.cat/{}.jpg".format(url)
        await bot.send(message=Message(MessageSegment.image(key)), event=event)
コード例 #9
0
    async def change(bot: Bot, event: Event, state: T_State):
        """修改配置\r\n
        type:\r\n
        group\r\n
        private\r\n
        order:\r\n
        "setu_level"\r\n
        "original"\r\n
        "setu"\r\n
        "r18"\r\n
        "max_num"\r\n
        "revoke"\r\n
        "at"\r\n
        """
        key = state["key"]
        mold = event.dict()["message_type"]
        if mold == "group":
            config = group_config.search(
                Q["group_id"] == event.dict()['group_id'])[0]
            admins = config["admins"]
            admins.append(config["owner"])
            if int(event.get_user_id()) in admins or event.get_user_id(
            ) in hso_config.superusers:
                data = config
                before = str(config["group"][key[1]])
                if key[0] == "开启":
                    data["group"][key[1]] = True
                    after = "True"
                elif key[0] == "关闭":
                    data["group"][key[1]] = False
                    after = "False"
                else:
                    try:
                        data["group"][key[1]] = int(key[2])
                    except:
                        data["group"][key[1]] = key[2]
                    after = key[2]
                group_config.update(data,
                                    Q["group_id"] == event.dict()['group_id'])
                return await bot.send(event=event,
                                      message=Message(
                                          MessageSegment.text(
                                              '{}:{}-->{}'.format(
                                                  key[1], before, after))))
            else:
                return await bot.send(event=event,
                                      message=Message(
                                          MessageSegment.text('¿没权限还玩🐎¿')))

        elif mold == 'private':
            pass  # todo
コード例 #10
0
ファイル: ELF_bot.py プロジェクト: Fxizenta/qqbot
async def handle_Chat(bot: Bot, event: Event, state: dict):
    try:
        if event.group_id:
            group_id = event.group_id
    except:
        group_id = None
    # 临时解决串群问题
    if group_id != state['group_id']:
        if not group_id:
            await ELF_bot.reject('你在其他群组的会话未结束呢!')
        await ELF_bot.reject()
    msg = state["ELF_bot"]
    if re.search('再见', msg):
        await ELF_bot.send('下次再聊哟!')
        return
    # 百度
    try:
        baidu = state['BaiduBot']
        r_msg = await baidu.sendMsg(msg)
    except:
        r_msg = {}
        r_msg['code'] = '-1'
    if group_id is not None:
        res_messages = MessageSegment.at(event.user_id)
    else:
        res_messages = MessageSegment.text('')
    if str(r_msg['code']) != '0':
        # 如果出错转为调用腾讯
        logger.error(r_msg)
        try:
            tx = state['TXBot']
            r_msg = await tx.sendMsg(msg)
        except:
            app_id = nonebot.get_driver().config.dict()['tx_app_id']
            appkey = nonebot.get_driver().config.dict()['tx_appkey']
            session = str(event.user_id)
            if app_id == None or appkey == None:
                logger.error('腾讯闲聊配置出错!')
                await ELF_bot.send('腾讯、百度 闲聊配置出错!请正确配置1')
                return
            # 腾讯
            tx = txbot.TXBot(app_id=app_id, appkey=appkey, session=session)
            r_msg = await tx.sendMsg(msg)
        await ELF_bot.reject(res_messages +
                             MessageSegment.text(r_msg['answer']))
    else:
        await ELF_bot.reject(res_messages +
                             MessageSegment.text(r_msg['answer']))
コード例 #11
0
 async def send(self,
                file: str = "",
                msg: str = "",
                at: bool = False):  # 发送图片或文字
     # if file[1:4] != "http" and file[1:4] != "":  # 本地文件
     #    file = "file:///" + file
     message_segment = list()
     if file:
         message_segment.append(MessageSegment.image(file=file))
     if msg:
         message_segment.append(MessageSegment.text(msg))
     if at:
         message_segment.append(
             MessageSegment.at(self.event.dict()["user_id"]))
     message = Message(message_segment)
     return await self.bot.send(event=self.event, message=message)
コード例 #12
0
ファイル: __init__.py プロジェクト: Kougami132/ZanukaBot
async def _(bot: Bot, event: GroupRecallNoticeEvent):
    mid = event.message_id
    meg = await bot.get_msg(message_id=mid)
    if event.user_id != event.self_id and 'type=flash,' not in meg['message']:
        re = 'Killer Queen! 第三の爆弾! Bite The Dust!\n{0}刚刚说了:\n' + meg['message']
        await recall.finish(
            message=Message(re.format(MessageSegment.at(event.user_id))))
コード例 #13
0
async def _(bot: Bot, event: GroupMessageEvent):
    global cd
    if str(event.group_id) not in cd:
        cd[str(event.group_id)] = int(time.time())
    ## 初始化cd

    if cd[str(event.group_id)] <= int(time.time()):
        keyword = event.get_message().__str__().strip()
        response = requests.get(
            "https://api.lolicon.app/setu/?apikey={0}&r18={1}&keyword={2}&num={3}&proxy=i.pixiv.cat&size1200=false"
            .format("698604975f3623bd7ed1d0", "2", keyword, 3))
        data = json.loads(response.text)
        if data["code"] == 0:
            cd[str(event.group_id)] = int(time.time()) + 60
            quota = data["quota"]
            if keyword == "":
                await setu.send("正在获取涩图,今日剩余可调用 {0} 次".format(quota))
            else:
                await setu.send("正在获取 [{0}] 涩图,今日剩余可调用 {1} 次".format(
                    keyword, quota))
            for i in data["data"]:
                content = "\n标题: {0} (PID: {1})".format(i["title"], i["pid"])
                content += "\n作者: {0} (UID: {1})".format(i["author"], i["uid"])
                try:
                    await setu.send(MessageSegment.image(i["url"]) + content)
                except Exception as e:
                    print(e)
        elif data["code"] == 404:
            await setu.send("没有符合条件的涩图")
        else:
            await setu.send("获取失败")
    else:
        await setu.finish(
            Message(f"CD还剩 {cd[str(event.group_id)] - int(time.time())} 秒,请节制")
        )
コード例 #14
0
ファイル: __init__.py プロジェクト: zangxx66/cheruBot
async def decherulize_cheru(bot: Bot, event: Event, state: dict):
    msg = state['cheru']
    uid = event.user_id
    at = MessageSegment.at(uid)
    res = escape(cheru2str(msg))
    result = f'{at}的切噜噜是:\n{res}'
    await sv_cheru_to_txt.finish(result)
コード例 #15
0
ファイル: __init__.py プロジェクト: shudorcl/AlisaBot
async def handle(bot: Bot, event: GroupMessageEvent):
    user = event.user_id
    group = event.group_id
    msg = "欧内的手,好汉!"
    node = MessageSegment.node_custom(user, "test", msg)
    node2 = [{
        "type": "node",
        "data": {
            "name": "消息发送者A",
            "uin": "10086",
            "content": [{
                "type": "text",
                "data": {
                    "text": "测试消息1"
                }
            }]
        }
    }, {
        "type": "node",
        "data": {
            "name": "消息发送者B",
            "uin": "10087",
            "content": "[CQ:image,file=xxxxx]测试消息2"
        }
    }]
    await bot.send(event, str(node))
    await bot.send(event, str(node2))
    await bot.send_group_forward_msg(group_id=group, messages=node2)
コード例 #16
0
ファイル: combat.py プロジェクト: epicteller/epicteller
async def combat_status(bot: Bot, event: MessageEvent, state: dict):
    combat: Combat = state['combat']
    if not combat or combat.state == CombatState.ENDED:
        await combat_cmd.finish(
            f'战斗轮指示器未激活。\n'
            f'- 使用指令「{event.raw_message.strip()[0]}combat start」开启一场新战斗。')
        return
    # await combat_cmd.send(Message(MessageSegment.xml(await combat_bot_ctl.format_combat_xml(combat))))
    await combat_cmd.send(
        MessageSegment.share(
            f'https://www.epicteller.com/combat/{combat.url_token}'))
    if combat.state == CombatState.INITIATING:
        if len(combat.order.order_list) == 0:
            status_msg = '还没有人进入先攻顺位。'
        else:
            status_msg = f'已有 {len(combat.order.order_list)} 人进入先攻顺位。'
        await combat_cmd.finish(
            f'当前战斗正处于先攻阶段,投掷先攻骰来决定先攻顺序。\n{status_msg}\n'
            f'- 使用指令「{event.raw_message.strip()[0]}combat run」进入行动阶段。')
        return
    # combat.state == CombatState.RUNNING
    token = combat.tokens[combat.order.current_token_name]
    player_name = await combat_bot_ctl.format_token_message(token)
    message = Message(f'当前正在战斗中。\n'  # TODO: 这里应该有个卡片消息实时显示战斗轮。
                      f'第 {combat.order.round_count} 回合,{player_name} 正在行动中。\n'
                      f'- 使用指令「{event.raw_message.strip()[0]}combat end」结束战斗。')
    await combat_cmd.finish(message)
コード例 #17
0
async def gacha_ten(bot: Bot, event: Event, state: dict):
    SUPER_LUCKY_LINE = 170

    uid = event.user_id
    await check_jewel_num(sv_ten, uid)
    jewel_limit.increase(uid, 1500)

    gid = str(event.group_id)
    gacha = Gacha(_group_pool[gid])
    result, hiishi = gacha.gacha_ten()
    silence_time = 60

    res1 = chara.gen_team_pic(result[:5], star_slot_verbose=False)
    res2 = chara.gen_team_pic(result[5:], star_slot_verbose=False)
    res = helper.concat_pic([res1, res2])
    res = helper.pic2b64(res)
    res = MessageSegment.image(res)
    result = [f'{c.name}{"★"*c.star}' for c in result]
    res1 = ' '.join(result[0:5])
    res2 = ' '.join(result[5:])
    res = f'{res}\n{res1}\n{res2}'

    if hiishi >= SUPER_LUCKY_LINE:
        await sv_ten.send('恭喜海豹!おめでとうございます!')
    try:
        await bot.set_group_ban(self_id=event.self_id,
                                group_id=event.group_id,
                                user_id=uid,
                                duration=silence_time)
    except Exception as e:
        logger.error(e)
    kwargs = {'at_sender': True}
    await sv_ten.finish(f'素敵な仲間が増えますよ!\n{res}\n', **kwargs)
コード例 #18
0
ファイル: baoshi.py プロジェクト: anlen123/my_nonebot2
async def workTMD():
    bot = nonebot.get_bots()
    if bot:
        bot = bot['1928994748']
        await bot.send_msg(message=MessageSegment.image(
            f"file:////root/QQbotFiles/baoshi/workTMD.png"),
                           user_id="1761512493")
コード例 #19
0
async def handle_short(bot: Bot, event: GroupMessageEvent, state: T_State):
    group = state["_matched_dict"]
    number = int(group["number"])
    full_name = get_group_bind_repo(str(event.group_id))
    if not full_name:
        await issue_short.finish("此群尚未与仓库绑定!")
        return
    match = re.match(REPO_REGEX, full_name)
    if not match:
        await issue_short.finish("绑定的仓库名不合法!请重新尝试绑定~")
    owner = match.group("owner")
    repo = match.group("repo")

    token = None
    if get_user_token:
        token = get_user_token(event.get_user_id())
    try:
        issue_ = await get_issue(owner, repo, number, token)
    except HTTPStatusError:
        await issue.finish(f"Issue #{number} not found for repo {owner}/{repo}"
                           )
        return
    img = await issue_to_image(issue_)
    if img:
        await send_github_message(
            issue_short, owner, repo, number,
            MessageSegment.image(f"base64://{base64.b64encode(img).decode()}"))
コード例 #20
0
async def handle(bot: Bot, event: Event, state: T_State):
    async with httpx.AsyncClient() as client:
        resp = await client.get('https://api.mtyqx.cn/api/random.php?return=json')
        logger.debug(resp.json())
        imgurl = resp.json()['imgurl']
        # cqimg = f"[CQ:image,file=1.{imgurl.split('.')[1]},url={imgurl}]"
        await setu.send(MessageSegment.image(imgurl))
コード例 #21
0
ファイル: __init__.py プロジェクト: hailong-z/nonebot2_miya
async def handle_draw(bot: Bot, event: GroupMessageEvent, state: T_State):
    image_url = state['image_url']
    if not re.match(r'^(\[CQ:image,file=[abcdef\d]{32}\.image,url=.+])',
                    image_url):
        await search_anime.reject('你发送的似乎不是图片呢, 请重新发送, 取消命令请发送【取消】:')

    # 提取图片url
    image_url = re.sub(r'^(\[CQ:image,file=[abcdef\d]{32}\.image,url=)', '',
                       image_url)
    image_url = re.sub(r'(])$', '', image_url)

    await search_anime.send('获取识别结果中, 请稍后~')

    res = await get_identify_result(img_url=image_url)
    if not res.success():
        logger.info(f"Group: {event.group_id}, user: {event.user_id} "
                    f"search_anime failed: {res.info}")
        await search_anime.finish('发生了意外的错误QAQ, 请稍后再试')

    if not res.result:
        logger.info(f"Group: {event.group_id}, user: {event.user_id} "
                    f"使用了search_anime, 但没有找到相似的番剧")
        await search_anime.finish('没有找到与截图相似度足够高的番剧QAQ')

    for item in res.result:
        try:
            raw_at = item.get('raw_at')
            at = item.get('at')
            anilist_id = item.get('anilist_id')
            anime = item.get('anime')
            episode = item.get('episode')
            tokenthumb = item.get('tokenthumb')
            filename = item.get('filename')
            similarity = item.get('similarity')
            title_native = item.get('title_native')
            title_chinese = item.get('title_chinese')
            is_adult = item.get('is_adult')

            thumb_img_url = f'https://trace.moe/thumbnail.php?' \
                            f'anilist_id={anilist_id}&file={filename}&t={raw_at}&token={tokenthumb}'

            img_b64 = await pic_2_base64(thumb_img_url)
            if not img_b64.success():
                msg = f"识别结果: {anime}\n\n名称:\n【{title_native}】\n【{title_chinese}】\n" \
                      f"相似度: {similarity}\n\n原始文件: {filename}\nEpisode: 【{episode}】\n" \
                      f"截图时间位置: {at}\n绅士: 【{is_adult}】"
                await search_anime.send(msg)
            else:
                img_seg = MessageSegment.image(img_b64.result)
                msg = f"识别结果: {anime}\n\n名称:\n【{title_native}】\n【{title_chinese}】\n" \
                      f"相似度: {similarity}\n\n原始文件: {filename}\nEpisode: 【{episode}】\n" \
                      f"截图时间位置: {at}\n绅士: 【{is_adult}】\n{img_seg}"
                await search_anime.send(Message(msg))
        except Exception as e:
            logger.error(f"Group: {event.group_id}, user: {event.user_id}  "
                         f"使用命令search_anime时发生了错误: {repr(e)}")
            continue
    logger.info(f"Group: {event.group_id}, user: {event.user_id} "
                f"使用search_anime进行了一次搜索")
コード例 #22
0
ファイル: poke.py プロジェクト: purple4pur/murasame-chan
async def handle_poke(bot: Bot, event: PokeNotifyEvent):
    if event.target_id == BOT_ID:  # 自己被戳
        try:
            await poke.finish("狗修金!不许踢丛雨丸!" +
                              MessageSegment.image(get_avatar_url()))
        except ActionFailed as e:
            print(f"[poke.py]: {e}")
            await poke.finish("狗修金!不许踢丛雨丸!>_<")
コード例 #23
0
ファイル: __init__.py プロジェクト: Kougami132/ZanukaBot
async def _(bot: Bot, event: PokeNotifyEvent):
    # msg = choice([
    #     "你再戳!", "?再戳试试?", "别戳了别戳了再戳就坏了555", "我爪巴爪巴,球球别再戳了", "你戳你🐎呢?!",
    #     "那...那里...那里不能戳...绝对...", "(。´・ω・)ん?", "有事恁叫我,别天天一个劲戳戳戳!", "欸很烦欸!你戳🔨呢",
    #     "?", "差不多得了😅", "欺负咱这好吗?这不好", "我希望你耗子尾汁"
    # ])
    file = "file:///{0}/src/data/voices/miko-daily-023.mp3".format(os.getcwd())
    await poke.finish(MessageSegment.record(file))
コード例 #24
0
async def love_rev(bot: Bot, event: Event, state: dict):
    msg = "/root/" + str(event.get_message())[5:]
    print(msg)
    if os.path.exists(msg):
        await bot.send(event=event,
                       message=MessageSegment.image(f"file:///{msg}"))
    else:
        await bot.send(event=event, message="错误: 文件不存在,或者不是图片")
コード例 #25
0
async def handle_moepic(bot: Bot, event: GroupMessageEvent, state: T_State):
    tags = state['tags']
    if tags:
        _res_list = list()
        for tag in tags:
            _res = DBPixivillust.list_illust(nsfw_tag=0, keyword=tag)
            if _res.success():
                _pids = set(_res.result)
                _res_list.append(_pids)
        if len(_res_list) > 1:
            # 处理tag交集, 同时满足所有tag
            for item in _res_list[1:]:
                _res_list[0].intersection_update(item)
            pid_list = _res_list[0]
        elif len(_res_list) == 1:
            pid_list = _res_list[0]
        else:
            pid_list = _res_list
    else:
        # 没有tag则随机获取
        pid_list = DBPixivillust.rand_illust(num=3, nsfw_tag=0)

    if not pid_list:
        logger.info(
            f"Group: {event.group_id}, User: {event.user_id} 没有找到他/她想要的萌图")
        await moepic.finish('找不到萌图QAQ')
    elif len(pid_list) > 3:
        pid_list = random.sample(pid_list, k=3)

    await moepic.send('稍等, 正在下载图片~')
    # 处理article中图片内容
    tasks = []
    for pid in pid_list:
        tasks.append(fetch_illust_b64(pid=pid))
    p_res = await asyncio.gather(*tasks)
    fault_count = 0
    for image_res in p_res:
        try:
            if not image_res.success():
                fault_count += 1
                logger.warning(f'图片下载失败, error: {image_res.info}')
                continue
            else:
                img_seg = MessageSegment.image(image_res.result)
            # 发送图片
            await moepic.send(img_seg)
        except Exception as e:
            logger.warning(
                f"图片发送失败, group: {event.group_id}. error: {repr(e)}")
            continue

    if fault_count == len(pid_list):
        logger.info(
            f"Group: {event.group_id}, User: {event.user_id} 没能看到他/她想要的萌图")
        await moepic.finish('似乎出现了网络问题, 所有的图片都下载失败了QAQ')
    else:
        logger.info(
            f"Group: {event.group_id}, User: {event.user_id} 找到了他/她想要的萌图")
コード例 #26
0
ファイル: maimaidx.py プロジェクト: Diving-Fish/Chiyuki-Bot
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')}")
            ]))
コード例 #27
0
ファイル: __init__.py プロジェクト: Whitesad/ChristinaQQbot
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)
コード例 #28
0
async def wakuang_got(bot: Bot, event: Event, state: dict):
    rank = state['rank']
    rank = np.clip(rank, 1, 15001)
    s_all = all_season[1:rank].sum()
    s_this = this_season[1:rank].sum()
    uid = event.user_id
    at = MessageSegment.at(uid)
    msg = f'{at}\n最高排名奖励还剩{s_this}钻\n历届最高排名还剩{s_all}钻'
    await sv_wakuang.finish(msg)
コード例 #29
0
ファイル: __init__.py プロジェクト: Kougami132/ZanukaBot
async def _(bot: Bot, event: Event, state: T_State):
    print(os.getcwd())
    # await test.send(MessageSegment.record(file="miko-daily-023.mp3"))
    # with open("./src/plugins/test/data/miko-daily-023.mp3", "rb") as file:
    #     data = b64encode(file.read()).decode()
    #     await test.send(f"[CQ:record,file=base64://{data}]")
    await test.send(
        MessageSegment.record("file:///{0}/data/miko-daily-023.mp3".format(
            os.path.abspath(os.path.dirname(__file__)))))
コード例 #30
0
ファイル: __init__.py プロジェクト: jxygzzy/Saiki
async def handle_search(bot: Bot, event: Event, state: T_State):
    keywords = state["keywords"]
    data = await search_pic(keywords)
    if data == "404":
        await bot.send(event=event, message="没有符合条件的图")
    else:
        await bot.send(event=event, message=Message("找到图了!但是发给主人了~"))
        await bot.call_api("send_private_msg",
                           user_id=1924451951,
                           message=MessageSegment.image(file=data['url']))