async def _(bot: Bot, event: Event, state: T_State): yml_path = "src/shared_data/jrrp.yml" # if not event.is_tome(): sender = event.get_user_id() if os.path.exists(yml_path): with open(yml_path, 'r', encoding="utf-8") as fi: jrrp_log = yaml.load(fi, Loader=yaml.FullLoader) today = date.today() if not jrrp_log['date'] == today: jrrp_log = {'date': today} else: jrrp_log = {'date': date.today()} if sender in jrrp_log.keys(): rp = jrrp_log[sender] else: rp = await get_normal_random(qq=int(event.get_user_id())) jrrp_log[sender] = rp with open(yml_path, 'w', encoding="utf-8") as fi: yaml.safe_dump(jrrp_log, fi, encoding='utf-8', allow_unicode=True) msg = Message([{ 'type': 'at', 'data': { 'qq': sender } }, { 'type': 'text', 'data': { 'text': f'你今天的人品是 {rp}%' } }]) await jrrp.send(msg)
async def message_receive(bot: Bot, event: Event, state: dict): # logger.info(event.dict()) replay = event.dict()["reply"] if replay and str(replay["sender"]["user_id"]) in hso_config.bot: await Setu( bot, event, state).get_text(message_id=event.dict()["reply"]["message_id"])
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 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 _(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 message_receive(bot: Bot, event: Event, state: dict): # logger.info(event.dict()) _reply = event.dict()["reply"] if _reply and str(_reply["sender"]["user_id"]) in ncm_config.bot: message: str = _reply["message"][0].data["text"] # logger.info(message) id = re.search("ID:([0-9]*)", message) # logger.info(id) info = setting.search(Q["group_id"] == event.dict()["group_id"]) if info: data = music.search(Q["id"] == int(id[1]))[0] if info[0]["song"]: params = { "group_id": event.dict()["group_id"], "file": data["file"], "name": data["filename"] } async with httpx.AsyncClient() as client: res = await client.post( "http://127.0.0.1:5700/upload_group_file", params=params) if res.status_code != 200: logger.error("文件上传错误") else: logger.error("数据库中未发现该ID")
async def db_update(bot: Bot, event: Event, state: dict): # 数据库 args = str(event.get_message()).strip().split() state["key"] = args await Power().change(bot, event, state) logger.info(bot.__dict__) logger.info(event.dict()) logger.info(state)
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 _(bot: Bot, event: Event, state: T_State): v = "default" if event.__getattribute__('group_id') is None: event.__delattr__('group_id') else: group_dict = poke_dict[event.__getattribute__('group_id')] group_dict[event.sender_id] += 1 v = await invoke_poke(event.group_id, event.sender_id) if v == "disabled": await poke.finish() return r = randint(1, 14) if r == 1 or v == "limited": await poke.send( Message([{ "type": "poke", "data": { "qq": f"{event.sender_id}" } }])) elif r == 2: await poke.send(Message('妈你戳')) elif r == 3: url = await get_jlpx('戳', '你妈', '闲着没事干') await poke.send(Message([{"type": "image", "data": {"file": url}}])) elif r == 4: img_p = Image.open(path) draw_text(img_p, '戳你妈', 0) draw_text(img_p, '有尝试过玩Cytus II吗', 400) await poke.send( Message([{ "type": "image", "data": { "file": f"base64://{str(image_to_base64(img_p), encoding='utf-8')}" } }])) elif r == 5: await poke.send(Message('呜呜呜再戳人家要哭哭了啦')) elif r <= 7: await poke.send( Message([{ "type": "image", "data": { "file": f"https://www.diving-fish.com/images/poke/{r - 5}.gif", } }])) elif r <= 12: await poke.send( Message([{ "type": "image", "data": { "file": f"https://www.diving-fish.com/images/poke/{r - 7}.jpg", } }])) else: await poke.send(Message('戳你妈'))
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 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 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 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 lssv_h(bot: Bot, event: Event, state: T_State): plus = '' for i in plugins: state = check_plugin(event.dict().get('group_id'), i) txt = '| {} | {}\n'.format('○' if state else '×', i) plus += txt await lssv.finish( '群%d的插件有:\n===========\n%s\n===========\n通过 “启用/禁用 插件名「复数个用","隔开开关插件」”' % (event.dict().get('group_id'), plus))
async def _(bot: Bot, event: Event, state: T_State): if event.__getattribute__('group_id') is None: event.__delattr__('group_id') await poke.send( Message([{ "type": "poke", "data": { "qq": f"{event.sender_id}" } }]))
async def deal_question(bot: Bot, event: Event): if random.random() > sv.get_config('YYGQ_RATE', event): return if random.random() < 0.5: await bot.send(event, random.choice(QUESTION_ANSWERS), at_sender=event.is_tome()) else: await bot.send(event, random.choice(UNIVERSAL_ANSWERS), at_sender=event.is_tome())
async def deal_strong_emotion(bot: Bot, event: Event): if random.random() > sv.get_config('YYGQ_RATE', event): return if random.random() < 0.7: await bot.send(event, random.choice(STRONG_EMOTION_ANSWERS), at_sender=event.is_tome()) else: await bot.send(event, random.choice(UNIVERSAL_ANSWERS), at_sender=event.is_tome())
async def handle_tuling(bot: Bot, event: Event, state: dict): message = str(event.get_message()) reply = await get_data( message, event.get_user_id(), event.group_id if isinstance(event, GroupMessageEvent) else None) if reply: await tuling.finish(escape(reply)) else: # 如果调用失败,或者它返回的内容我们目前处理不了,发送无法获取图灵回复时的「表达」 # 这里的 render_expression() 函数会将一个「表达」渲染成一个字符串消息 await tuling.reject(render_expression(EXPR_DONT_UNDERSTAND))
async def enable_service(bot: Bot, event: CQEvent): if isinstance(event, GroupMessageEvent): names = event.get_plaintext().split() uid = event.user_id user_info = await bot.get_stranger_info(user_id=uid) nickname = user_info.get('nickname', '未知用户') if not names: await enable.finish(f'>{nickname}\n请在空格后接要启用的服务名') group_id = event.group_id svs = Service.get_loaded_services() succ, notfound = [], [] for name in names: if name in svs: sv = svs[name] u_priv = priv.get_user_priv(event) if u_priv >= sv.manage_priv: sv.set_enable(group_id) succ.append(name) else: await enable.finish( f'>{nickname}\n权限不足!启用[{name}]需要权限:{sv.manage_priv},您的权限:{u_priv}\n{PRIV_TIP}' ) else: notfound.append(name) msg = [f'>{nickname}'] if succ: msg.append('已启用服务:' + '、'.join(succ)) if notfound: msg.append('未找到服务:' + '、'.join(notfound)) if msg: await enable.finish('\n'.join(msg)) elif isinstance(event, PrivateMessageEvent): if event.user_id not in salmon.configs.SUPERUSERS: await enable.finish('请在群聊中启用服务') args = event.get_plaintext().split() if len(args) < 2: await enable.finish( 'Input not supported.\nUsage: <service_name> <group_id1> [<group_id2>, ...]' ) name, *group_ids = args svs = Service.get_loaded_services() if name not in svs: await enable.finish(f'未找到服务:{name}') sv = svs[name] succ = [] for gid in group_ids: try: gid = int(gid) sv.set_enable(gid) succ.append(gid) except: await bot.send(event, f'非法群号:{gid}') await enable.finish(f'服务[{name}]已于{len(succ)}个群内启用:{succ}')
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 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 _(bot: Bot, event: Event): global mid qid = event.get_user_id() data = readJson() key = str(event.get_message()).strip() pic, pid = await ghs_pic3(key, 0) try: await setu.send(f'给大佬递图,pixiv的pid={pid}', at_sender=True) mid = await setu.send(message=Message(pic)) print(mid) writeJson(qid, event.time, mid['message_id'], data) except Exception as e: print(e) await setu.send(message=Message('前面的涩图,以后再来探索吧'), at_sender=True)
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)
async def _(bot: Bot, event: CQEvent, state: T_State): if isinstance(event, GroupMessageEvent): state['gids'] = [event.group_id] elif isinstance(event, PrivateMessageEvent): gid = event.get_plaintext().split() if gid: state['gids'] = gid
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∠)_')
def get_message(event: Event, url: str): at_segment = {"type": "at", "data": {"qq": event.get_user_id()}} image_segment = {"type": "image", "data": {"file": url}} if isinstance(event, GroupMessageEvent): return Message([image_segment, at_segment]) return Message(image_segment)
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 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 _(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 help_(bot: Bot, event: Event, state: dict): if int(event.get_user_id()) != event.self_id: path_ = os.getcwd() path_ = path_ + '\help.png' mypath = 'file:///' + path_ print(mypath) await bot.send(event=event, message=MessageSegment.image(mypath))