async def RDL(bot: Bot, event: Event): args = str(event.get_message()).split() if isinstance(event, MessageEvent): if args: if args[0] == 'random': await Random_Gal.send('Senrin折寿中......') async with AsyncClient() as Client: mg = await get_random_game(Client=Client, event=event) await Random_Gal.finish(Message(mg)) elif args[0] == 'tag': try: tag = args[1] except: await Random_Gal.finish( Message( f"[CQ:at,qq={event.user_id}]传入了不正确的参数......\n然后指令坏掉了,Senrin处理了个寂寞" )) else: await Random_Gal.send('Senrin折寿中......') async with AsyncClient() as Client: mg = await get_tag_game(Client=Client, tag=tag, event=event) await Random_Gal.finish(Message(mg)) else: await Random_Gal.finish( Message( f"[CQ:at,qq={event.user_id}]传入了不正确的参数......\n然后指令坏掉了,Senrin处理了个寂寞" )) else: await Random_Gal.finish( Message( f"[CQ:at,qq={event.user_id}]传入了不正确的参数......\n然后指令坏掉了,Senrin处理了个寂寞" ))
async def _ban_menbers(bot: Bot, event: GroupBanNoticeEvent): if event.duration: msg = Message('欸?好像有人被塞上了口球呢......\n' f'对象:[CQ:at,qq={str(event.user_id)}]\n' f'时长:{str(event.duration)}s') await ban_members.finish(msg) else: msg = Message('好耶!口球被取下来咯~~~\n' f'对象:[CQ:at,qq={str(event.user_id)}]') await ban_members.finish(msg)
async def _Reply_SearchPic(bot: Bot, event: Event): send_except_msg = (Message( f"[CQ:at,qq={event.get_user_id()}]你确定你给我的是一张图片?\n" "若持续出此报错,请按照以下步骤搜图:\n" '1.将图片逐张转发至Senrin\n' '2.回复需要搜索的图片并附上“搜图”')) if '搜图' in str(event.get_message()): search_list = [] result_list = [] send_msg_result = '搜图结果如下:\n' for _msg in event.reply.message: # type:ignore 初步处理数据 if _msg.type == 'image': search_list.append(_msg.data['url']) else: pass if search_list: # 有图 await Reply_SearchPic.send('ちょっと待ってください......') for numst in range(len(search_list)): msg_url = search_list[numst] # 获取搜索结果 try: search_result = await SauceNAO(numst=numst, pic_url=msg_url) except: await Reply_SearchPic.finish( '似乎出现了蜜汁错误......图搜到了但没完全搜到......') return if search_result: result_list.append(search_result) if result_list: # 存在搜索结果 for result_send in result_list: _add_result = (f"第{result_send[0]}张图片:\n" f"{result_send[1]}\n") send_msg_result += _add_result if isinstance(event, GroupMessageEvent): await Reply_SearchPic.send( Message( f'[CQ:at,qq={event.get_user_id()}] Senrin从SauceNAO获得了搜图结果,并将以私聊方式发送!\nPS:若持续未收到图片,请添加Senrin为好友!' )) await bot.send_private_msg( user_id=event.user_id, message=Message(send_msg_result)) elif isinstance(event, PrivateMessageEvent): await Reply_SearchPic.send( Message('好耶!找到图咯!\n' + send_msg_result)) else: # 不存在搜索结果 await Reply_SearchPic.send( Message( f'[CQ:at,qq={event.get_user_id()}] 暂无相关信息,Senrin搜了个寂寞') ) else: # 无图 await Reply_SearchPic.finish(send_except_msg) await Reply_SearchPic.finish()
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 format_token_message(token: CombatToken) -> Message: default_msg = Message(f'「{token.name}」') if not token.character_id: return default_msg character = await character_ctl.get_character(token.character_id) if not character: return default_msg external_id = await character_ctl.get_character_external_id( character.id, ExternalType.QQ) if not external_id: return default_msg if character.name == token.name: return Message(MessageSegment.at(external_id)) return Message(f'「{token.name}」(控制者:{MessageSegment.at(external_id)})')
async def _regex_setu_random(bot: Bot, event: Event, state: dict): global last_time_Rrandom if isinstance(event, GroupMessageEvent): if event.group_id in [ get_driver().config.GroupList['last'], get_driver().config.GroupList['test'] ]: start_time = datetime.datetime.now() # 取现在时间 # 用于判定程序是否为初次启动,检测last_time是否被赋值 if isinstance(last_time_Rrandom, datetime.datetime): if (start_time - last_time_Rrandom).seconds <= 5: if str(event.user_id) not in masterList: await regex_setu_random.finish( "我球球你了让Senrin歇一会儿吧......爪巴涩图很累的说......") return else: await regex_setu_random.send("我爪巴爪巴......这就去......") handle_msg = (f"[CQ:at,qq={event.user_id}]随机涩图触发\n" "触发方式:regex\n" "图片分级:随机\n" "图片数量:1\n" "Loading......(约3秒钟)") await regex_setu_random.send(Message(handle_msg)) setu = await random_setu(Rmodle='regex', level=None, num=1) else: setu = None elif isinstance(event, PrivateMessageEvent): if str(event.user_id) in masterList: handle_msg = ("随机涩图触发\n" "触发方式:regex\n" "图片分级:随机\n" "图片数量:1\n" "Loading......(约3秒钟)") await regex_setu_random.send(Message(handle_msg)) setu = await random_setu(Rmodle='regex', level=None, num=1) else: await regex_setu_random.finish("看尼玛涩图给爷爬!") setu = None else: setu = None if setu: handle_msg = 'Active!!!' await regex_setu_random.send(Message(handle_msg)) for msg in setu: await asyncio.sleep(0.1) await regex_setu_random.send(Message(msg)) download_urls.clear() if event.get_user_id() not in masterList and resetTime == True: last_time_Rrandom = datetime.datetime.now() await regex_setu_random.finish()
async def report(): time = datetime.now() msg = Message( f"[CQ:at,qq={event.user_id}]喂,你看看你发的什么消息啊kora!" ) msg_master = ( '上报链接消息!!!\n' f'MessageID:{event.message_id}\n' f'Sender:{event.sender.nickname}({event.user_id})\n' f'Time:{time}' ) for Admin in AdminList_REPORT: await bot.send_private_msg(user_id=Admin, message=msg_master) await bot.send_private_msg(user_id=Admin, message=Message(f"Message:{str(event.get_message())}")) await get_text.send(msg)
async def mimikko_check(bot: Bot, event: Event): sign_data, energy_info_data, energy_reward_data, sign_info, sign_history = mimikko(app_id, authorization) res = "Sign Data:\n" res += f"获得成长值Reward:{sign_data['body']['Reward']}\n" res += f"获得硬币GetCoin:{sign_data['body']['GetCoin']}\n" if sign_data["code"] == "0": res += f"[CQ:image,file=file:///{drawSigncard(sign_data)}]\n" res += f"================\nEnergy Info:\n" res += f"code: {energy_info_data['code']}\n" res += f"msg: {energy_info_data['msg']}\n" res += f"经验:{energy_info_data['body']['Favorability']}/{energy_info_data['body']['MaxFavorability']}\n" res += f"Energy: {energy_info_data['body']['Energy']}\n" res += "================\nEnergy Reward:\n" res += f"{energy_reward_data}\n" res += "================\nSign Info:\n" res += f"code: {sign_info['code']}\n" res += f"IsSign: {sign_info['body']['IsSign']}\n" res += f"连续登录天数: {sign_info['body']['ContinuousSignDays']}\n" res += "================\nSign History:\n" res += f"code: {sign_history['code']}\n" res += f"startTime: {timeStamp2time(sign_history['body']['startTime'])}\n" res += f"endTime: {timeStamp2time(sign_history['body']['endTime'])}\n" res += "signLogs:" day_list = [] for item in sign_history["body"]["signLogs"]: rex_data = re.search("(?P<月>.*)月(?P<日>.*)日", timeStamp2time(item["signDate"])) if rex_data.group("月") == re.search( "(?P<月>.*)月(?P<日>.*)日", timeStamp2time(sign_history["body"]["startTime"]) ).group("月"): day_list.append(rex_data.group("日")) img_path = drawMonth(datetime.datetime.now().month, day_list, plugin_path) res += f"[CQ:image,file=file:///{plugin_path}/{img_path}]" await bot.send(event, Message(res))
async def http_status(bot: Bot, event: Event, state: dict): code = event.message.extract_plain_text() res = Message(f'[CQ:image,file=https://http.cat/{str(code)}.jpg]') if not code.isdigit(): return msg = httpstatuscode[code] + res await statuscode.send(msg)
async def get_result(bot: Bot, event: Event, state: T_State): at = MessageSegment.at(event.get_user_id()) if not state.get("content"): result = await get_help() elif str(state.get("content")).lower() == "list": plugin_set = nonebot.plugin.get_loaded_plugins() plugin_names = [] for plugin in plugin_set: try: name = f'{plugin.name} | ' \ f'{plugin.module.__getattribute__("__help_plugin_name__")}' except: name = f'{plugin.name}' try: version = plugin.module.__getattribute__("__help_version__") except: version = "" plugin_names.append(f'{name} {version}') plugin_names.sort() newline_char = '\n' result = f'已加载插件:\n{newline_char.join(plugin_names)}' else: try: plugin = nonebot.plugin.get_plugin(state.get("content")) except AttributeError: plugin = None try: result = plugin.module.__getattribute__("__usage__") except: try: result = plugin.module.__doc__ except AttributeError: result = f'{state.get("content")}插件不存在或未加载' await helper.finish(Message().append(at).append( MessageSegment.text(result)))
async def rc_handle(bot: Bot, event: GroupRecallNoticeEvent): id = event.message_id data = await bot.get_msg(message_id=id) raw_msg = data['message'] sender = data['sender']['nickname'] msg = f'{sender}撤回了一条信息: {raw_msg}' await bot.send_private_msg(user_id=bot.config.master[0], message=Message(msg))
async def invite_main(bot: Bot = get_bots(), event: Event = {}): bot = get_bots()[config.bot_id] args = event.message.extract_plain_text().split()[1:] print("args:", args) msg = "" user_id = event.user_id if str(user_id) in bot.config.superusers: is_admin = True else: is_admin = False if len(args) == 0: msg = f"猫猫不懂唉~\n可用命令:\n{HELP_MSG}" elif len(args) == 1: while client.shouldLogin: await client.login() if len(args[0]) == 13: if is_admin: msg = await invite(args[0]) else: msg = f"猫猫不懂唉~\n可用命令:\n{HELP_MSG}" elif args[0] == "check": msg = await invite_check() pass elif args[0] == "onekeyaccept": msg = await invite_onekeyaccept() pass else: msg = f"猫猫不懂唉~\n可用命令:\n{HELP_MSG}" else: msg = f"猫猫不懂唉~\n可用命令:\n{HELP_MSG}" await bot.send(event, message=Message(msg)) return
async def main(bot: Bot, event: Event): receive = re.search( r"^字符画(?P<text>.*?)\[CQ:image,file=.*,url=(?P<file>.*)\]$", str(event.message).replace("\n", "").replace("\r", ""), ) if receive: file = receive.group("file") draw_text = receive.group("text") if draw_text: draw_text_list = char_to_pixels(draw_text) # print(draw_text_list) draw_text = "" for item in draw_text_list: draw_text += item[1] if await ascii_art(file=file, draw_string=draw_text, save_path=save_path): reply = f"[CQ:image,file=file:///{save_path}/temp.ascii.png]" else: reply = "error:生成图片失败" else: if await ascii_art(file=file, save_path=save_path): reply = f"[CQ:image,file=file:///{save_path}/temp.ascii.png]" else: reply = "error:生成图片失败" else: reply = "error:缺少图片" # print(reply) await bot.send(event, Message(reply))
async def say_unescape(bot: Bot, event: Event, state: T_State): try: await bot.send(message=Message(event.get_plaintext()), event=event) except ActionFailed as e: logger.error( f'ActionFailed | {e.info["msg"].lower()} | retcode = {e.info["retcode"]} | {e.info["wording"]}' ) return
async def get_result(bot: Bot, event: Event, state: T_State): if state.get("content") in ('help', 'h'): at_user = MessageSegment.at(event.get_user_id()) result = await get_help() else: at_user = MessageSegment.at(event.get_user_id()) roll_result = await roll_dice(state.get("content")) result = MessageSegment.text(roll_result) await dice.finish(Message().append(at_user).append(result))
async def poke_me(bot: Bot, event: Event, state: dict): user_id = event.user_id try: await pokecmd.finish(Message(f"[CQ:poke,qq={user_id}]")) except ActionFailed as e: logger.error( f'ActionFailed | {e.info["msg"].lower()} | retcode = {e.info["retcode"]} | {e.info["wording"]}' ) return
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 _eat_what(bot: Bot, event: MessageEvent): user_id = event.get_user_id() if not _eat_flmt.check(user_id): return msg = str(event.get_message()) user_name = event.sender.nickname or "裙友" eat = await Funny().eat_what(user_name, msg) _eat_flmt.start_cd(user_id) await eat_what.finish(Message(eat))
async def _deal_search(bot: Bot, event: MessageEvent, state: T_State): user_id = event.get_user_id() msg = state["img"] img = findall(r"url=(.*?)]", msg) if not img: await saucenao.reject("请发送图片而不是其他东西!!") a = SaouceNao(SauceNAO.key) result = f"> {MessageSegment.at(user_id)}" + await a.search(img[0]) _search_flmt.start_cd(user_id) await saucenao.finish(Message(result))
async def _deal_sear(bot: Bot, event: MessageEvent, state: T_State): user_id = event.get_user_id() msg = state["anime"] img = re.findall(r"url=(.*?)]", msg) if not img: await anime_search.reject("请发送图片而不是其它东西!!") a = await Anime().search(img[0]) result = f"> {MessageSegment.at(user_id)}\n" + a _anime_flmt.start_cd(user_id) await anime_search.finish(Message(result))
async def handle_group_increase(bot: Bot, event: GroupIncreaseNoticeEvent, state: T_State): user_id = event.user_id group_id = event.group_id detail_type = event.notice_type if detail_type == 'group_increase' and DBGroup( group_id=group_id).permission_command().result == 1: # 发送欢迎消息 at_seg = MessageSegment.at(user_id=user_id) msg = f'{at_seg}欢迎新朋友~\n进群请先看群公告~\n一起愉快地聊天吧!' await bot.send(event=event, message=Message(msg)) logger.info(f'群组: {group_id}, 有新用户: {user_id} 进群')
async def info_get(bot: Bot, event): args = str(event.get_message()).strip() if args: try: args = re.findall(r"\[CQ:at,qq=(\d+).*?\]", args) # 正则匹配QQ号 args = int(args[0]) except: await info.finish("[参数处理错误:args]") # 异常处理 if isinstance(event, GroupMessageEvent): if isinstance(args, int): msg = Message( "Senrin正在制作属于你的专属资料卡......\n" f"制作对象:[CQ:at,qq={str(args)}]" ) await info.send(msg) QQ = int(str(args)) elif event.to_me == True: msg = Message( "嘿嘿没想到吧,Senrin也有资料卡哦!\n" f"制作对象:[CQ:at,qq={bot.self_id}]" ) await info.send(msg) QQ = int(bot.self_id) else: # 个人记录查询 msg = Message( "Senrin正在制作属于你的专属资料卡......\n" f"制作对象:[CQ:at,qq={event.user_id}]" ) await info.send(msg) QQ = event.user_id member_info = await bot.get_group_member_info(group_id=event.group_id, user_id=QQ) dateArray = datetime.datetime.utcfromtimestamp( member_info['join_time']) join_time_format = dateArray.strftime("%Y-%m-%d %H:%M:%S") save_path = await get_card(QQ, member_info['nickname'], member_info['sex'], member_info['title'], f"LV.{member_info['level']}", join_time_format) await info.finish(Message(f"[CQ:image,file=file:///{save_path}]")) else: await info.finish("请您高抬贵脚移步至群聊中查询可否?")
async def sendPic(url, direc, R18, message_type, session_id): bot = nonebot.get_bots()[str(self_id)] if R18 == "false": msg = Message( f'[CQ:image,file=file:///{os.path.abspath(direc) + "/" + os.path.basename(url)}]' ) if message_type == "group": await bot.call_api(api="send_group_msg", group_id=session_id, message=msg) elif message_type == "private": await bot.call_api(api="send_private_msg", user_id=session_id, message=msg)
async def _change_menbers(bot: Bot, event): if isinstance(event, GroupIncreaseNoticeEvent): # 增加 WelcomeTence = random.choice(handle_new_member) msg = Message(f'[CQ:at,qq={str(event.user_id)}]\n' f'{WelcomeTence}\n' '我只是个无情的机器人,请通过#help查看帮助\n' '顺带一提,年轻人要学会控制自己的欲望~~~') await member_var.finish(msg) elif isinstance(event, GroupDecreaseNoticeEvent): # 减少 if event.operator_id == event.user_id: out_time = datetime.datetime.now() msg = Message('芜湖~有一位群友起飞了\n' '一路飞好吧......\n' f'起飞的群友:{str(event.user_id)}\n' f'起飞的时间:{out_time}') await member_var.finish(msg) else: out_time = datetime.datetime.now() msg = Message('欸?刚刚什么人飞过去了呢?\n' '啊!原来是被群管扔出去的呢......\n' f'空中飞人:{str(event.user_id)}\n' f'起飞时间:{out_time}\n') await member_var.finish(msg)
async def get_water_list(groupID, bot): linedic = memdic[str(groupID)] findic = reversed( sorted(linedic.items(), key=lambda kv: (kv[1], kv[0]))) a = 0 pa = "-------氵怪排行榜-------" for elem in findic: UQID = elem[0] ts = elem[1] a = a+1 pa = pa + f"\n{a}.[CQ:at,qq={UQID}] 吹水{ts}次" if a == 5: break await bot.send_group_msg_async(group_id=int(groupID), message=Message(pa))
async def push_setu(bot: Bot, event: Event, state: T_State): user_id = event.user_id if not setudlmt.check(user_id): await setu.send("您今天已经冲了10次了, 雨滴很担心你, 还是明天再冲吧。") if not setuflmt.check(user_id): await setu.send("您冲得太快了,小心人没了!") try: pic = get_setu() setudlmt.increase(user_id) setuflmt.start_cd(user_id) await setu.send(Message(pic)) except ActionFailed as e: logger.error( f'ActionFailed | {e.info["msg"].lower()} | retcode = {e.info["retcode"]} | {e.info["wording"]}' )
async def water_get(bot: Bot, event): args = str(event.get_message()).strip() if args and args != 'list': try: args = re.findall(r"\[CQ:at,qq=(\d+).*?\]", args) # 正则匹配QQ号 args = int(args[0]) except: await water.finish("[参数处理错误:args]") # 异常处理 if isinstance(event, GroupMessageEvent): if args == 'list': # 排行榜查询 await get_water_list(groupID=event.group_id, bot=bot) elif isinstance(args, int): num = memdic[str(event.group_id)][str(args)] EndTime = datetime.datetime.now() msg = Message( "好耶!那就让我来康康宁有多氵\n" f"查询对象:[CQ:at,qq={str(args)}]\n" f"吹氵次数:{num}\n" f"起始时间:{StartTime}\n" f"终止时间:{EndTime}" ) await water.finish(msg) else: # 个人记录查询 num = memdic[str(event.group_id)][str(event.user_id)] EndTime = datetime.datetime.now() msg = Message( "好耶!那就让我来康康宁有多氵\n" f"查询对象:[CQ:at,qq={str(event.user_id)}]\n" f"吹氵次数:{num}\n" f"起始时间:{StartTime}\n" f"终止时间:{EndTime}" ) await water.finish(msg) else: await water.finish("请您高抬贵脚移步至群聊中查询可否?")
async def action(img_msg): time = datetime.now() if conclution == '合规': picture_lib[img_msg.data['file']] = '合规' elif conclution == '不合规': picture_lib[img_msg.data['file']] = '不合规' msg = Message(f"[CQ:at,qq={event.user_id}]我叼你妈的在发图之前可以长点脑子吗?😅😅😅") msg_master = ('上报违规消息!!!\n' f'MessageID:{event.message_id}\n' f'Sender:{event.sender.nickname}({event.user_id})\n' f'Time:{time}') for Admin in AdminList_REPORT: await bot.send_private_msg(user_id=Admin, message=msg_master) await bot.send_private_msg( user_id=Admin, message=Message(f"Message:{str(event.get_message())}")) await get_pic.send(msg) elif conclution == '疑似': picture_lib[img_msg.data['file']] = '疑似' msg = Message(f"[CQ:at,qq={event.user_id}]欸,你这图不对劲欸......") msg_master = ('上报可疑消息......\n' f'MessageID:{event.message_id}\n' f'Sender:{event.sender.nickname}({event.user_id})\n' f'Time:{time}') for Admin in AdminList_REPORT: await bot.send_private_msg(user_id=Admin, message=msg_master) await bot.send_private_msg( user_id=Admin, message=Message(f"Message:{str(event.get_message())}")) await get_pic.send(msg) with open(PicPath, 'w', encoding="utf-8") as f: json.dump(picture_lib, f, indent=2, sort_keys=True, ensure_ascii=False)
async def _(bot: Bot, event: MessageEvent, state: T_State) -> None: msg = state["msg"] img = re.findall(r"url=(.*?)]", msg) if not img: await anime_search.reject("请发送图片而不是其它东西!!") try: req = await get_bytes(URL + img[0]) except RequestTimeOut: raise RequestTimeOut("Request failed!") data = json.loads(req)["docs"] try: d = {} for i in range(len(data)): if data[i]["title_chinese"] in d.keys(): d[data[i]["title_chinese"]][0] += data[i]["similarity"] else: m = data[i]["at"] / 60 s = data[i]["at"] % 60 if not data[i]["episode"]: n = 1 else: n = data[i]["episode"] d[to_simple_string(data[i]["title_chinese"])] = [ data[i]["similarity"], f"第{n}集", f"{int(m)}分{int(s)}秒处", ] except Exception as err: raise Exception(f"Invalid data.\n{err}") result = sorted(d.items(), key=lambda x: x[1], reverse=True) t = 0 msg0 = f"{MessageSegment.at(event.user_id)}\nResult [{len(d)}]:" for i in result: t += 1 s = "%.2f%%" % (i[1][0] * 100) msg0 = msg0 + ("\n——————————\n" f"({t}) Similarity: {s}\n" f"Name: {i[0]}\n" f"Time: {i[1][1]} {i[1][2]}") await anime_search.finish(Message(msg0))
async def _repire_lib(bot: Bot, event: Event): sendmsg = (Message(f"[CQ:at,qq={event.get_user_id()}]你确定你给我的是一张图片?\n" "若持续出此报错,请按照以下步骤修正:\n" '1.将图片逐张转发至Senrin\n' '2.回复需要修正图片并附上“修正”')) check_img = False if isinstance(event, GroupMessageEvent): if '修正' in str(event.message) and event.user_id in AdminList: for _msg in event.reply.message: if _msg.type == 'image': check_img = True picture_lib[_msg.data['file']] = '合规' await repire_lib.send('那啥......Senrin已经去把数据库揍了一顿了\n' '应该不会发疯了吧......\n' '修正完毕') else: pass if check_img == False: await repire_lib.finish(sendmsg) else: pass else: pass elif isinstance(event, PrivateMessageEvent): if event.user_id in AdminList: if '修正' in str(event.message): for _msg in event.reply.message: if _msg.type == 'image': check_img = True picture_lib[_msg.data['file']] = '合规' await repire_lib.send('那啥......Senrin已经去把数据库揍了一顿了\n' '应该不会发疯了吧......\n' '修正完毕') else: pass if check_img == False: await repire_lib.finish(sendmsg) else: pass else: pass else: pass else: pass with open(PicPath, 'w', encoding="utf-8") as f: json.dump(picture_lib, f, indent=2, sort_keys=True, ensure_ascii=False) await repire_lib.finish()