Files
HeXi/hexi/plugins/nonebot_plugin_group_tools/handlers/management/dragon.py
T
sansenhoshiandClaude 9371a28e35 refactor: restructure plugins per MTSS standard, consolidate assets to res/
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>
2026-09-03 00:44:38 +08:00

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()