From f0601acbe9f58e9b1536ff48b7dd3ac9b1d529c4 Mon Sep 17 00:00:00 2001 From: passthem Date: Wed, 13 May 2026 15:06:49 +0800 Subject: [PATCH] oyasumi --- konabot/common/permsys/__init__.py | 16 ++++++++ konabot/plugins/oyasumi/__init__.py | 62 +++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 konabot/plugins/oyasumi/__init__.py diff --git a/konabot/common/permsys/__init__.py b/konabot/common/permsys/__init__.py index 6c5b82b..91f802c 100644 --- a/konabot/common/permsys/__init__.py +++ b/konabot/common/permsys/__init__.py @@ -113,6 +113,22 @@ def register_default_allow_permission(key: str): def require_permission(perm: str) -> Rule: # pragma: no cover + """ + `require_permission` 是一个 Nonebot 规则,可以用来要求一个 Nonebot 的指令需 + 要拥有一定的权限。 + + ```python + from konabot.common.permsys import require_permission + from nonebot import on_command + + cmd = on_command("kz", rule=require_permission("kagami.kz")) + + @cmd.handle() + async def _(): + await cmd.finish("你抓到了普通pt") + ``` + """ + async def check_permission(event: Event, pm: DepPermManager) -> bool: return await pm.check_has_permission(event, perm) diff --git a/konabot/plugins/oyasumi/__init__.py b/konabot/plugins/oyasumi/__init__.py new file mode 100644 index 0000000..14bff90 --- /dev/null +++ b/konabot/plugins/oyasumi/__init__.py @@ -0,0 +1,62 @@ +import random +from nonebot import on_command +from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent +from nonebot.rule import to_me +from nonebot_plugin_alconna import UniMessage +from konabot.common.permsys import require_permission + + +async def make_sleep(event: GroupMessageEvent, bot: Bot, duration: int): + """ + 让人睡着 + """ + + await bot.set_group_ban( + group_id=event.group_id, + user_id=event.user_id, + duration=duration, + ) + + seconds = duration % 60 + minutes = (duration // 60) % 60 + hours = duration // 3600 + + message = f" 晚安!已获得 {hours} 小时 {minutes} 分钟 {seconds} 秒的睡眠💤" + message = UniMessage.at(str(event.user_id)).text(message) + + await message.send(target=event, bot=bot) + + +cmd_sleep_night = on_command( + "此方晚安", + rule=require_permission("oyasumi") & to_me(), + aliases={"晚安"}, +) + + +@cmd_sleep_night.handle() +async def oyasumi(event: GroupMessageEvent, bot: Bot): + """ + 限定只能用 GroupMessageEvent,因为它只能在 QQ 群中使用 + """ + + # 考虑到有人是熬夜很久,所以这里就给一个 3 到 5 小时睡眠的随机数。这个时间内 + # 要睡不着我觉得是个小概率事件了! + + duration = random.randint(3 * 3600, 5 * 3600) + await make_sleep(event, bot, duration) + await cmd_sleep_night.finish() + + +cmd_sleep_noon = on_command( + "此方午安", + rule=require_permission("oyasumi") & to_me(), + aliases={"午安"}, +) + + +@cmd_sleep_noon.handle() +async def sleep_noon(event: GroupMessageEvent, bot: Bot): + duration = random.randint(60 * 15, 60 * 30) + await make_sleep(event, bot, duration) + await cmd_sleep_night.finish()