mirror of
https://github.com/Genshin-bots/gsuid_core.git
synced 2025-05-08 21:15:46 +08:00
✨ Core信息
增加更多数据
This commit is contained in:
parent
d0075562f0
commit
9fa322c662
BIN
gsuid_core/bg.png
Normal file
BIN
gsuid_core/bg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 MiB |
BIN
gsuid_core/fg.png
Normal file
BIN
gsuid_core/fg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
@ -41,7 +41,6 @@ def get_platform_val(bot_id: str, bot_self_id: str):
|
|||||||
bot_val[bot_id] = {}
|
bot_val[bot_id] = {}
|
||||||
if bot_self_id not in bot_val[bot_id]:
|
if bot_self_id not in bot_val[bot_id]:
|
||||||
bot_val[bot_id][bot_self_id] = deepcopy(platform_val)
|
bot_val[bot_id][bot_self_id] = deepcopy(platform_val)
|
||||||
|
|
||||||
return bot_val[bot_id][bot_self_id]
|
return bot_val[bot_id][bot_self_id]
|
||||||
|
|
||||||
|
|
||||||
@ -57,7 +56,7 @@ def get_all_bot_dict():
|
|||||||
|
|
||||||
|
|
||||||
async def get_value_analysis(
|
async def get_value_analysis(
|
||||||
bot_id: str, bot_self_id: str, day: int = 7
|
bot_id: str, bot_self_id: Optional[str], day: int = 7
|
||||||
) -> Dict[str, PlatformVal]:
|
) -> Dict[str, PlatformVal]:
|
||||||
'''顺序为最新的日期在前面'''
|
'''顺序为最新的日期在前面'''
|
||||||
result = {}
|
result = {}
|
||||||
@ -71,13 +70,18 @@ async def get_value_analysis(
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
async def get_global_analysis(bot_id: str, bot_self_id: str):
|
async def get_global_analysis(
|
||||||
|
bot_id: str,
|
||||||
|
bot_self_id: Optional[str],
|
||||||
|
):
|
||||||
seven_data = await get_value_analysis(bot_id, bot_self_id, 30)
|
seven_data = await get_value_analysis(bot_id, bot_self_id, 30)
|
||||||
|
|
||||||
group_data = []
|
group_data = []
|
||||||
user_data = []
|
user_data = []
|
||||||
|
|
||||||
user_list: List[List[str]] = []
|
user_list: List[List[str]] = []
|
||||||
|
group_list: List[List[str]] = []
|
||||||
|
group_all_list: List[str] = []
|
||||||
user_all_list: List[str] = []
|
user_all_list: List[str] = []
|
||||||
|
|
||||||
for day in seven_data:
|
for day in seven_data:
|
||||||
@ -86,23 +90,43 @@ async def get_global_analysis(bot_id: str, bot_self_id: str):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
_user_list = list(local_val['user'].keys())
|
_user_list = list(local_val['user'].keys())
|
||||||
|
_group_list = list(local_val['group'].keys())
|
||||||
|
|
||||||
user_list.append(_user_list)
|
user_list.append(_user_list)
|
||||||
user_all_list.extend(_user_list)
|
user_all_list.extend(_user_list)
|
||||||
|
group_list.append(_group_list)
|
||||||
|
group_all_list.extend(_group_list)
|
||||||
|
|
||||||
group_data.append(len(local_val['group']))
|
group_data.append(len(local_val['group']))
|
||||||
user_data.append(len(local_val['user']))
|
user_data.append(len(local_val['user']))
|
||||||
|
|
||||||
# 七天内的用户
|
# 七天内的用户
|
||||||
user_7_list = [user for users in user_list[:7] for user in users]
|
user_7_list = [user for users in user_list[:7] for user in users]
|
||||||
|
# 七天内的群组
|
||||||
|
group_7_list = [group for groups in group_list[:7] for group in groups]
|
||||||
|
|
||||||
# 昨日到三十日之前的用户
|
# 昨日到三十日之前的用户
|
||||||
user_after_list = [user for users in user_list[1:] for user in users]
|
user_after_list = [user for users in user_list[1:] for user in users]
|
||||||
|
# 昨日到三十日之前的群组
|
||||||
|
group_after_list = [group for groups in group_list[1:] for group in groups]
|
||||||
|
|
||||||
# 三十天内的用户没有在这七天出现过
|
# 三十天内的用户没有在这七天出现过
|
||||||
out_user = []
|
out_user = []
|
||||||
|
# 三十天内的群组没有在这七天出现过
|
||||||
|
out_group = []
|
||||||
# 今天的用户从来没在这个月内出现过
|
# 今天的用户从来没在这个月内出现过
|
||||||
new_user = []
|
new_user = []
|
||||||
|
# 今天的群组从来没在这个月内出现过
|
||||||
|
new_group = []
|
||||||
|
|
||||||
|
for i in group_all_list:
|
||||||
|
if i not in group_7_list:
|
||||||
|
out_group.append(i)
|
||||||
|
|
||||||
|
if group_list:
|
||||||
|
for i in group_list[0]:
|
||||||
|
if i not in group_after_list:
|
||||||
|
new_group.append(i)
|
||||||
|
|
||||||
for i in user_all_list:
|
for i in user_all_list:
|
||||||
if i not in user_7_list:
|
if i not in user_7_list:
|
||||||
@ -130,6 +154,12 @@ async def get_global_analysis(bot_id: str, bot_self_id: str):
|
|||||||
if len(_user_all_list) != 0
|
if len(_user_all_list) != 0
|
||||||
else "0.00%"
|
else "0.00%"
|
||||||
),
|
),
|
||||||
|
'NG': str(len(new_group)),
|
||||||
|
'OG': (
|
||||||
|
'{0:.2f}%'.format((len(out_group) / len(group_all_list)) * 100)
|
||||||
|
if len(group_all_list) != 0
|
||||||
|
else "0.00%"
|
||||||
|
),
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@ -157,9 +187,57 @@ async def save_all_global_val(day: int = 0):
|
|||||||
await save_global_val(bot_id, bot_self_id, day)
|
await save_global_val(bot_id, bot_self_id, day)
|
||||||
|
|
||||||
|
|
||||||
|
def merge_dict(dict1: PlatformVal, dict2: PlatformVal) -> PlatformVal:
|
||||||
|
result = dict1.copy()
|
||||||
|
|
||||||
|
for key, value in dict2.items():
|
||||||
|
if key in result:
|
||||||
|
if isinstance(value, (int, float)) and isinstance(
|
||||||
|
result[key], (int, float)
|
||||||
|
):
|
||||||
|
result[key] += value
|
||||||
|
elif isinstance(value, dict) and isinstance(result[key], dict):
|
||||||
|
result[key] = merge_dict(result[key], value) # type: ignore
|
||||||
|
else:
|
||||||
|
result[key] = value
|
||||||
|
else:
|
||||||
|
result[key] = value
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
async def get_global_val(
|
async def get_global_val(
|
||||||
bot_id: str, bot_self_id: str, day: Optional[int] = None
|
bot_id: str, bot_self_id: Optional[str], day: Optional[int] = None
|
||||||
) -> PlatformVal:
|
) -> PlatformVal:
|
||||||
|
if bot_self_id is None:
|
||||||
|
all_bot_self_id: Dict[str, List[str]] = {}
|
||||||
|
for bot_id in bot_val:
|
||||||
|
all_bot_self_id[bot_id] = []
|
||||||
|
for bot_self_id in bot_val[bot_id]:
|
||||||
|
all_bot_self_id[bot_id].append(bot_self_id)
|
||||||
|
|
||||||
|
for bot_id_path in global_val_path.iterdir():
|
||||||
|
if bot_id_path.name not in all_bot_self_id:
|
||||||
|
all_bot_self_id[bot_id_path.name] = []
|
||||||
|
for bot_self_id_path in bot_id_path.iterdir():
|
||||||
|
if (
|
||||||
|
bot_self_id_path.name
|
||||||
|
not in all_bot_self_id[bot_id_path.name]
|
||||||
|
):
|
||||||
|
all_bot_self_id[bot_id_path.name].append(
|
||||||
|
bot_self_id_path.name
|
||||||
|
)
|
||||||
|
|
||||||
|
pv = deepcopy(platform_val)
|
||||||
|
for bot_id in all_bot_self_id:
|
||||||
|
for bot_self_id in all_bot_self_id[bot_id]:
|
||||||
|
pv = merge_dict(
|
||||||
|
await get_global_val(bot_id, bot_self_id, day),
|
||||||
|
pv,
|
||||||
|
)
|
||||||
|
|
||||||
|
return pv
|
||||||
|
|
||||||
if day is None or day == 0:
|
if day is None or day == 0:
|
||||||
return get_platform_val(bot_id, bot_self_id)
|
return get_platform_val(bot_id, bot_self_id)
|
||||||
else:
|
else:
|
||||||
|
@ -214,15 +214,18 @@ async def draw_badge(
|
|||||||
return badge
|
return badge
|
||||||
|
|
||||||
|
|
||||||
async def draw_data_analysis1(ev: Event):
|
async def draw_data_analysis1(
|
||||||
|
bot_id: str,
|
||||||
|
bot_self_id: Optional[str],
|
||||||
|
):
|
||||||
local_val = await gv.get_global_val(
|
local_val = await gv.get_global_val(
|
||||||
ev.real_bot_id,
|
bot_id,
|
||||||
ev.bot_self_id,
|
bot_self_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
yesterday = await gv.get_global_val(
|
yesterday = await gv.get_global_val(
|
||||||
ev.real_bot_id,
|
bot_id,
|
||||||
ev.bot_self_id,
|
bot_self_id,
|
||||||
1,
|
1,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -272,11 +275,15 @@ async def draw_data_analysis1(ev: Event):
|
|||||||
return data_bar
|
return data_bar
|
||||||
|
|
||||||
|
|
||||||
async def draw_data_analysis2(ev: Event):
|
async def draw_data_analysis2(
|
||||||
|
bot_id: str,
|
||||||
|
bot_self_id: Optional[str],
|
||||||
|
):
|
||||||
data = await gv.get_global_analysis(
|
data = await gv.get_global_analysis(
|
||||||
ev.real_bot_id,
|
bot_id,
|
||||||
ev.bot_self_id,
|
bot_self_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
badge1 = await draw_badge(
|
badge1 = await draw_badge(
|
||||||
'DAU',
|
'DAU',
|
||||||
data['DAU'],
|
data['DAU'],
|
||||||
@ -297,9 +304,20 @@ async def draw_data_analysis2(ev: Event):
|
|||||||
0,
|
0,
|
||||||
HINT_COLOR,
|
HINT_COLOR,
|
||||||
)
|
)
|
||||||
|
badge5 = await draw_badge(
|
||||||
|
'群聊新增',
|
||||||
|
data['NG'],
|
||||||
|
)
|
||||||
|
badge6 = await draw_badge(
|
||||||
|
'群聊留存',
|
||||||
|
data['OG'],
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
|
||||||
data_bar = Image.new('RGBA', (1400, 200))
|
data_bar = Image.new('RGBA', (1400, 200))
|
||||||
for index, i in enumerate([badge1, badge2, badge3, badge4]):
|
for index, i in enumerate(
|
||||||
|
[badge1, badge2, badge3, badge4, badge5, badge6]
|
||||||
|
):
|
||||||
data_bar.paste(i, (75 + index * 210, 25), i)
|
data_bar.paste(i, (75 + index * 210, 25), i)
|
||||||
|
|
||||||
return data_bar
|
return data_bar
|
||||||
@ -493,14 +511,28 @@ async def draw_curve_img(ev: Event):
|
|||||||
30,
|
30,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
_data_2 = await gv.get_value_analysis(
|
||||||
|
ev.real_bot_id,
|
||||||
|
None,
|
||||||
|
30,
|
||||||
|
)
|
||||||
|
|
||||||
result: Dict[Union[Tuple[int, int, int], str], List[float]] = {
|
result: Dict[Union[Tuple[int, int, int], str], List[float]] = {
|
||||||
THEME_COLOR: [],
|
THEME_COLOR: [],
|
||||||
HINT_COLOR: [],
|
HINT_COLOR: [],
|
||||||
|
(182, 122, 210): [],
|
||||||
|
(27, 146, 210): [],
|
||||||
}
|
}
|
||||||
for day in _data:
|
for day in _data:
|
||||||
data = _data[day]
|
data = _data[day]
|
||||||
|
data2 = _data_2[day]
|
||||||
|
|
||||||
result[THEME_COLOR].append(data['receive'])
|
result[THEME_COLOR].append(data['receive'])
|
||||||
result[HINT_COLOR].append(data['send'])
|
result[HINT_COLOR].append(data['send'])
|
||||||
|
|
||||||
|
result[(182, 122, 210)].append(data2['receive'])
|
||||||
|
result[(27, 146, 210)].append(data2['send'])
|
||||||
|
|
||||||
curve_img = await draw_curve(result)
|
curve_img = await draw_curve(result)
|
||||||
return curve_img
|
return curve_img
|
||||||
|
|
||||||
@ -541,31 +573,52 @@ async def draw_bg(w: int, h: int):
|
|||||||
async def draw_status(ev: Event):
|
async def draw_status(ev: Event):
|
||||||
title = await draw_title()
|
title = await draw_title()
|
||||||
bar1 = await draw_bar('服务器基础信息', 'Base Info')
|
bar1 = await draw_bar('服务器基础信息', 'Base Info')
|
||||||
bar2 = await draw_bar('机器人数据统计', 'Data Analysis')
|
bar2_1 = await draw_bar('机器人数据统计(单)', 'Data Analysis')
|
||||||
|
bar2_2 = await draw_bar('机器人数据统计(多)', 'Data Analysis')
|
||||||
bar3 = await draw_bar('日活曲线', 'Daily Activity Curve')
|
bar3 = await draw_bar('日活曲线', 'Daily Activity Curve')
|
||||||
bar4 = await draw_bar('插件额外信息', 'Extra Data')
|
bar4 = await draw_bar('插件额外信息', 'Extra Data')
|
||||||
|
|
||||||
hw = draw_hw()
|
hw = draw_hw()
|
||||||
data_bar1 = await draw_data_analysis1(ev)
|
data_bar1_1 = await draw_data_analysis1(
|
||||||
data_bar2 = await draw_data_analysis2(ev)
|
ev.real_bot_id,
|
||||||
|
ev.bot_self_id,
|
||||||
|
)
|
||||||
|
data_bar2_1 = await draw_data_analysis2(
|
||||||
|
ev.real_bot_id,
|
||||||
|
ev.bot_self_id,
|
||||||
|
)
|
||||||
|
data_bar1_2 = await draw_data_analysis1(
|
||||||
|
ev.real_bot_id,
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
data_bar2_2 = await draw_data_analysis2(
|
||||||
|
ev.real_bot_id,
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
|
||||||
plugin_status_img = await draw_plugins_status()
|
plugin_status_img = await draw_plugins_status()
|
||||||
curve_img = await draw_curve_img(ev)
|
curve_img = await draw_curve_img(ev)
|
||||||
|
|
||||||
plugins_num = len(plugins_status)
|
plugins_num = len(plugins_status)
|
||||||
plugins_h = 100 + plugins_num * 180
|
plugins_h = 100 + plugins_num * 180
|
||||||
|
|
||||||
img = await draw_bg(1400, 2267 + 150 + plugins_h)
|
img = await draw_bg(1400, 2778 + 150 + plugins_h)
|
||||||
|
|
||||||
img.paste(title, (0, 0), title)
|
img.paste(title, (0, 0), title)
|
||||||
img.paste(bar1, (0, 855), bar1)
|
img.paste(bar1, (0, 855), bar1)
|
||||||
img.paste(hw, (0, 920), hw)
|
img.paste(hw, (0, 920), hw)
|
||||||
img.paste(bar2, (0, 1202), bar2)
|
img.paste(bar2_1, (0, 1202), bar2_1)
|
||||||
img.paste(data_bar1, (0, 1289), data_bar1)
|
img.paste(data_bar1_1, (0, 1289), data_bar1_1)
|
||||||
img.paste(data_bar2, (0, 1463), data_bar2)
|
img.paste(data_bar2_1, (0, 1463), data_bar2_1)
|
||||||
img.paste(bar3, (0, 1686), bar3)
|
|
||||||
img.paste(curve_img, (0, 1755), curve_img)
|
img.paste(bar2_2, (0, 1686), bar2_2)
|
||||||
img.paste(bar4, (0, 2267), bar4)
|
img.paste(data_bar1_2, (0, 1773), data_bar1_2)
|
||||||
img.paste(plugin_status_img, (0, 2367), plugin_status_img)
|
img.paste(data_bar2_2, (0, 1974), data_bar2_2)
|
||||||
|
|
||||||
|
img.paste(bar3, (0, 2197), bar3)
|
||||||
|
img.paste(curve_img, (0, 2266), curve_img)
|
||||||
|
img.paste(bar4, (0, 2778), bar4)
|
||||||
|
img.paste(plugin_status_img, (0, 2878), plugin_status_img)
|
||||||
|
|
||||||
img = add_footer(img, footer=Image.open(TEXT_PATH / 'footer.png'))
|
img = add_footer(img, footer=Image.open(TEXT_PATH / 'footer.png'))
|
||||||
res = await convert_img(img)
|
res = await convert_img(img)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user