mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
refactor(nickname): 使用 nonebot_plugin_alconna 重构昵称设置功能
- 替换 on_regex 为 on_alconna,实现更灵活的命令解析 - 重构 CheckNickname 函数,改为异步函数并直接处理逻辑 - 更新昵称设置流程,提高代码可读性和维护性 - 优化消息回复逻辑,提升用户体验 - 优化昵称设置命令,防止误触发
This commit is contained in:
parent
8b9ae7255b
commit
6bb9a15634
@ -1,12 +1,18 @@
|
|||||||
import random
|
import random
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from nonebot import on_regex
|
|
||||||
from nonebot.adapters import Bot
|
from nonebot.adapters import Bot
|
||||||
from nonebot.params import Depends, RegexGroup
|
from nonebot.params import Depends
|
||||||
from nonebot.plugin import PluginMetadata
|
from nonebot.plugin import PluginMetadata
|
||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
from nonebot_plugin_alconna import Alconna, Option, on_alconna, store_true
|
from nonebot_plugin_alconna import (
|
||||||
|
Alconna,
|
||||||
|
Args,
|
||||||
|
Arparma,
|
||||||
|
CommandMeta,
|
||||||
|
Option,
|
||||||
|
on_alconna,
|
||||||
|
store_true,
|
||||||
|
)
|
||||||
from nonebot_plugin_uninfo import Uninfo
|
from nonebot_plugin_uninfo import Uninfo
|
||||||
|
|
||||||
from zhenxun.configs.config import BotConfig, Config
|
from zhenxun.configs.config import BotConfig, Config
|
||||||
@ -54,15 +60,22 @@ __plugin_meta__ = PluginMetadata(
|
|||||||
).to_dict(),
|
).to_dict(),
|
||||||
)
|
)
|
||||||
|
|
||||||
_nickname_matcher = on_regex(
|
_nickname_matcher = on_alconna(
|
||||||
"(?:以后)?(?:叫我|请叫我|称呼我)(.*)",
|
Alconna(
|
||||||
|
"re:(?:以后)?(?:叫我|请叫我|称呼我)",
|
||||||
|
Args["name?", str],
|
||||||
|
meta=CommandMeta(compact=True),
|
||||||
|
),
|
||||||
rule=to_me(),
|
rule=to_me(),
|
||||||
priority=5,
|
priority=5,
|
||||||
block=True,
|
block=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
_global_nickname_matcher = on_regex(
|
_global_nickname_matcher = on_alconna(
|
||||||
"设置全局昵称(.*)", rule=to_me(), priority=5, block=True
|
Alconna("设置全局昵称", Args["name?", str], meta=CommandMeta(compact=True)),
|
||||||
|
rule=to_me(),
|
||||||
|
priority=5,
|
||||||
|
block=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
_matcher = on_alconna(
|
_matcher = on_alconna(
|
||||||
@ -117,34 +130,32 @@ CANCEL = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def CheckNickname():
|
async def CheckNickname(
|
||||||
|
bot: Bot,
|
||||||
|
session: Uninfo,
|
||||||
|
params: Arparma,
|
||||||
|
):
|
||||||
"""
|
"""
|
||||||
检查名称是否合法
|
检查名称是否合法
|
||||||
"""
|
"""
|
||||||
|
black_word = Config.get_config("nickname", "BLACK_WORD")
|
||||||
async def dependency(
|
name = params.query("name")
|
||||||
bot: Bot,
|
logger.debug(f"昵称检查: {name}", "昵称设置", session=session)
|
||||||
session: Uninfo,
|
if not name:
|
||||||
reg_group: tuple[Any, ...] = RegexGroup(),
|
await MessageUtils.build_message("叫你空白?叫你虚空?叫你无名??").finish(
|
||||||
):
|
at_sender=True
|
||||||
black_word = Config.get_config("nickname", "BLACK_WORD")
|
)
|
||||||
(name,) = reg_group
|
if session.user.id in bot.config.superusers:
|
||||||
logger.debug(f"昵称检查: {name}", "昵称设置", session=session)
|
logger.debug(
|
||||||
if not name:
|
f"超级用户设置昵称, 跳过合法检测: {name}", "昵称设置", session=session
|
||||||
await MessageUtils.build_message("叫你空白?叫你虚空?叫你无名??").finish(
|
)
|
||||||
at_sender=True
|
else:
|
||||||
)
|
|
||||||
if session.user.id in bot.config.superusers:
|
|
||||||
logger.debug(
|
|
||||||
f"超级用户设置昵称, 跳过合法检测: {name}", "昵称设置", session=session
|
|
||||||
)
|
|
||||||
return
|
|
||||||
if len(name) > 20:
|
if len(name) > 20:
|
||||||
await MessageUtils.build_message("昵称可不能超过20个字!").finish(
|
await MessageUtils.build_message("昵称可不能超过20个字!").finish(
|
||||||
at_sender=True
|
at_sender=True
|
||||||
)
|
)
|
||||||
if name in bot.config.nickname:
|
if name in bot.config.nickname:
|
||||||
await MessageUtils.build_message("笨蛋!休想占用我的名字! #").finish(
|
await MessageUtils.build_message("笨蛋!休想占用我的名字! ").finish(
|
||||||
at_sender=True
|
at_sender=True
|
||||||
)
|
)
|
||||||
if black_word:
|
if black_word:
|
||||||
@ -162,17 +173,17 @@ def CheckNickname():
|
|||||||
await MessageUtils.build_message(
|
await MessageUtils.build_message(
|
||||||
f"字符 [{word}] 为禁止字符!"
|
f"字符 [{word}] 为禁止字符!"
|
||||||
).finish(at_sender=True)
|
).finish(at_sender=True)
|
||||||
|
return name
|
||||||
return Depends(dependency)
|
|
||||||
|
|
||||||
|
|
||||||
@_nickname_matcher.handle(parameterless=[CheckNickname()])
|
@_nickname_matcher.handle()
|
||||||
async def _(
|
async def _(
|
||||||
|
bot: Bot,
|
||||||
session: Uninfo,
|
session: Uninfo,
|
||||||
|
name_: Arparma,
|
||||||
uname: str = UserName(),
|
uname: str = UserName(),
|
||||||
reg_group: tuple[Any, ...] = RegexGroup(),
|
|
||||||
):
|
):
|
||||||
(name,) = reg_group
|
name = await CheckNickname(bot, session, name_)
|
||||||
if len(name) < 5 and random.random() < 0.3:
|
if len(name) < 5 and random.random() < 0.3:
|
||||||
name = "~".join(name)
|
name = "~".join(name)
|
||||||
group_id = None
|
group_id = None
|
||||||
@ -200,13 +211,14 @@ async def _(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@_global_nickname_matcher.handle(parameterless=[CheckNickname()])
|
@_global_nickname_matcher.handle()
|
||||||
async def _(
|
async def _(
|
||||||
|
bot: Bot,
|
||||||
session: Uninfo,
|
session: Uninfo,
|
||||||
|
name_: Arparma,
|
||||||
nickname: str = UserName(),
|
nickname: str = UserName(),
|
||||||
reg_group: tuple[Any, ...] = RegexGroup(),
|
|
||||||
):
|
):
|
||||||
(name,) = reg_group
|
name = await CheckNickname(bot, session, name_)
|
||||||
await FriendUser.set_user_nickname(
|
await FriendUser.set_user_nickname(
|
||||||
session.user.id,
|
session.user.id,
|
||||||
name,
|
name,
|
||||||
@ -227,15 +239,14 @@ async def _(session: Uninfo, uname: str = UserName()):
|
|||||||
group_id = session.group.parent.id if session.group.parent else session.group.id
|
group_id = session.group.parent.id if session.group.parent else session.group.id
|
||||||
if group_id:
|
if group_id:
|
||||||
nickname = await GroupInfoUser.get_user_nickname(session.user.id, group_id)
|
nickname = await GroupInfoUser.get_user_nickname(session.user.id, group_id)
|
||||||
card = uname
|
|
||||||
else:
|
else:
|
||||||
nickname = await FriendUser.get_user_nickname(session.user.id)
|
nickname = await FriendUser.get_user_nickname(session.user.id)
|
||||||
card = uname
|
|
||||||
if nickname:
|
if nickname:
|
||||||
await MessageUtils.build_message(random.choice(REMIND).format(nickname)).finish(
|
await MessageUtils.build_message(random.choice(REMIND).format(nickname)).finish(
|
||||||
reply_to=True
|
reply_to=True
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
card = uname
|
||||||
await MessageUtils.build_message(
|
await MessageUtils.build_message(
|
||||||
random.choice(
|
random.choice(
|
||||||
[
|
[
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user