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 )
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)
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
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})
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]))
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('[图片出错]')
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)
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)
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
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']))
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)
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))))
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())} 秒,请节制") )
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)
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)
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)
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)
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")
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()}"))
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))
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进行了一次搜索")
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("狗修金!不许踢丛雨丸!>_<")
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))
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="错误: 文件不存在,或者不是图片")
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} 找到了他/她想要的萌图")
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')}") ]))
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)
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)
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__)))))
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']))