async def _(bot: Bot, event: Event, state: T_State): # 开关检测,开则复述 message = event.get_message() message_type = str(event.dict()["message_type"]) # 来源判断 if message_type == "group": id = str(event.dict()["group_id"]) # message_type = "on_group" switch = (Path(".") / "apeiria_network" / "config" / "repeat" / "group" / "switch.json") re = Path( "." ) / "apeiria_network" / "config" / "repeat" / "group" / "re.json" elif message_type == "private": id = event.get_user_id() # message_type = "on_user" switch = (Path(".") / "apeiria_network" / "config" / "repeat" / "private" / "switch.json") re = Path( "." ) / "apeiria_network" / "config" / "repeat" / "private" / "re.json" try: with open(switch, mode="r", encoding="utf-8") as switch_json: switch_reader = json.load(switch_json) except: switch_reader = {} if id in switch_reader: if switch_reader[id] == "on": await repeat_after_me.finish(message) # 检测相同信息是否发送三次,若是则复述一次,然后清空数据 i = 0 # strmsg = {id: ['', '', '', i, message_type]} strmsg = {id: ["", "", "", i]} message = str(message) try: with open(re, mode="r", encoding="utf-8") as re_json: strmsg = json.load(re_json) except: strmsg = {} if id not in strmsg: with open(re, mode="w", encoding="utf-8") as re_json_file_w: # strmsg.update({id: [message, '', '', i, message_type]}) strmsg.update({id: [message, "", "", i]}) json.dump(strmsg, re_json_file_w, ensure_ascii=False, indent=4) pos = strmsg[id][3] if pos >= 2: strmsg[id][pos] = message pos -= 3 else: strmsg[id][pos] = message pos += 1 strmsg[id][3] = pos if strmsg[id][0] == strmsg[id][1] == strmsg[id][2]: strmsg[id][0] = strmsg[id][1] = strmsg[id][2] = "" re_json_file_w1 = open(re, mode="w", encoding="utf-8") json.dump(strmsg, re_json_file_w1, ensure_ascii=False, indent=4) await repeat_after_me.finish(event.get_message()) re_json_file_w2 = open(re, mode="w", encoding="utf-8") json.dump(strmsg, re_json_file_w2, ensure_ascii=False, indent=4)
async def delete_member_handler(bot: cqhttp.Bot, event: cqhttp.Event, state: typing.T_State): # Request valid confirmation for deletion while True: if str(event.get_message()).strip() not in InteractionMessage.CONFIRMATION_MESSAGE: await delete_member.reject(InteractionMessage.INVALID_ARG) else: break user_confirm = str(event.get_message()).strip() if user_confirm.startswith(InteractionMessage.CONFIRMATION_MESSAGE[1]): # Do not delete await delete_member.finish(message=InteractionMessage.RECORD_CHANGE_ABORT) else: delete_result = await data_source.mc.delete(state['member_id']) if delete_result['error'] is None: await delete_member.finish(message=InteractionMessage.RECORD_CHANGE_SUCCESS) else: if bot.config.debug: await bot.send_private_msg( user_id=plugin_config.AUTHOR, message=delete_result['func_info'] ) await bot.send_private_msg( user_id=plugin_config.AUTHOR, message=delete_result['error'] ) await delete_member.finish('\n'.join([ InteractionMessage.RECORD_CHANGE_FAIL, InteractionMessage.ERROR_MESSAGE ]))
async def _get_march(bot: Bot, event: Event): try: return_msg_pub = studylib['public']['all_users'][str( event.get_message())][0] await get_march.finish(Message(return_msg_pub)) except: pass try: return_msg_pri = studylib['private'][event.get_user_id()][str( event.get_message())] await get_march.finish(Message(return_msg_pri)) except: pass
async def add_boss_range_handler(bot: cqhttp.Bot, event: cqhttp.Event, state: typing.T_State): raw_args = str(event.get_message()).strip() arg_list = list(map(str.strip, raw_args.split(plugin_config.separator))) boss_names = arg_list[0:4] boss_healths = list(map(int, arg_list[4:8])) start_level = int(arg_list[8]) end_level = int(arg_list[9]) adding_tasks = [] for level in range(start_level, end_level): for i in range(len(boss_names)): info = { 'boss_id': level * 100 + i + 1, 'alias': 'R' + str(level) + boss_names[i], 'health': boss_healths[i] } adding_tasks.append(asyncio.create_task(data_source.bc.add(info))) await asyncio.wait(adding_tasks) await add_boss_range.finish( message='Added Boss in level range {} and {}'.format(start_level, end_level) )
async def handle_image(bot: Bot, event: Event, state: dict): message = str(event.get_message()) images = await get_data(message) # TODO 使用抛出异常的方式统一处理,避免使用独立的异常处理逻辑 if type(images) is list and len(images): logger.info(f'[{message}] images count: {len(images)}') reply_image = random.choice(images) # logger.info(f'reply_image: {reply_image}') # 使用 objURL 时,图片可能会不存在,不知道百度搜图这个操作啥意思 _(:3J∠)_ # 可能是由于百度会从源地址去下载原图,但是原图不存在的问题 obj_url = reply_image['objURL'] middle_url = reply_image['middleURL'] logger.info(f'obj_url: {obj_url}') logger.info(f'middle_url: {middle_url}') try: # await image.finish(f'[CQ:image,file={escape(reply_image)}]') # 通过字符串暂时无法发送带有特殊符号的图片链接 await image.finish(get_message(event, obj_url)) logger.info(f'reply obj_url: {obj_url}') except exception.ActionFailed: logger.warning(f'reply obj_url failed, retry by middle_url') await image.finish(get_message(event, middle_url)) else: logger.info(f'[{message}] no images') await image.finish(f'未找到 [{message}] 相关图片 _(:3J∠)_')
async def _(bot: Bot, event: Event, state: T_State): try: gid = event.group_id glst = await bot.get_group_member_list(group_id=gid, self_id=int(bot.self_id)) v = re.match("/随个([男女]?)人", str(event.get_message())).group(1) if v == '男': for member in glst[:]: if member['sex'] != 'male': glst.remove(member) elif v == '女': for member in glst[:]: if member['sex'] != 'female': glst.remove(member) m = random.choice(glst) await random_person.finish( Message([{ "type": "at", "data": { "qq": event.user_id } }, { "type": "text", "data": { "text": f"\n{m['card'] if m['card'] != '' else m['nickname']}({m['user_id']})" } }])) except AttributeError: await random_person.finish("请在群聊使用")
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 _(bot: Bot, event: Event): if str(event.get_message()) == '练功房': await destiny.finish(message=Message( f'[CQ:image,file=file:///{PATH}/src/data/destiny/practice_room.png]' )) return await destiny.finish(message=Message(f'检索不到关键词,触发为got方法'))
async def db_update(bot: Bot, event: Event, state: dict): # 数据库 args = str(event.get_message()).strip().split() state["key"] = args # logger.info(bot.__dict__) # logger.info(event.dict()) # logger.info(state) await Power().change(bot, event, state)
async def _(bot: Bot, event: Event): mes = str(event.get_message()) if '一' in mes: await we.finish(message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we1.png]')) elif '二' in mes: await we.finish(message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we2.png]')) elif '三' in mes: await we.finish(message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we3.png]')) elif '四' in mes: await we.finish(message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we4.png]')) elif '五' in mes: await we.finish(message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we5.png]')) elif '六' in mes: await we.finish(message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we6.png]')) else: day = str(datetime.now().isoweekday()) if '明' in mes: if day == '7': day = '1' await we.finish( message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we{day}.png]')) elif day == '6': await tf.finish(message='明天星期天所有副本都可以刷哦!') else: day = str(int(day) + 1) await we.finish( message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we{day}.png]')) elif day != '7': await we.finish( message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we{day}.png]')) else: await we.finish(message='今天星期天所有副本都可以刷哦!')
async def cheatt_(bot: Bot, event: Event): if event.is_tome(): print("YES") if event.is_tome() and int(event.get_user_id()) != event.self_id: mysay = event.get_message() mysay = await get_n(str(mysay)) await bot.send(event=event, message=mysay)
async def handle_image(bot: Bot, event: Event, state: dict): message = str(event.get_message()) short_result = short_reg.findall(message) short_links = list(set(short_result)) # # https://stackoverflow.com/questions/62846735/how-to-use-await-inside-map-function # makeup_links = await alist(amap(get_target_link, short_links)) result = reg.findall(message) links = list(filter(lambda link: type(link) == str, list( set(result)))) + short_links for link in links: info = await get_data(link) if info and 'url' in info: text = [f"{link}", f"UP: {info['up']}", f"标题: {info['title']}"] if info['desc']: text.append(f"简介:{info['desc']}") message = Message([{ "type": "image", "data": { "file": info['url'] } }, { "type": "text", "data": { "text": '\n'.join(text) } }]) await bili_cover.send(message) else: await bili_cover.send(f'未找到 {link} 相关信息') if len(links): raise StopPropagation
async def ygo_rev(bot: Bot, event: Event, state: dict): # print(event.get_message()) msg = str(event.get_message())[4:] url = f"https://ygocdb.com/?search={msg}" # print(url) async with aiohttp.ClientSession() as session: async with session.get(url=url, headers=headers) as response: txt = await response.text() list_pic = re.findall('\<a href\=\"(.*?)\" target\=\"_blank\"\>', txt) list_pic = [x for x in list_pic if str(x).endswith(".jpg")] pic_all = os.listdir("/root/QQbotFiles/ygo") send_msg = "" if list_pic: list_pic = list_pic[:1] for x in list_pic: if x not in pic_all: await down_img(x) name = x[x.rfind("/") + 1:] send_msg += f'[CQ:image,file=file:////root/QQbotFiles/ygo/{name}]' if send_msg != "": await bot.send(event=event, message=Message(send_msg)) else: await bot.send(event=event, message="未查询到此类卡片")
async def _(bot: Bot, event: Event, state: T_State): args = str(event.get_message()).strip() # message_type = str(event.dict()['message_type']) # logger.info(event.get_message()) # logger.info(args) receive = _switch(args, 'off', event) await switch_on.finish(receive)
def set_usr_args(state: T_State, event: Event): args = str(event.get_message()).strip() if args: state["username"] = args else: with open(_cachepath, "r", encoding="utf-8") as f: data: dict = json.load(f) state["username"] = data.get(event.get_user_id())
async def log2database(bot: Bot, event: Event, state: T_State): message_id = event.get_event_description().split()[1] session_id = event.get_session_id().split("_") if session_id[0] == 'group': group_id = session_id[1] user_id = session_id[2] self_id = None msg: Message[MessageSegment] = event.get_message() else: group_id = None user_id = session_id[0] self_id = bot.self_id msg: Message[MessageSegment] = event.get_message() await db.log_chat(msg, user_id, message_id, group_id, self_id)
async def handle_first_receive(bot: Bot, event: Event, state: T_State): args = str(event.get_message()).strip() # 首次发送命令时跟随的参数,例:/天气 上海,则args为上海 user_id = event.get_user_id() area_reader = getAreaJson() # 从area.json读取绑定的天气数据 if args: state["city"] = args # 如果用户发送了参数则直接赋值 elif user_id in area_reader: state["city"] = area_reader[user_id] #查到绑定的数据直接赋值
async def ys_draw_handler(bot: Bot, event: Event): args = str(event.get_message()).strip() try: msg = sim_draw(10, game="yuanshen") except Exception as e: msg = f'发生错误:{repr(e)}' logger.exception(e) await bot.send(event, msg, at_sender=True)
async def _(bot: Bot, event: Event): argv = int(str(event.get_message())) if argv > 100: await shuffle.finish('请输入100以内的数字') return d = [str(i + 1) for i in range(argv)] random.shuffle(d) await shuffle.finish(','.join(d))
async def prts_draw_handler(bot: Bot, event: Event): args = str(event.get_message()).strip() noimg = True if args == "图": noimg = False msgs = sim_draw(55, noimg=noimg, game="prts") for msg in msgs: await prts_draw.send(msg)
async def _(bot: Bot, event: Event): message = str(event.get_message()) try: uid = re.findall(r"\d+", message)[0] # str im = await draw_pic(uid) await query.send(Message(f'[CQ:image,file={im}]')) except: await query.send(Message('输入错误!'))
async def _(bot: Bot, event: Event, state: T_State): v = str(event.get_message()).strip() help_text: dict = get_driver().config.help_text if v == "": help_str = '\n'.join( [f'/help {key}\t{help_text[key][0]}' for key in help_text]) await help.finish(help_str) else: await help.finish(help_text[v][1])
async def cochandler(bot: Bot, event: Event): args = str(event.get_message())[4:].strip() try: args = int(args) except: args = 20 inv = Investigator() inv.age_change(args) await coc.finish(inv.output())
async def rdcommandhandler(bot: Bot, event: Event): args = str(event.get_message())[2:].strip() uid = int(event.get_user_id()) if args and not ("." in args): rrd = rd(args) if type(rrd) == str: await rdcommand.finish(rrd) elif type(rrd) == list: await bot.send_private_msg(user_id=uid, message=rrd[0])
async def r6s_set_handler(bot: Bot, event: Event): args = str(event.get_message()).strip() if args: with open(_cachepath, "r", encoding="utf-8") as f: data = json.load(f) data[event.get_user_id()] = args with open(_cachepath, "w", encoding="utf-8") as f: json.dump(data, f) await r6s_set.finish("已设置ID:%s" % args)
async def search_by_member_handler(bot: cqhttp.Bot, event: cqhttp.Event, state: typing.T_State): raw_args = str(event.get_message()).strip() arg_list = list(map(str.strip, raw_args.split(plugin_config.separator))) if len(arg_list) not in [1, 2]: # Not enough arguments have been provided await search_record_by_member.finish( InteractionMessage.INVALID_ARG_NUMBER) time_range = () now_date = datetime.date.today().strftime('%Y-%m-%d') if len(arg_list) == 1: time_range = ( int( time.mktime( datetime.datetime.strptime(now_date, '%Y-%m-%d').timetuple())), int( time.mktime( (datetime.datetime.strptime(now_date, '%Y-%m-%d') + datetime.timedelta(hours=23, minutes=59, seconds=59)).timetuple()))) else: if arg_list[1] != '-all': try: time_slice = datetime.datetime.strptime( arg_list[1], '%Y-%m-%d') time_range = ( int(time.mktime(time_slice.timetuple())), int( time.mktime((time_slice + datetime.timedelta( hours=23, minutes=59, seconds=59)).timetuple()))) except ValueError: await search_record_by_member.finish( InteractionMessage.INVALID_ARG) search_result = await record_database.search('member', arg_list[0], time_range) if search_result['status'] != DBStatusCode.SEARCH_SUCCESS: if bot.config.debug: await bot.send_private_msg(user_id=plugin_config.AUTHOR, message=str(search_result['error'])) await search_record_by_member.finish(InteractionMessage.ERROR_MESSAGE) else: if not search_result['result']: # No record found await search_record_by_member.finish( message=InteractionMessage.RECORD_FIND_FAIL.format(arg_list[0]) ) else: result_message = InteractionMessage.RECORD_FIND_SUCCESS.format( '成员(' + arg_list[0] + ')') result_message = result_message + '\n'.join( map(_revue_record_member_formatter, search_result['result'])) await search_record_by_member.finish(result_message)
async def handle_help(bot: Bot, event: Event, state: dict): args = str(event.get_message()).strip() if args: state["functionID"] = args await bot.send(event, "get it!") else: msg = ('请直接输入功能代码获取帮助~\n' f'[CQ:at,qq={event.get_user_id()}]Senrin目前支持的功能如下:\n' f'{HelpList}') await help.send(Message(msg))
async def _(bot: Bot, event: Event, state: T_State): regex = "今天(.+?)还是(.+)" res = re.match(regex, str(event.get_message())).groups() await pick.finish( Message([{ "type": "text", "data": { "text": f"{random.choice(res)}\n" } }]))
async def handle_tuling(bot: Bot, event: Event, state: dict): message = str(event.get_message()) group_id = get_group_id(message) data = await get_data(group_id) if data and len(data): await tickets.finish(escape('\n---\n'.join(map(format_ticket, data)))) else: await tickets.reject('票务查询失败')
async def _(bot: Bot, event: Event, state: T_State): args = str(event.get_message()).strip() # if message_type == 'group': # id = str(event.dict()['group_id']) # elif message_type == 'private': # id = event.get_user_id() # logger.info(event.get_message()) # logger.info(args) receive = _switch(args, 'on', event) await switch_on.finish(receive)