"""群管理工具 —— 龙王。""" 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()