"""随机 JM 码 —— 触发器(Trigger)层。""" from __future__ import annotations import random from nonebot import logger from nonebot.adapters import Event from nonebot.adapters.onebot.v11 import PokeNotifyEvent from nonebot.matcher import Matcher from nonebot.plugin import PluginMetadata from nonebot.plugin.on import on_notice, on_command from nonebot.rule import to_me from nonebot_plugin_alconna import UniMessage, get_target from hexi.plugins.nonebot_plugin_hexi_core.message_utils import send_poke from .. import config as _cfg from ..services.store import add_new_jm_code, get_random_jm_code __plugin_meta__ = PluginMetadata( name="随机JM码", description="随机发送JM码,支持添加与屏蔽", usage="@bot 触发随机JM码;jm 添加JM码", type="application", ) jm_handler = on_notice(priority=10, block=False, rule=to_me()) add_jm_code = on_command("jm", rule=to_me()) @add_jm_code.handle() async def add_more_jm_code(event: Event, matcher: Matcher): input_code = event.get_message().extract_plain_text().strip() cmd = matcher.state["_prefix"]["command"][0] input_code = input_code.replace(cmd, "") if input_code in _cfg.BLOCK_CODE: await UniMessage.at(event.get_user_id()).text(" 不准发石!!").send() return await add_new_jm_code(input_code) await UniMessage.reply(event.get_user_id()).text(" 添加成功").send() return @jm_handler.handle() async def random_jm_code(event: Event, poke_event: PokeNotifyEvent): user_id = event.get_user_id() logger.info(f"{user_id}触发了戳一戳") target = get_target(event) group_id = target.parent_id or target.id or poke_event.group_id logger.info(f"触发戳一戳的群聊:{group_id}") if group_id in _cfg.WHITE_LIST: logger.info(f"白名单:{group_id}") choice = random.randint(0, 100) logger.info(f"触发概率:{choice}") if choice >= 50: await poke_reply(event) else: logger.info("不做操作") else: logger.info(f"不在白名单:{group_id}") if target.private: group_id = None result = await send_poke(group_id=group_id, user_id=user_id) logger.info(result) return async def poke_reply(event: Event): user_id = event.get_user_id() jm_message = await get_random_jm_code() await UniMessage.at(user_id).text(" " + jm_message).send()