from nonebot import Bot, require from liteyuki.utils.message.npl import convert_duration, convert_time_to_seconds from .stat_api import * from liteyuki.utils import event as event_utils from liteyuki.utils.base.language import Language from liteyuki.utils.base.ly_typing import T_MessageEvent require("nonebot_plugin_alconna") from nonebot_plugin_alconna import UniMessage, on_alconna, Alconna, Args, Subcommand, Arparma, Option stat_msg = on_alconna( Alconna( "statistic", Subcommand( "message", # Args["duration", str, "2d"]["period", str, "60s"], # 默认为1天 Option( "-d|--duration", Args["duration", str, "2d"], help_text="统计时间", ), Option( "-p|--period", Args["period", str, "60s"], help_text="统计周期", ), Option( "-b|--bot", # 生成图表 Args["bot_id", str, "current"], help_text="是否指定机器人", ), Option( "-g|--group", Args["group_id", str, "current"], help_text="指定群组" ), Option( "-u|--user", Args["user_id", str, "current"], help_text="指定用户" ), alias={"msg", "m"}, help_text="查看统计次数内的消息" ) ), aliases={"stat"} ) @stat_msg.assign("message") async def _(result: Arparma, event: T_MessageEvent, bot: Bot): ulang = Language(event_utils.get_user_id(event)) try: duration = convert_time_to_seconds(result.other_args.get("duration", "2d")) # 秒数 period = convert_time_to_seconds(result.other_args.get("period", "1m")) except BaseException as e: await stat_msg.send(ulang.get("liteyuki.invalid_command", TEXT=str(e.__str__()))) return group_id = result.other_args.get("group_id") bot_id = result.other_args.get("bot_id") user_id = result.other_args.get("user_id") if group_id in ["current", "c"]: group_id = str(event_utils.get_group_id(event)) if group_id in ["all", "a"]: group_id = "all" if bot_id in ["current", "c"]: bot_id = str(bot.self_id) if user_id in ["current", "c"]: user_id = str(event_utils.get_user_id(event)) img = await get_stat_msg_image(duration=duration, period=period, group_id=group_id, bot_id=bot_id, user_id=user_id, ulang=ulang) await stat_msg.send(UniMessage.image(raw=img))