async def _onFocus(event: Event): if isinstance(event, GroupMessageEvent): return (event.message_type == message_type and event.get_user_id() == user_id and event.group_id == group_id) elif isinstance(event, PrivateMessageEvent): return event.message_type == message_type and event.get_user_id( ) == user_id
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 _(bot: Bot, event: Event, state: T_State): yml_path = "src/plugins/jrrp/jrrp.yml" if not event.is_tome(): sender = event.get_user_id() with open(yml_path, "r", encoding="utf-8") as f: jrrp_log = yaml.load(f, Loader=yaml.FullLoader) today = datetime.date.today() if not jrrp_log['date'] == today: jrrp_log = {'date': today} if sender in jrrp_log.keys(): rp = jrrp_log[sender] else: rp = randint(0, 100) jrrp_log[sender] = rp with open("src/plugins/jrrp/jrrp.yml", "w", encoding="utf-8") as f: yaml.dump(jrrp_log, f) msg = [{ 'type': 'at', 'data': { 'qq': sender } }, { 'type': 'text', 'data': { 'text': f'你今天的人品是 {rp}%' } }] await jrrp.send(msg)
async def command_env_settings(bot: Bot, event: Event, state: T_State, matcher: Matcher, regex: str): env_vars = os.environ.copy() old_python_env = env_vars.get("PYTHONPATH", "") if old_python_env.strip() == "": old_python_env = [] else: old_python_env = old_python_env.split(":") env_vars["PYTHONPATH"] = ":".join(old_python_env + [str(PROJECT_ROOT)]) if event is not None: env_vars["BOT_USER_ID"] = str(event.get_user_id()) env_vars["BOT_SESSION_ID"] = str(event.get_session_id()) if event.is_tome(): env_vars["TO_BOT"] = str(1) env_vars["BOT_EVENT_TYPE"] = str(event.get_type()) msg = str(event.get_plaintext()) env_vars["BOT_EVENT_MESSAGE"] = msg group_id = getattr(event, "group_id", None) if group_id is not None: env_vars["BOT_GROUP_ID"] = str(group_id) if regex is not None: match = re.match(regex, msg, flags=re.MULTILINE | re.DOTALL) if match: _, origin_command, command_text = match.groups() env_vars["BOT_EVENT_COMMAND"] = origin_command env_vars["BOT_EVENT_COMMAND_ARGS"] = command_text return env_vars
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 handle_first_receive(bot: Bot, event: Event, state: T_State): user = event.get_user_id() at_ = "[CQ:at,qq={}]".format(user) replay = await get_randint() msg = at_ + " " + replay msg = Message(msg) await character.finish(message=msg)
async def _(bot: Bot, event: Event, state: dict): qq = int(event.get_user_id()) argv = str(event.get_message()).strip().split(' ') try: nickname = binding_map[qq] if len(argv) != 2: await sancheck.send("你这白痴又弄错命令格式了!给我记好了,正确的格式是.sc <成功> <失败>!") return role = role_cache[nickname] value = random.randint(1, 100) sanity = role['stats']['san'] if value > sanity: s, v = roll_expression(argv[1]) role['stats']['san'] -= v await sancheck.send( "【%s】的理智检定:%d/%d 失败,理智扣除%s点,剩余%d点" % (nickname, value, sanity, s, role['stats']['san'])) else: s, v = roll_expression(argv[0]) role['stats']['san'] -= v await sancheck.send( "【%s】的理智检定:%d/%d 成功,理智扣除%s点,剩余%d点" % (nickname, value, sanity, s, role['stats']['san'])) except KeyError: await sancheck.send("【%s】看起来还没绑定角色呢。输入.bind <角色名称> 进行绑定吧?" % (event.sender.nickname)) return
async def _(bot: Bot, event: Event, state: dict): qq = int(event.get_user_id()) try: nickname = binding_map[qq] except KeyError: await rollcheck.send("【%s】看起来还没绑定角色呢。输入.bind <角色名称> 进行绑定吧?" % (event.sender.nickname)) return argv = str(event.get_message()).strip().split(' ') try: stat_name = argv[0] if len(argv) == 2: value = int(argv[1]) await rollcheck.send(check(nickname, stat_name, value)) return try: role = role_cache[nickname] value, err = search_check(role, stat_name) if not err: await rollcheck.send("未找到能力值【%s】!真的有这个能力吗?" % stat_name) return await rollcheck.send(check(nickname, stat_name, value)) except KeyError: await rollcheck.send("【%s】看起来还没绑定角色呢。输入.bind <角色名称> 进行绑定吧?" % (event.sender.nickname)) return except Exception: await rollcheck.send("你这白痴又弄错命令格式了!给我记好了,正确的格式是.rc <技能/属性> [值]!") return
async def _(bot: Bot, event: Event, state: dict): name = str(event.get_message()).strip() qq = int(event.get_user_id()) try: var = binding_map[qq] except KeyError: try: var = role_cache[name] except KeyError: text = requests.get("http://47.100.50.175:25565/query", { "name": name }).text if text == "{}": await bind.send("千雪没能找到角色【%s】,下次再出错就把你拉入黑名单了哦!" % name) return role_cache[name] = demjson.decode(text, encoding='utf-8') if check_map(name): binding_map[qq] = name else: await bind.send("这个角色已经绑定过啦!难道还想两个人控制一个角色吗?!") return await bind.send("绑定成功!现在千雪已经认为【%s】就是【%s】了哦!" % (event.sender.nickname, name)) return await bind.send("你已经绑定过角色了哟~")
async def onFocus(event: Event) -> Permission: """ 说明 * 专注于当前会话类型,需配合 `nonebot.matcher.Matcher.permission_updater` 使用 示例 * 见连续会话实例 """ message_type = event.message_type user_id = event.get_user_id() group_id = None if isinstance(event, GroupMessageEvent): group_id = event.group_id async def _onFocus(event: Event): if isinstance(event, GroupMessageEvent): return (event.message_type == message_type and event.get_user_id() == user_id and event.group_id == group_id) elif isinstance(event, PrivateMessageEvent): return event.message_type == message_type and event.get_user_id( ) == user_id return Permission(_onFocus)
async def handle(bot: Bot, event: Event, state: T_State): try: user_id = event.get_user_id() at_ = "[CQ:at,qq={}]".format(user_id) args = str(state["args"]).split() if len(args) != 2: await query.send(Message(QUERY_ARGS_PROMPT)) db = pymysql.connect(host=QQMAP_HOST, port=3306, user=QQMAP_USERNAME, passwd=QQMAP_PASSWORD, db="cpds_db", charset='utf8') cursor = db.cursor() type, key = args logger.debug(f'query: {type} {key}') if type == '学号': qq = await stunum2qq(key, cursor) if not qq: await query.send(Message(at_ + QUERY_NO_DATA_PROMPT)) else: await query.send(Message(at_ + QUERY_DATA_FORMAT.format(key, qq))) elif str(type).lower() == 'qq': stunum = await qq2stunum(key, cursor) if not stunum: await query.send(Message(at_ + QUERY_NO_DATA_PROMPT)) else: await query.send(Message(at_ + QUERY_DATA_FORMAT.format(stunum, key))) else: await query.send(Message(QUERY_NO_SUCH_TYPE_PROMPT)) db.close() cursor.close() except Exception as e: msg = f"Exception: {Exception}\n" msg += f"str(e): {str(e)}\nrepr(e): {repr(e)}\n" msg += f"traceback.format_exc(): {traceback.format_exc()}" await exception_log(bot, msg)
async def _(bot: Bot, event: Event, state: dict): result = roll_expression(str(event.get_message()).strip()) name = event.sender.nickname try: name = binding_map[int(event.get_user_id())] except KeyError: pass await roll.send("【%s】的掷骰结果:%s" % (name, result[0]))
async def handle_first_receive(bot: Bot, event: Event, state: T_State): if event.get_user_id() != "1364374624": await Delwords.finish(Message("你就是逊啊,没权限")) del_msg = IsDel() if del_msg: await Delwords.finish( Message("已将语录:\n-------\n" + del_msg + "\n-------\n删除!")) else: await Delwords.finish(Message("删除失败了,嗯嘿嘿"))
async def handle(bot: Bot, event: Event, state: T_State): at_ = "[CQ:at,qq={}]".format(event.get_user_id()) 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(Message(at_ + cqimg))
async def _(bot: Bot, event: Event, state: dict): qq = int(event.get_user_id()) try: var = binding_map[qq] del role_cache[binding_map[qq]] del binding_map[qq] await unbind.send("解绑成功~") except KeyError: await unbind.send("你还未绑定角色哦~")
async def _(bot: Bot, event: Event, state: dict): qq = int(event.get_user_id()) try: nickname = binding_map[qq] role = role_cache[nickname] await showall.send(gen_showall_text(role), ensure_private=True) await showall.send("已发送私聊消息~", at_sender=True) except KeyError: await showall.send("【%s】看起来还没绑定角色呢。输入.bind <角色名称> 进行绑定吧?" % event.sender.nickname) return
async def faq_local(bot: Bot, event: Event): raw_question = str(event.get_message()) question = raw_question.replace(' ', '') question = question.replace('\r\n', '') if question: reply, confidence = await test_local(question, event.is_tome()) if event.is_tome(): if confidence < config.CONFIDENCE: reply = '我现在还不太明白,但没关系,以后的我会变得更强呢!' reply = add_at(reply, event.get_user_id()) await faq.send(message.Message(reply))
async def give_okodokai(bot, event: Event): uid = event.get_user_id() if not lmt.check(uid): await bot.send(event, '明日はもう一つプレゼントをご用意してお待ちしますね', at_sender=True) return lmt.increase(uid) present = random.choice(login_presents) todo = random.choice(todo_list) await bot.send( event, f'\nおかえりなさいませ、きさま{R.img("priconne/kokkoro_stamp.png").cqcode}\n{present}を獲得しました\n私からのプレゼントです\n主人今天要{todo}吗?', at_sender=True)
async def handle_event(bot: Bot, event: Event, state: T_State): filename = str(event.get_user_id()) + str(random.randint(0, 10000)) + ".jpg" content = state["content"] at_ = f"[CQ:at,qq={event.get_user_id()}]" if len(content) >= 25: await luxun.finish(Message(at_ + " 太长了, 鲁迅说不完!")) else: await process_pic(content, filename) cqimg = f"[CQ:image,file=file:////root/qqBot/NothAmor-Bot/nothamor_bot/plugins/luxun_says/says_img/{filename}]" await luxun.finish(Message(cqimg))
async def handle_first_receive(bot: Bot, event: Event, state: T_State): user = event.get_user_id() at_ = "[CQ:at,qq={}]".format(user) replay = await get_randint() msg = at_ + " " + replay msg = Message(msg) # def _unescape(message: Message, segment: MessageSegment): # if segment.is_text(): # return message.append(unescape(str(segment))) # return message.append(segment) # msg = reduce(_unescape, msg, Message()) await rp.finish(message=msg)
def iterate_groups(bot: Bot, event: Event) -> Iterable[PermissionGroup]: # 特定用户 user = getattr(event, 'user_id', None) or event.get_user_id() group, _ = get('user', user) yield group # Bot超级用户 if event.get_user_id() in bot.config.superusers: group, _ = get('global', 'superuser') yield group # 所有用户 group, _ = get('global', 'anyone') yield group # 群组 if isinstance(event, GroupMessageEvent): # 用户在群组内的身份 if event.sender.role == 'admin': group, _ = get('global', 'group_admin') yield group elif event.sender.role == 'owner': group, _ = get('global', 'group_owner') yield group # 特定群组 group, _ = get('group', event.group_id) yield group # 所有群组 group, _ = get('global', 'group') yield group # 私聊 if isinstance(event, PrivateMessageEvent): group, _ = get('global', 'private') yield group
async def process_msg(bot: Bot, event: Event, enable: bool): try: args = event.get_plaintext().strip() if not args: msg = _GROUP_USAGE if isinstance( event, GroupMessageEvent) else _PRIVATE_USAGE raise ValueError('未找到参数。' + msg) args = args.split(' ') # 从群组内调用 if isinstance(event, GroupMessageEvent): succeed = set() failed = set() group_id = event.group_id services = args for sv_name in services: sv = Service.get_loaded_services().get(sv_name) if sv: await set_sv(sv, group_id, enable) succeed.add(sv_name) else: failed.add(sv_name) msg = '' if succeed: msg += '服务' + '、'.join([str(i) for i in succeed]) + \ '已启用' if enable else '已禁用' + '\n' if failed: msg += '不存在这些服务:' + '、'.join([str(i) for i in failed]) await bot.send(event, msg) # 私聊调用,需要superuser权限 elif isinstance(event, PrivateMessageEvent): if not is_superuser(event.get_user_id()): return parser = ArgParserPrivate(enable, args) await parser.run() msg = '' if parser.succeed: msg += '执行完毕。\n' if parser.failed: msg += '以下群组发生错误:\n' msg += '\n'.join( [f' {name}: {msg}\n' for name, msg in parser.failed]) + '\n' msg += _PRIVATE_USAGE await bot.send(event, msg) except ValueError as e: await bot.send(event, str(e))
async def handle(bot: Bot, event: Event, state: T_State): try: user_id = event.get_user_id() at_ = "[CQ:at,qq={}]".format(user_id) args = str(state["args"]).split() if len(args) == 1: await addEvent(user_id, args[0], add) elif len(args) == 2: await addEvent(args[0], args[1], add) else: await add.send(Message(ADD_ARGS_PROMPT)) except Exception as e: msg = f"Exception: {Exception}\n" msg += f"str(e): {str(e)}\nrepr(e): {repr(e)}\n" msg += f"traceback.format_exc(): {traceback.format_exc()}" await exception_log(bot, msg)
async def _(bot: Bot, event: Event, state: T_State): if not event.is_tome(): sender = event.get_user_id() qq = int(sender) msg = Message([{ 'type': 'at', 'data': { 'qq': sender } }, { 'type': 'text', 'data': { 'text': f'(简单算法版)你今天的人品是 {get_rp(qq)}%' } }]) await rp.send(msg)
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_event(bot: Bot, event: Event, state: T_State): try: thing = state["thing"] thing_array = thing.split(" ") if thing_array[0] != '提醒': thing_array.insert(0, '提醒') user = event.get_user_id() msg = await insert(user, thing_array[1] + " " + thing_array[2], thing_array[6], thing_array[5], thing_array[8], thing_array[3] + " " + thing_array[4], int(thing_array[7])) if msg: await add_remaind.send(Message("增加成功")) else: await add_remaind.send(Message("增加失败")) except Exception as e: print(e) await add_remaind.send(Message("发生错误,增加失败"))
async def handle_event(bot: Bot, event: Event, state: T_State): logger.debug('准备执行twqd') try: stu_nums = str(state["stu_nums"]).split() user_id = event.get_user_id() at_ = "[CQ:at,qq={}]".format(user_id) for stu_num in stu_nums: # TODO: stu_num check if not re.match('[0-9]{8,16}', stu_num): await twqd.send(Message(at_ + TWQD_ARGS_ERROR_PROMPT)) continue await tempReportEvent(at_, stu_num, twqd) except Exception as e: msg = f"Exception: {Exception}\n" msg += f"str(e): {str(e)}\nrepr(e): {repr(e)}\n" msg += f"traceback.format_exc(): {traceback.format_exc()}" await exception_log(bot, msg)
async def cmd_handler(self, bot: Bot, event: Event, state: T_State, matcher: Matcher, cmd=None): # get real command content cwd, msg, task = await self.cmd_run(bot=bot, event=event, state=state, matcher=matcher, cmd_replaced=cmd, empty_hint=True) if self.workspace_mode == WorkspaceMode.serial: queue = self.running_queues[cwd] task = queue.run(task) output = await task if self.reply_notify: if hasattr(event, "group_id") and hasattr(event, "message_id"): # reply Mode output = MessageSegment.reply(event.message_id) + output else: output = MessageSegment.at(event.get_user_id()) + "\n" + output extra_msgs = {} if self.hidden_result: extra_msgs.update({"message_type": "private"}) logger.info(f"{msg} ===> {output}") await matcher.send(output, **extra_msgs)
async def _(bot: Bot, event: Event, state: dict): argv = str(event.get_message()).strip().split(' ') argc = len(argv) if len(argv) != 1 and len(argv) != 3 and len(argv) != 4: await stat.send( "你这白痴又弄错命令格式了!给我记好了,正确的格式是.stat <技能/属性> <add|sub|set> <值> [触发时间(小时)]!" ) return role = None try: role = role_cache[binding_map[int(event.get_user_id())]] except KeyError: await stat.send("【%s】看起来还没绑定角色呢。输入.bind <角色名称> 进行绑定吧?" % (event.sender.nickname)) return if argc == 1: stat_name = argv[0] value, err = search_check(role, stat_name) if not err: await stat.send("未找到能力值【%s】!真的有这个能力吗?" % stat_name) return await stat.send( "【%s】的能力值【%s】为:%d/%d/%d" % (role['name'], stat_name, value, int(value / 2), int(value / 5))) return elif argc >= 3: time = 0 if argc == 4: time = int(argv[3]) m = {'add': 1, 'sub': 2, 'set': 0} try: op = m[argv[1]] except KeyError: await stat.send("看起来命令不支持【%s】这个操作呢~" % argv[1]) return s, e = stat_modify(role, argv[0], op, int(argv[2]), time) if not e: await stat.send("未找到能力值【%s】!真的有这个能力吗?" % argv[0]) else: if time == 0: await stat.send(s) else: await stat.send("【%s】的【%s】会在%d小时后发生变化~" % (role['name'], argv[0], time))
async def _(bot: Bot, event: Event, state: T_State): qq = int(event.get_user_id()) h = hash(qq) rp = h % 100 wm_value = [] for i in range(11): wm_value.append(h & 3) h >>= 2 s = f"今日人品值:{rp}\n" for i in range(11): if wm_value[i] == 3: s += f'宜 {wm_list[i]}\n' elif wm_value[i] == 0: s += f'忌 {wm_list[i]}\n' s += "千雪提醒您:打机时不要大力拍打或滑动哦\n今日推荐歌曲:" music = total_list[h % len(total_list)] await jrwm.finish(Message([ {"type": "text", "data": {"text": s}} ] + song_txt(music)))