mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
🎨 代码结构优化
This commit is contained in:
parent
3f4787d4c6
commit
0a5ab83ffe
@ -1,7 +1,6 @@
|
|||||||
|
|
||||||
</html>
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="zh-cn">
|
<html lang="zh-cn">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
@ -10,6 +9,7 @@
|
|||||||
<!-- <link rel="stylesheet" href="./res/font-awesome/css/font-awesome.min.css"> -->
|
<!-- <link rel="stylesheet" href="./res/font-awesome/css/font-awesome.min.css"> -->
|
||||||
<link rel="stylesheet" href="main.css">
|
<link rel="stylesheet" href="main.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<img class="top-image" src="res/img/top.jpg"></img>
|
<img class="top-image" src="res/img/top.jpg"></img>
|
||||||
@ -22,8 +22,10 @@
|
|||||||
<span style="margin-left: 22px;">{{data.nickname}}自检</span>
|
<span style="margin-left: 22px;">{{data.nickname}}自检</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="network">
|
<div class="network">
|
||||||
<div class="network-item">BaiDu<span class="network-status" style="background-color: {{data.baidu}}; border: 1px solid {{data.baidu}}"></span></div>
|
<div class="network-item">BaiDu<span class="network-status"
|
||||||
<div class="network-item">Google<span class="network-status" style="background-color: {{data.google}}; border: 1px solid {{data.google}}"></span></div>
|
style="background-color: {{data.baidu}}; border: 1px solid {{data.baidu}}"></span></div>
|
||||||
|
<div class="network-item">Google<span class="network-status"
|
||||||
|
style="background-color: {{data.google}}; border: 1px solid {{data.google}}"></span></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="main">
|
<div class="main">
|
||||||
@ -68,8 +70,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="line"></div>
|
<div class="line"></div>
|
||||||
<div class="status-text">
|
<div class="status-text">
|
||||||
<p class="status-text-title">CPU <span style="font-size: 12px;line-height: 18.5px;">{{data.brand_raw}}</span></p>
|
<p class="status-text-title">CPU <span
|
||||||
<p class="status-text-title">SYSTEM <span style="font-size: 13px;line-height: 18.5px;">{{data.system}}</span></p>
|
style="font-size: 12px;line-height: 18.5px;">{{data.brand_raw}}</span></p>
|
||||||
|
<p class="status-text-title">SYSTEM <span
|
||||||
|
style="font-size: 13px;line-height: 18.5px;">{{data.system}}</span></p>
|
||||||
<p class="status-text-title">VERSION <span>{{data.version}}</span></p>
|
<p class="status-text-title">VERSION <span>{{data.version}}</span></p>
|
||||||
<p class="status-text-title">PLUGINS <span>{{data.plugin_count}} loaded</span></p>
|
<p class="status-text-title">PLUGINS <span>{{data.plugin_count}} loaded</span></p>
|
||||||
</div>
|
</div>
|
||||||
@ -79,4 +83,5 @@
|
|||||||
</body>
|
</body>
|
||||||
<script type="text/javascript" src="main.js">
|
<script type="text/javascript" src="main.js">
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@ -1,23 +1,23 @@
|
|||||||
import random
|
import random
|
||||||
import secrets
|
import secrets
|
||||||
from datetime import datetime
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
import pytz
|
import pytz
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.path_config import IMAGE_PATH
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.models.friend_user import FriendUser
|
|
||||||
from zhenxun.models.group_member_info import GroupInfoUser
|
|
||||||
from zhenxun.models.sign_log import SignLog
|
from zhenxun.models.sign_log import SignLog
|
||||||
from zhenxun.models.sign_user import SignUser
|
from zhenxun.models.sign_user import SignUser
|
||||||
from zhenxun.models.user_console import UserConsole
|
|
||||||
from zhenxun.services.log import logger
|
|
||||||
from zhenxun.utils.image_utils import BuildImage, ImageTemplate
|
|
||||||
from zhenxun.utils.utils import get_user_avatar
|
from zhenxun.utils.utils import get_user_avatar
|
||||||
|
from zhenxun.models.friend_user import FriendUser
|
||||||
|
from zhenxun.configs.path_config import IMAGE_PATH
|
||||||
|
from zhenxun.models.user_console import UserConsole
|
||||||
|
from zhenxun.models.group_member_info import GroupInfoUser
|
||||||
|
from zhenxun.utils.image_utils import BuildImage, ImageTemplate
|
||||||
|
|
||||||
from ._random_event import random_event
|
|
||||||
from .utils import get_card
|
from .utils import get_card
|
||||||
|
from ._random_event import random_event
|
||||||
|
|
||||||
ICON_PATH = IMAGE_PATH / "_icon"
|
ICON_PATH = IMAGE_PATH / "_icon"
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ class SignManage:
|
|||||||
@classmethod
|
@classmethod
|
||||||
async def rank(
|
async def rank(
|
||||||
cls, user_id: str, num: int, group_id: str | None = None
|
cls, user_id: str, num: int, group_id: str | None = None
|
||||||
) -> BuildImage:
|
) -> BuildImage: # sourcery skip: avoid-builtin-shadow
|
||||||
"""好感度排行
|
"""好感度排行
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@ -120,8 +120,7 @@ class SignManage:
|
|||||||
log_time = new_log.create_time.astimezone(
|
log_time = new_log.create_time.astimezone(
|
||||||
pytz.timezone("Asia/Shanghai")
|
pytz.timezone("Asia/Shanghai")
|
||||||
).date()
|
).date()
|
||||||
if not is_card_view:
|
if not is_card_view and (not new_log or (log_time and log_time != now.date())):
|
||||||
if not new_log or (log_time and log_time != now.date()):
|
|
||||||
return await cls._handle_sign_in(user, nickname, session)
|
return await cls._handle_sign_in(user, nickname, session)
|
||||||
return await get_card(
|
return await get_card(
|
||||||
user, nickname, -1, user_console.gold, "", is_card_view=is_card_view
|
user, nickname, -1, user_console.gold, "", is_card_view=is_card_view
|
||||||
@ -148,9 +147,7 @@ class SignManage:
|
|||||||
rand = random.random()
|
rand = random.random()
|
||||||
add_probability = float(user.add_probability)
|
add_probability = float(user.add_probability)
|
||||||
specify_probability = user.specify_probability
|
specify_probability = user.specify_probability
|
||||||
if rand + add_probability > 0.97:
|
if rand + add_probability > 0.97 or rand < specify_probability:
|
||||||
impression_added *= 2
|
|
||||||
elif rand < specify_probability:
|
|
||||||
impression_added *= 2
|
impression_added *= 2
|
||||||
await SignUser.sign(user, impression_added, session.bot_id, session.platform)
|
await SignUser.sign(user, impression_added, session.bot_id, session.platform)
|
||||||
gold = random.randint(1, 100)
|
gold = random.randint(1, 100)
|
||||||
|
|||||||
@ -1,31 +1,34 @@
|
|||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
from datetime import datetime
|
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
import nonebot
|
|
||||||
import pytz
|
import pytz
|
||||||
|
import nonebot
|
||||||
from nonebot.drivers import Driver
|
from nonebot.drivers import Driver
|
||||||
from nonebot_plugin_htmlrender import template_to_pic
|
from nonebot_plugin_htmlrender import template_to_pic
|
||||||
|
|
||||||
from zhenxun.configs.config import BotConfig, Config
|
|
||||||
from zhenxun.configs.path_config import IMAGE_PATH, TEMPLATE_PATH
|
|
||||||
from zhenxun.models.sign_log import SignLog
|
from zhenxun.models.sign_log import SignLog
|
||||||
from zhenxun.models.sign_user import SignUser
|
from zhenxun.models.sign_user import SignUser
|
||||||
from zhenxun.utils.image_utils import BuildImage
|
|
||||||
from zhenxun.utils.utils import get_user_avatar
|
from zhenxun.utils.utils import get_user_avatar
|
||||||
|
from zhenxun.utils.image_utils import BuildImage
|
||||||
|
from zhenxun.configs.config import Config, BotConfig
|
||||||
|
from zhenxun.configs.path_config import IMAGE_PATH, TEMPLATE_PATH
|
||||||
|
|
||||||
from .config import (
|
from .config import (
|
||||||
SIGN_BACKGROUND_PATH,
|
|
||||||
SIGN_BORDER_PATH,
|
SIGN_BORDER_PATH,
|
||||||
SIGN_RESOURCE_PATH,
|
SIGN_RESOURCE_PATH,
|
||||||
|
SIGN_BACKGROUND_PATH,
|
||||||
SIGN_TODAY_CARD_PATH,
|
SIGN_TODAY_CARD_PATH,
|
||||||
level2attitude,
|
|
||||||
lik2level,
|
lik2level,
|
||||||
lik2relation,
|
lik2relation,
|
||||||
|
level2attitude,
|
||||||
)
|
)
|
||||||
assert len(level2attitude)==len(lik2level)==len(lik2relation), '好感度态度、等级、关系长度不匹配!'
|
|
||||||
|
assert (
|
||||||
|
len(level2attitude) == len(lik2level) == len(lik2relation)
|
||||||
|
), "好感度态度、等级、关系长度不匹配!"
|
||||||
|
|
||||||
AVA_URL = "http://q1.qlogo.cn/g?b=qq&nk={}&s=160"
|
AVA_URL = "http://q1.qlogo.cn/g?b=qq&nk={}&s=160"
|
||||||
|
|
||||||
@ -88,20 +91,20 @@ async def get_card(
|
|||||||
card_file = Path(SIGN_TODAY_CARD_PATH) / file_name
|
card_file = Path(SIGN_TODAY_CARD_PATH) / file_name
|
||||||
if card_file.exists():
|
if card_file.exists():
|
||||||
return IMAGE_PATH / "sign" / "today_card" / file_name
|
return IMAGE_PATH / "sign" / "today_card" / file_name
|
||||||
else:
|
|
||||||
if add_impression == -1:
|
if add_impression == -1:
|
||||||
card_file = Path(SIGN_TODAY_CARD_PATH) / view_name
|
card_file = Path(SIGN_TODAY_CARD_PATH) / view_name
|
||||||
if card_file.exists():
|
if card_file.exists():
|
||||||
return card_file
|
return card_file
|
||||||
is_card_view = True
|
is_card_view = True
|
||||||
if base_config.get("IMAGE_STYLE") == "zhenxun":
|
return (
|
||||||
return await _generate_html_card(
|
await _generate_html_card(
|
||||||
user, nickname, add_impression, gold, gift, is_double, is_card_view
|
user, nickname, add_impression, gold, gift, is_double, is_card_view
|
||||||
)
|
)
|
||||||
else:
|
if base_config.get("IMAGE_STYLE") == "zhenxun"
|
||||||
return await _generate_card(
|
else await _generate_card(
|
||||||
user, nickname, add_impression, gold, gift, is_double, is_card_view
|
user, nickname, add_impression, gold, gift, is_double, is_card_view
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def _generate_card(
|
async def _generate_card(
|
||||||
@ -154,16 +157,12 @@ async def _generate_card(
|
|||||||
|
|
||||||
bar_bk = BuildImage(220, 20, background=SIGN_RESOURCE_PATH / "bar_white.png")
|
bar_bk = BuildImage(220, 20, background=SIGN_RESOURCE_PATH / "bar_white.png")
|
||||||
bar = BuildImage(220, 20, background=SIGN_RESOURCE_PATH / "bar.png")
|
bar = BuildImage(220, 20, background=SIGN_RESOURCE_PATH / "bar.png")
|
||||||
ratio = 1 - (next_impression - impression) / (
|
ratio = 1 - (next_impression - impression) / (next_impression - previous_impression)
|
||||||
next_impression - previous_impression
|
|
||||||
)
|
|
||||||
if next_impression == 0:
|
if next_impression == 0:
|
||||||
ratio = 0
|
ratio = 0
|
||||||
await bar.resize(width=int(bar.width * ratio) or 1, height=bar.height)
|
await bar.resize(width=int(bar.width * ratio) or 1, height=bar.height)
|
||||||
await bar_bk.paste(bar)
|
await bar_bk.paste(bar)
|
||||||
font_size = 30
|
font_size = 20 if "好感度双倍加持卡" in gift else 30
|
||||||
if "好感度双倍加持卡" in gift:
|
|
||||||
font_size = 20
|
|
||||||
gift_border = BuildImage(
|
gift_border = BuildImage(
|
||||||
270,
|
270,
|
||||||
100,
|
100,
|
||||||
@ -190,7 +189,7 @@ async def _generate_card(
|
|||||||
user_console = await user.user_console
|
user_console = await user.user_console
|
||||||
if user_console and user_console.uid is not None:
|
if user_console and user_console.uid is not None:
|
||||||
uid = f"{user_console.uid}".rjust(12, "0")
|
uid = f"{user_console.uid}".rjust(12, "0")
|
||||||
uid = uid[:4] + " " + uid[4:8] + " " + uid[8:]
|
uid = f"{uid[:4]} {uid[4:8]} {uid[8:]}"
|
||||||
else:
|
else:
|
||||||
uid = "XXXX XXXX XXXX"
|
uid = "XXXX XXXX XXXX"
|
||||||
uid_img = await BuildImage.build_text_image(
|
uid_img = await BuildImage.build_text_image(
|
||||||
@ -246,9 +245,12 @@ async def _generate_card(
|
|||||||
default_setu_prob = (
|
default_setu_prob = (
|
||||||
Config.get_config("send_setu", "INITIAL_SETU_PROBABILITY") * 100 # type: ignore
|
Config.get_config("send_setu", "INITIAL_SETU_PROBABILITY") * 100 # type: ignore
|
||||||
)
|
)
|
||||||
|
setu_prob = (
|
||||||
|
default_setu_prob + float(user.impression) if user.impression < 100 else 100
|
||||||
|
)
|
||||||
await today_data.text(
|
await today_data.text(
|
||||||
(0, 50),
|
(0, 50),
|
||||||
f"色图概率:{(default_setu_prob + float(user.impression) if user.impression < 100 else 100):.2f}%",
|
f"色图概率:{setu_prob:.2f}%",
|
||||||
)
|
)
|
||||||
await today_data.text((0, 75), f"开箱次数:{(20 + int(user.impression / 3))}")
|
await today_data.text((0, 75), f"开箱次数:{(20 + int(user.impression / 3))}")
|
||||||
_type = "view"
|
_type = "view"
|
||||||
@ -308,11 +310,11 @@ async def generate_progress_bar_pic():
|
|||||||
step_g = (bg_2[1] - bg_1[1]) / width
|
step_g = (bg_2[1] - bg_1[1]) / width
|
||||||
step_b = (bg_2[2] - bg_1[2]) / width
|
step_b = (bg_2[2] - bg_1[2]) / width
|
||||||
|
|
||||||
for y in range(0, width):
|
for y in range(width):
|
||||||
bg_r = round(bg_1[0] + step_r * y)
|
bg_r = round(bg_1[0] + step_r * y)
|
||||||
bg_g = round(bg_1[1] + step_g * y)
|
bg_g = round(bg_1[1] + step_g * y)
|
||||||
bg_b = round(bg_1[2] + step_b * y)
|
bg_b = round(bg_1[2] + step_b * y)
|
||||||
for x in range(0, height):
|
for x in range(height):
|
||||||
await A.point((y, x), fill=(bg_r, bg_g, bg_b))
|
await A.point((y, x), fill=(bg_r, bg_g, bg_b))
|
||||||
await bk.paste(img_y, (0, 0))
|
await bk.paste(img_y, (0, 0))
|
||||||
await bk.paste(A, (25, 0))
|
await bk.paste(A, (25, 0))
|
||||||
@ -344,11 +346,19 @@ def get_level_and_next_impression(impression: float) -> tuple[str, int | float,
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
keys = list(lik2level.keys())
|
keys = list(lik2level.keys())
|
||||||
level, next_impression, previous_impression = lik2level[keys[-1]], keys[-2], keys[-1]
|
level, next_impression, previous_impression = (
|
||||||
|
lik2level[keys[-1]],
|
||||||
|
keys[-2],
|
||||||
|
keys[-1],
|
||||||
|
)
|
||||||
for i in range(len(keys)):
|
for i in range(len(keys)):
|
||||||
if impression >= keys[i]:
|
if impression >= keys[i]:
|
||||||
level, next_impression, previous_impression = lik2level[keys[i]], keys[i-1], keys[i]
|
level, next_impression, previous_impression = (
|
||||||
if i==0:
|
lik2level[keys[i]],
|
||||||
|
keys[i - 1],
|
||||||
|
keys[i],
|
||||||
|
)
|
||||||
|
if i == 0:
|
||||||
next_impression = impression
|
next_impression = impression
|
||||||
break
|
break
|
||||||
return level, next_impression, previous_impression
|
return level, next_impression, previous_impression
|
||||||
@ -391,11 +401,11 @@ async def _generate_html_card(
|
|||||||
user_console = await user.user_console
|
user_console = await user.user_console
|
||||||
if user_console and user_console.uid is not None:
|
if user_console and user_console.uid is not None:
|
||||||
uid = f"{user_console.uid}".rjust(12, "0")
|
uid = f"{user_console.uid}".rjust(12, "0")
|
||||||
uid = uid[:4] + " " + uid[4:8] + " " + uid[8:]
|
uid = f"{uid[:4]} {uid[4:8]} {uid[8:]}"
|
||||||
else:
|
else:
|
||||||
uid = "XXXX XXXX XXXX"
|
uid = "XXXX XXXX XXXX"
|
||||||
level, next_impression, previous_impression = get_level_and_next_impression(
|
level, next_impression, previous_impression = get_level_and_next_impression(
|
||||||
float(impression)
|
impression
|
||||||
)
|
)
|
||||||
interpolation = next_impression - impression
|
interpolation = next_impression - impression
|
||||||
message = f"{BotConfig.self_nickname}希望你开心!"
|
message = f"{BotConfig.self_nickname}希望你开心!"
|
||||||
@ -404,9 +414,7 @@ async def _generate_html_card(
|
|||||||
message = random.choice(MORNING_MESSAGE)
|
message = random.choice(MORNING_MESSAGE)
|
||||||
elif hour >= 0 and hour < 6:
|
elif hour >= 0 and hour < 6:
|
||||||
message = random.choice(LG_MESSAGE)
|
message = random.choice(LG_MESSAGE)
|
||||||
_impression = add_impression
|
_impression = f"{add_impression}(×2)" if is_double else add_impression
|
||||||
if is_double:
|
|
||||||
_impression = f"{add_impression}(×2)"
|
|
||||||
process = 1 - (next_impression - impression) / (
|
process = 1 - (next_impression - impression) / (
|
||||||
next_impression - previous_impression
|
next_impression - previous_impression
|
||||||
)
|
)
|
||||||
@ -425,7 +433,7 @@ async def _generate_html_card(
|
|||||||
"attitude": f"对你的态度: {level2attitude[level]}",
|
"attitude": f"对你的态度: {level2attitude[level]}",
|
||||||
"interpolation": f"{interpolation:.2f}",
|
"interpolation": f"{interpolation:.2f}",
|
||||||
"heart2": [1 for _ in range(int(level))],
|
"heart2": [1 for _ in range(int(level))],
|
||||||
"heart1": [1 for _ in range(len(lik2level)-int(level)-1)],
|
"heart1": [1 for _ in range(len(lik2level) - int(level) - 1)],
|
||||||
"process": process * 100,
|
"process": process * 100,
|
||||||
"date": str(now.replace(microsecond=0)),
|
"date": str(now.replace(microsecond=0)),
|
||||||
"font_size": 45,
|
"font_size": 45,
|
||||||
|
|||||||
@ -1,25 +1,24 @@
|
|||||||
import nonebot
|
import nonebot
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
from nonebot.plugin import PluginMetadata
|
from nonebot.plugin import PluginMetadata
|
||||||
from nonebot_plugin_alconna import Alconna, Arparma, on_alconna
|
|
||||||
from nonebot_plugin_alconna.matcher import AlconnaMatcher
|
|
||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
from nonebot_plugin_alconna.matcher import AlconnaMatcher
|
||||||
|
from nonebot_plugin_alconna import Alconna, Arparma, on_alconna
|
||||||
|
|
||||||
from zhenxun.configs.path_config import IMAGE_PATH
|
|
||||||
from zhenxun.configs.utils import PluginExtraData
|
|
||||||
from zhenxun.models.plugin_info import PluginInfo
|
|
||||||
from zhenxun.models.task_info import TaskInfo
|
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils.enum import PluginType
|
from zhenxun.utils.enum import PluginType
|
||||||
|
from zhenxun.models.task_info import TaskInfo
|
||||||
from zhenxun.utils.exception import EmptyError
|
from zhenxun.utils.exception import EmptyError
|
||||||
|
from zhenxun.utils.message import MessageUtils
|
||||||
|
from zhenxun.configs.utils import PluginExtraData
|
||||||
|
from zhenxun.models.plugin_info import PluginInfo
|
||||||
|
from zhenxun.configs.path_config import IMAGE_PATH
|
||||||
from zhenxun.utils.image_utils import (
|
from zhenxun.utils.image_utils import (
|
||||||
BuildImage,
|
BuildImage,
|
||||||
build_sort_image,
|
|
||||||
group_image,
|
|
||||||
text2image,
|
text2image,
|
||||||
|
group_image,
|
||||||
|
build_sort_image,
|
||||||
)
|
)
|
||||||
from zhenxun.utils.message import MessageUtils
|
|
||||||
from zhenxun.utils.rules import admin_check, ensure_group
|
|
||||||
|
|
||||||
__plugin_meta__ = PluginMetadata(
|
__plugin_meta__ = PluginMetadata(
|
||||||
name="超级用户帮助",
|
name="超级用户帮助",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user