Files
konabot/konabot/plugins/tqszm/__init__.py
passthem bd71a8d75f
All checks were successful
continuous-integration/drone/push Build is passing
黑白子说要 at 才能用太麻烦了
2025-12-15 18:51:27 +08:00

73 lines
2.5 KiB
Python

"""
提取首字母
...谁需要啊!!!
"""
import functools
from loguru import logger
from nonebot import on_message
from nonebot.rule import KeywordsRule, Rule
from nonebot.adapters.onebot.v11.bot import Bot as OBBot
from nonebot.adapters.onebot.v11.event import MessageEvent as OBMessageEvent
from nonebot.adapters.onebot.v11.message import MessageSegment as OBMessageSegment
from nonebot_plugin_alconna import Text, UniMsg
from nonebot_plugin_alconna.uniseg.adapters.onebot11.builder import Onebot11MessageBuilder
from pypinyin import pinyin, Style as PinyinStyle
from konabot.common.longtask import DepLongTaskTarget
from konabot.common.apis.ali_content_safety import AlibabaGreen
keywords = ("szmtq", "tqszm", "提取首字母", "首字母提取", )
rule = Rule(KeywordsRule(*keywords))
cmd_tqszm = on_message(rule=rule)
@cmd_tqszm.handle()
async def _(target: DepLongTaskTarget, msg: UniMsg, evt: OBMessageEvent | None = None, bot: OBBot | None = None):
texts = ""
command_occurred = False
is_reply_mode = False
if evt is not None and bot is not None:
reply = await Onebot11MessageBuilder().extract_reply(evt, bot)
if reply is not None:
is_reply_mode = True
for seg in reply.data.get('msg', []):
if isinstance(seg, OBMessageSegment) and seg.type == 'text':
segtext: str = seg.data.get('text', '')
texts += segtext
if is_reply_mode:
for seg in msg:
if isinstance(seg, Text):
if all(seg.text.strip() != k for k in keywords):
return
else:
for seg in msg:
if isinstance(seg, Text):
if command_occurred:
texts += seg.text
continue
if any(seg.text.startswith(w) for w in keywords):
command_occurred = True
texts += next(
seg.text.removeprefix(w) for w in keywords
if seg.text.startswith(w)
).removeprefix(" ")
result = pinyin(texts, style=PinyinStyle.FIRST_LETTER, errors=lambda x: x)
print(result)
result_text = functools.reduce(lambda x, y: x + y, [
p[0] for p in result if len(p) > 0
], "")
if not await AlibabaGreen.detect(result_text):
logger.info(f"对首字母序列的检测未通过安全测试 RAW={texts} FORMATTED={result_text}")
await target.send_message(result_text, at=False)