mirror of
https://github.com/TriM-Organization/LiteyukiBot-TriM.git
synced 2024-12-01 09:44:44 +08:00
status适配satori
This commit is contained in:
parent
7abdac7c9c
commit
eaf57f2c33
@ -5,12 +5,18 @@ from liteyuki.utils.base.ly_typing import T_MessageEvent
|
|||||||
from liteyuki.utils import satori_utils
|
from liteyuki.utils import satori_utils
|
||||||
from nonebot.adapters import satori
|
from nonebot.adapters import satori
|
||||||
from nonebot_plugin_alconna.typings import Event
|
from nonebot_plugin_alconna.typings import Event
|
||||||
|
from liteyuki.plugins.liteyuki_status.counter_for_satori import satori_counter
|
||||||
|
|
||||||
|
|
||||||
@event_preprocessor
|
@event_preprocessor
|
||||||
async def pre_handle(event: Event):
|
async def pre_handle(event: Event):
|
||||||
print("UPDATE_USER")
|
print("UPDATE_USER")
|
||||||
|
print(event.__dict__)
|
||||||
if isinstance(event, satori.MessageEvent):
|
if isinstance(event, satori.MessageEvent):
|
||||||
|
if event.user.id == event.self_id:
|
||||||
|
satori_counter.msg_sent += 1
|
||||||
|
else:
|
||||||
|
satori_counter.msg_received += 1
|
||||||
if event.user.name is not None:
|
if event.user.name is not None:
|
||||||
await satori_utils.user_infos.put(event.user)
|
await satori_utils.user_infos.put(event.user)
|
||||||
print(event.user)
|
print(event.user)
|
||||||
|
@ -9,7 +9,21 @@ from liteyuki.utils.message.npl import convert_seconds_to_time
|
|||||||
from contextvars import ContextVar
|
from contextvars import ContextVar
|
||||||
|
|
||||||
|
|
||||||
async def get_stat_msg_image(duration: int, period: int, group_id: str = None, bot_id: str = None, ulang: Language = Language()) -> bytes:
|
async def count_msg_by_bot_id(bot_id: str) -> int:
|
||||||
|
condition = " AND bot_id = ?"
|
||||||
|
condition_args = [bot_id]
|
||||||
|
|
||||||
|
msg_rows = msg_db.where_all(
|
||||||
|
MessageEventModel(),
|
||||||
|
condition,
|
||||||
|
*condition_args
|
||||||
|
)
|
||||||
|
|
||||||
|
return len(msg_rows)
|
||||||
|
|
||||||
|
|
||||||
|
async def get_stat_msg_image(duration: int, period: int, group_id: str = None, bot_id: str = None,
|
||||||
|
ulang: Language = Language()) -> bytes:
|
||||||
"""
|
"""
|
||||||
获取统计消息
|
获取统计消息
|
||||||
Args:
|
Args:
|
||||||
|
@ -6,15 +6,22 @@ from nonebot.message import event_postprocessor
|
|||||||
from liteyuki.utils.base.data import Database, LiteModel
|
from liteyuki.utils.base.data import Database, LiteModel
|
||||||
from liteyuki.utils.base.ly_typing import v11, satori
|
from liteyuki.utils.base.ly_typing import v11, satori
|
||||||
|
|
||||||
|
from liteyuki.utils.base.ly_typing import T_Bot, T_MessageEvent
|
||||||
|
|
||||||
from .common import MessageEventModel, msg_db
|
from .common import MessageEventModel, msg_db
|
||||||
|
from ...utils import satori_utils
|
||||||
|
|
||||||
require("nonebot_plugin_alconna")
|
require("nonebot_plugin_alconna")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@event_postprocessor
|
@event_postprocessor
|
||||||
|
async def general_event_monitor(bot: T_Bot, event: T_MessageEvent):
|
||||||
|
if isinstance(bot, satori.Bot):
|
||||||
|
return await satori_event_monitor(bot, event)
|
||||||
|
else:
|
||||||
|
return await onebot_v11_event_monitor(bot, event)
|
||||||
|
|
||||||
|
|
||||||
async def onebot_v11_event_monitor(bot: v11.Bot, event: v11.MessageEvent):
|
async def onebot_v11_event_monitor(bot: v11.Bot, event: v11.MessageEvent):
|
||||||
if event.message_type == "group":
|
if event.message_type == "group":
|
||||||
event: v11.GroupMessageEvent
|
event: v11.GroupMessageEvent
|
||||||
@ -56,6 +63,6 @@ async def satori_event_monitor(bot: satori.Bot, event: satori.MessageEvent):
|
|||||||
|
|
||||||
message=event.message,
|
message=event.message,
|
||||||
message_text=event.message.content,
|
message_text=event.message.content,
|
||||||
message_type=event.message_type,
|
message_type=satori_utils.get_message_type(event),
|
||||||
)
|
)
|
||||||
msg_db.save(mem)
|
msg_db.save(mem)
|
||||||
|
@ -5,12 +5,16 @@ import nonebot
|
|||||||
import psutil
|
import psutil
|
||||||
from cpuinfo import cpuinfo
|
from cpuinfo import cpuinfo
|
||||||
from nonebot import require
|
from nonebot import require
|
||||||
|
from nonebot.adapters import satori
|
||||||
|
|
||||||
from liteyuki.utils import __NAME__, __VERSION__
|
from liteyuki.utils import __NAME__, __VERSION__
|
||||||
from liteyuki.utils.base.config import get_config
|
from liteyuki.utils.base.config import get_config
|
||||||
from liteyuki.utils.base.data_manager import TempConfig, common_db
|
from liteyuki.utils.base.data_manager import TempConfig, common_db
|
||||||
from liteyuki.utils.base.language import Language
|
from liteyuki.utils.base.language import Language
|
||||||
from liteyuki.utils.base.resource import get_loaded_resource_packs, get_path
|
from liteyuki.utils.base.resource import get_loaded_resource_packs, get_path
|
||||||
from liteyuki.utils.message.html_tool import template2image
|
from liteyuki.utils.message.html_tool import template2image
|
||||||
|
from liteyuki.utils import satori_utils
|
||||||
|
from .counter_for_satori import satori_counter
|
||||||
|
|
||||||
require("nonebot_plugin_apscheduler")
|
require("nonebot_plugin_apscheduler")
|
||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
@ -77,7 +81,8 @@ async def refresh_status_card():
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def generate_status_card(bot: dict, hardware: dict, liteyuki: dict, lang="zh-CN", bot_id="0", use_cache=False) -> bytes:
|
async def generate_status_card(bot: dict, hardware: dict, liteyuki: dict, lang="zh-CN", bot_id="0",
|
||||||
|
use_cache=False) -> bytes:
|
||||||
if not use_cache:
|
if not use_cache:
|
||||||
return await template2image(
|
return await template2image(
|
||||||
get_path("templates/status.html", abs_path=True),
|
get_path("templates/status.html", abs_path=True),
|
||||||
@ -143,6 +148,16 @@ async def get_bots_data(self_id: str = "0") -> dict:
|
|||||||
status = {}
|
status = {}
|
||||||
bot_name = bot_id
|
bot_name = bot_id
|
||||||
version_info = {}
|
version_info = {}
|
||||||
|
if isinstance(bot, satori.Bot):
|
||||||
|
try:
|
||||||
|
bot_name = (await satori_utils.user_infos.get(bot.self_id)).name
|
||||||
|
groups = str(await satori_utils.count_groups(bot))
|
||||||
|
friends = str(await satori_utils.count_friends(bot))
|
||||||
|
status = {}
|
||||||
|
version_info = await bot.get_version_info()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
try:
|
try:
|
||||||
# API fetch
|
# API fetch
|
||||||
bot_name = (await bot.get_login_info())["nickname"]
|
bot_name = (await bot.get_login_info())["nickname"]
|
||||||
@ -157,6 +172,9 @@ async def get_bots_data(self_id: str = "0") -> dict:
|
|||||||
app_name = version_info.get("app_name", "UnknownImplementation")
|
app_name = version_info.get("app_name", "UnknownImplementation")
|
||||||
if app_name in ["Lagrange.OneBot", "LLOneBot", "Shamrock"]:
|
if app_name in ["Lagrange.OneBot", "LLOneBot", "Shamrock"]:
|
||||||
icon = f"https://q.qlogo.cn/g?b=qq&nk={bot_id}&s=640"
|
icon = f"https://q.qlogo.cn/g?b=qq&nk={bot_id}&s=640"
|
||||||
|
elif isinstance(bot, satori.Bot):
|
||||||
|
app_name = "Satori"
|
||||||
|
icon = (await bot.login_get()).user.avatar
|
||||||
else:
|
else:
|
||||||
icon = None
|
icon = None
|
||||||
bot_data = {
|
bot_data = {
|
||||||
@ -166,8 +184,8 @@ async def get_bots_data(self_id: str = "0") -> dict:
|
|||||||
"protocol_name": protocol_names.get(version_info.get("protocol_name"), "Online"),
|
"protocol_name": protocol_names.get(version_info.get("protocol_name"), "Online"),
|
||||||
"groups": groups,
|
"groups": groups,
|
||||||
"friends": friends,
|
"friends": friends,
|
||||||
"message_sent" : statistics.get("message_sent", 0),
|
"message_sent": satori_counter.msg_sent if isinstance(bot, satori.Bot) else statistics.get("message_sent", 0),
|
||||||
"message_received": statistics.get("message_received", 0),
|
"message_received": satori_counter.msg_received if isinstance(bot, satori.Bot) else statistics.get("message_received", 0),
|
||||||
"app_name": app_name
|
"app_name": app_name
|
||||||
}
|
}
|
||||||
result["bots"].append(bot_data)
|
result["bots"].append(bot_data)
|
||||||
|
10
liteyuki/plugins/liteyuki_status/counter_for_satori.py
Normal file
10
liteyuki/plugins/liteyuki_status/counter_for_satori.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
class SatoriCounter:
|
||||||
|
msg_sent: int
|
||||||
|
msg_received: int
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.msg_sent = 0
|
||||||
|
self.msg_received = 0
|
||||||
|
|
||||||
|
|
||||||
|
satori_counter = SatoriCounter()
|
@ -4,6 +4,7 @@ from liteyuki.utils.base.resource import get_path
|
|||||||
from liteyuki.utils.message.html_tool import template2image
|
from liteyuki.utils.message.html_tool import template2image
|
||||||
from liteyuki.utils.base.language import get_user_lang
|
from liteyuki.utils.base.language import get_user_lang
|
||||||
from .api import *
|
from .api import *
|
||||||
|
from ...utils import satori_utils
|
||||||
from ...utils.base.ly_typing import T_Bot, T_MessageEvent
|
from ...utils.base.ly_typing import T_Bot, T_MessageEvent
|
||||||
|
|
||||||
require("nonebot_plugin_alconna")
|
require("nonebot_plugin_alconna")
|
||||||
@ -27,7 +28,7 @@ status_alc = on_alconna(
|
|||||||
|
|
||||||
@status_alc.handle()
|
@status_alc.handle()
|
||||||
async def _(event: T_MessageEvent, bot: T_Bot):
|
async def _(event: T_MessageEvent, bot: T_Bot):
|
||||||
ulang = get_user_lang(event.user_id)
|
ulang = get_user_lang(satori_utils.get_user_id(event))
|
||||||
if ulang.lang_code in status_card_cache:
|
if ulang.lang_code in status_card_cache:
|
||||||
image = status_card_cache[ulang.lang_code]
|
image = status_card_cache[ulang.lang_code]
|
||||||
else:
|
else:
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
from .user_info import user_infos
|
from .user_info import user_infos
|
||||||
from .get_message_type import get_message_type
|
from .get_message_type import get_message_type
|
||||||
from .event_tools import *
|
from .event_tools import *
|
||||||
|
from .count_friends import count_friends
|
||||||
|
from .count_groups import count_groups
|
||||||
|
13
liteyuki/utils/satori_utils/count_friends.py
Normal file
13
liteyuki/utils/satori_utils/count_friends.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
from nonebot.adapters import satori
|
||||||
|
|
||||||
|
|
||||||
|
async def count_friends(bot: satori.Bot) -> int:
|
||||||
|
cnt: int = 0
|
||||||
|
|
||||||
|
friend_response = await bot.friend_list()
|
||||||
|
while friend_response.next is not None:
|
||||||
|
cnt += len(friend_response.data)
|
||||||
|
friend_response = await bot.friend_list(next_token=friend_response.next)
|
||||||
|
|
||||||
|
cnt += len(friend_response.data)
|
||||||
|
return cnt - 1
|
13
liteyuki/utils/satori_utils/count_groups.py
Normal file
13
liteyuki/utils/satori_utils/count_groups.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
from nonebot.adapters import satori
|
||||||
|
|
||||||
|
|
||||||
|
async def count_groups(bot: satori.Bot) -> int:
|
||||||
|
cnt: int = 0
|
||||||
|
|
||||||
|
group_response = await bot.guild_list()
|
||||||
|
while group_response.next is not None:
|
||||||
|
cnt += len(group_response.data)
|
||||||
|
group_response = await bot.friend_list(next_token=group_response.next)
|
||||||
|
|
||||||
|
cnt += len(group_response.data)
|
||||||
|
return cnt - 1
|
Loading…
Reference in New Issue
Block a user