diff --git a/konabot/plugins/nya_echo/__init__.py b/konabot/plugins/nya_echo/__init__.py index cce5a62..fe6f07d 100644 --- a/konabot/plugins/nya_echo/__init__.py +++ b/konabot/plugins/nya_echo/__init__.py @@ -1,10 +1,58 @@ from nonebot import on_message -from nonebot_plugin_alconna import UniMessage +from nonebot.internal.adapter import Event +from nonebot_plugin_alconna import UniMessage, UniMsg, Text from konabot.common.nb.match_keyword import match_keyword -evt = on_message(rule=match_keyword("喵")) +evt_nya = on_message(rule=match_keyword("喵")) -@evt.handle() +@evt_nya.handle() async def _(): - await evt.send(await UniMessage().text("喵").export()) + await evt_nya.send(await UniMessage().text("喵").export()) + + +NYA_SYMBOL_MAPPING = { + "喵": "喵", + "!": "!", + "?": "!", + "!": "!", + "?": "!", + ",": ",", + ",": ",", + ".": ".", + "。": "。", + "…": "…", + "~": "~", + "~": "~", + " ": " ", + "\n": "\n", +} + + +async def has_nya(msg: UniMsg) -> bool: + if any((not isinstance(seg, Text) for seg in msg)): + return False + + text = msg.extract_plain_text() + + if len(text) <= 1: + return False + + if "喵" not in text: + return False + + if any(((char not in NYA_SYMBOL_MAPPING) for char in text)): + return False + + return True + + +evt_nya_v2 = on_message(rule=has_nya) + +@evt_nya_v2.handle() +async def _(msg: UniMsg, evt: Event): + text = msg.extract_plain_text() + await UniMessage.text(''.join( + (NYA_SYMBOL_MAPPING.get(c, '') for c in text) + )).send(evt) +