Per docs/plugin-audit-report.md (plugins normalized to Trigger(handlers) → Service(services) → Model(repository/models) + utils): - Split monolithic __init__.py into handlers/services/utils across dailywife, deer_pipe, dice, galgame_card, helldivers_tools, huoziyinshua, learning_chat, makeaquote, mc_server_status, ncm_saying, picfinder_take, picstatus, random_jm_code, regif, steam_info, video_analysis, group_tools - Move static assets under res/: deer_pipe font/img, makeaquote font, helldivers img/templates, huoziyinshua HuoZiYinShua - Add config.py + register_config_items to ncm_saying, random_jm_code, group_tools; learning_chat unified config bridge - Remove deprecated: voice_trans plugin, bf_bot/test.py, dead code in dailywife/deer_pipe, empty dirs, debug scripts under helldivers temp - Disable brash_general_supercredits_tools (stub comment only) - bot.py: optional stdout/stderr redirect to log file for Web log viewer, force ANSI colorize on non-TTY sinks - Move runtime data (jm_code.json) out of plugin dir into hexi/data - Docs: plugin-audit-report.md; README reflects removed plugins Co-Authored-By: Claude <noreply@anthropic.com>
85 lines
3.1 KiB
Python
85 lines
3.1 KiB
Python
"""群管理工具 —— 龙王。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import random
|
|
import re
|
|
|
|
from nonebot import on_fullmatch, require
|
|
from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent
|
|
from nonebot_plugin_alconna import UniMessage
|
|
|
|
from ...constants import IMG_DIR
|
|
from ...utils.media import image_to_base64
|
|
from ...utils.permissions import honor_info, self_member_info
|
|
|
|
require("nonebot_plugin_alconna")
|
|
|
|
whois_dragon = on_fullmatch(("谁是龙王", "迫害龙王", "龙王是谁"))
|
|
dragon_list = on_fullmatch(("龙王榜", "龙王排行", "龙王排行榜", "龙王榜单"))
|
|
|
|
|
|
@whois_dragon.handle()
|
|
async def whois_dragon_handle(bot: Bot, ev: GroupMessageEvent):
|
|
gid = ev.group_id
|
|
self_info = await self_member_info(bot, gid)
|
|
sid = self_info["user_id"]
|
|
ta_info = await honor_info(bot, gid, "talkative")
|
|
if not ta_info or not ta_info.get("current_talkative"):
|
|
await UniMessage.text("本群没有开启龙王标志哦~").send()
|
|
return
|
|
dk = ta_info["current_talkative"]["user_id"]
|
|
if sid == dk:
|
|
pic = image_to_base64(IMG_DIR / "dk_is_me.jpg")
|
|
await (
|
|
UniMessage.text("你们这群丢人玩意,龙王怎么又是我\n")
|
|
.image(url=pic)
|
|
.send()
|
|
)
|
|
else:
|
|
action = random.choice(["龙王出来挨透", "龙王出来喷水"])
|
|
dk_avatar = ta_info["current_talkative"]["avatar"] + "640" + f"&t={dk}"
|
|
await (
|
|
UniMessage.at(user_id=str(dk))
|
|
.text(f"\n{action}\n")
|
|
.image(url=dk_avatar)
|
|
.send()
|
|
)
|
|
|
|
|
|
@dragon_list.handle()
|
|
async def dragon_list_handle(bot: Bot, ev: GroupMessageEvent):
|
|
gid = ev.group_id
|
|
ta_info = await honor_info(bot, gid, "talkative")
|
|
if not ta_info or not ta_info.get("talkative_list"):
|
|
await UniMessage.text("本群暂时没有龙王数据哦~").send()
|
|
return
|
|
dragon_king_list_info = ta_info["talkative_list"]
|
|
dkdir = {}
|
|
for item in dragon_king_list_info:
|
|
user_id = item["user_id"]
|
|
nickname = item["nickname"]
|
|
description = item["description"]
|
|
temp = re.findall(r"\d+", description)
|
|
dragon_king_days = int(temp[0])
|
|
dragon_king_days_continuous = int(temp[1])
|
|
dkdir[nickname] = {
|
|
"user_id": user_id,
|
|
"days_max": dragon_king_days,
|
|
"days_contin": dragon_king_days_continuous,
|
|
}
|
|
dkdir_sorted = sorted(dkdir.items(), key=lambda d: d[1]["days_max"], reverse=True)
|
|
dkk = dkdir_sorted[0][1]["user_id"]
|
|
msg = UniMessage.text(f"本群获得龙王次数最多的是:\n{dkdir_sorted[0][0]}\n")
|
|
dk_avatar = f"http://q1.qlogo.cn/g?b=qq&nk={dkk}&s=5"
|
|
msg += UniMessage.image(url=dk_avatar)
|
|
msg += UniMessage.text("\n本群龙王榜\n")
|
|
for i, it in enumerate(dkdir_sorted[:5]):
|
|
_nickname = it[0]
|
|
_days_max = it[1]["days_max"]
|
|
_days_contin = it[1]["days_contin"]
|
|
msg += UniMessage.text(
|
|
f"第{i + 1}名:{_nickname},共{_days_max}次,最长连续{_days_contin}天获得龙王\n"
|
|
)
|
|
await msg.send()
|