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 _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 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 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}")
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 _(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)
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
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)