1
0
forked from bot/app

使用webp背景图压缩资源包大小

This commit is contained in:
2024-05-12 00:18:53 +08:00
parent afe501a06d
commit f9fe1922d4
54 changed files with 436 additions and 142 deletions

View File

@ -0,0 +1,21 @@
from nonebot.plugin import PluginMetadata
from .stat_matchers import *
from .stat_monitors import *
from .stat_restful_api import *
__author__ = "snowykami"
__plugin_meta__ = PluginMetadata(
name="统计信息",
description="统计机器人的信息",
usage=(
"stat msg [limit] 查看统计次数内的消息\n"
"stat msg -g|--group [group_id] 查看群的统计信息,不带参数为全群\n"
),
type="application",
homepage="https://github.com/snowykami/LiteyukiBot",
extra={
"liteyuki" : True,
"toggleable" : False,
"default_enable": True,
}
)

View File

@ -0,0 +1,21 @@
from liteyuki.internal.base.data import Database, LiteModel
class MessageEventModel(LiteModel):
TABLE_NAME: str = "message_event"
time: int = 0
bot_id: str = ""
adapter: str = ""
user_id: str = ""
group_id: str = ""
message_id: str = ""
message: list = []
message_text: str = ""
message_type: str = ""
msg_db = Database("data/liteyuki/msg.ldb")
msg_db.auto_migrate(MessageEventModel())

View File

@ -0,0 +1,33 @@
import time
from typing import Any
from .common import MessageEventModel, msg_db
def get_stat_msg_data(duration, period) -> tuple[list[int,], list[int,]]:
"""
获取统计消息
Args:
duration: 统计时间,单位秒
period: 统计周期,单位秒
Returns:
tuple: [int,], [int,] 两个列表,分别为周期中心时间戳和消息数量
"""
now = int(time.time())
msg_rows = msg_db.where_all(
MessageEventModel(),
"time > ?",
now - duration
)
timestamps = []
msg_count = []
msg_rows.sort(key=lambda x: x.time)
for msg_row in msg_rows:
period_center_time = msg_row.time - msg_row.time % period + period // 2
# if not timestamps or period_start_time != timestamps[-1]:
# timestamps.append(period_start_time)
# msg_count.append(1)
# else:
# msg_count[-1] += 1
#

View File

@ -0,0 +1,46 @@
from nonebot import require
from liteyuki.internal.message.npl import convert_duration
from .stat_api import *
require("nonebot_plugin_alconna")
from nonebot_plugin_alconna import on_alconna, Alconna, Args, Subcommand, Arparma, Option
stat_msg = on_alconna(
Alconna(
"stat",
Subcommand(
"message",
Args["duration", str, "1d"], # 默认为1天
Option(
"-b|--bot", # 生成图表
Args["bot_id", str, ""],
help_text="是否指定机器人",
),
Option(
"-g|--group",
Args["group_id", str, ""],
help_text="指定群组"
),
Option(
"-c|--chart", # 生成图表
help_text="是否生成图表",
),
alias={"msg", "m"},
help_text="查看统计次数内的消息"
)
)
)
@stat_msg.assign("message")
async def _(result: Arparma):
args = result.subcommands.get("message").args
options = result.subcommands.get("message").options
duration = convert_duration(args.get("duration"), 86400) # 秒数
enable_chart = options.get("chart")
if options.get("group"):
group_id = options["group"].args.get("group_id")
else:
msg_rows = get_stat_msg_data(duration)

View File

@ -0,0 +1,38 @@
import time
from nonebot import require
from nonebot.message import event_postprocessor
from liteyuki.internal.base.data import Database, LiteModel
from liteyuki.internal.base.ly_typing import v11
from .common import MessageEventModel, msg_db
require("nonebot_plugin_alconna")
@event_postprocessor
async def onebot_v11_event_monitor(bot: v11.Bot, event: v11.MessageEvent):
if event.message_type == "group":
event: v11.GroupMessageEvent
group_id = str(event.group_id)
else:
group_id = ""
mem = MessageEventModel(
time=int(time.time()),
bot_id=bot.self_id,
adapter="onebot.v11",
group_id=group_id,
user_id=str(event.user_id),
message_id=str(event.message_id),
message=event.message,
message_text=event.raw_message,
message_type=event.message_type,
)
msg_db.save(mem)