From 0a5ab83ffeb7c86c73eab283bbbe08856f5f7c9a Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Sat, 7 Sep 2024 12:46:25 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20=E4=BB=A3=E7=A0=81=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/template/check/main.html | 17 ++-- .../builtin_plugins/sign_in/_data_source.py | 27 +++--- zhenxun/builtin_plugins/sign_in/utils.py | 90 ++++++++++--------- .../builtin_plugins/superuser/super_help.py | 19 ++-- 4 files changed, 81 insertions(+), 72 deletions(-) diff --git a/resources/template/check/main.html b/resources/template/check/main.html index 00fffb85..3b99f369 100644 --- a/resources/template/check/main.html +++ b/resources/template/check/main.html @@ -1,7 +1,6 @@ - - + @@ -10,6 +9,7 @@ +
@@ -22,8 +22,10 @@ {{data.nickname}}自检
-
BaiDu
-
Google
+
BaiDu
+
Google
@@ -68,8 +70,10 @@
-

CPU         {{data.brand_raw}}

-

SYSTEM    {{data.system}}

+

CPU         {{data.brand_raw}}

+

SYSTEM    {{data.system}}

VERSION   {{data.version}}

PLUGINS   {{data.plugin_count}} loaded

@@ -79,4 +83,5 @@ + \ No newline at end of file diff --git a/zhenxun/builtin_plugins/sign_in/_data_source.py b/zhenxun/builtin_plugins/sign_in/_data_source.py index 83080b59..d68ea788 100644 --- a/zhenxun/builtin_plugins/sign_in/_data_source.py +++ b/zhenxun/builtin_plugins/sign_in/_data_source.py @@ -1,23 +1,23 @@ import random import secrets -from datetime import datetime from pathlib import Path +from datetime import datetime import pytz from nonebot_plugin_session import EventSession -from zhenxun.configs.path_config import IMAGE_PATH -from zhenxun.models.friend_user import FriendUser -from zhenxun.models.group_member_info import GroupInfoUser +from zhenxun.services.log import logger from zhenxun.models.sign_log import SignLog 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.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 ._random_event import random_event ICON_PATH = IMAGE_PATH / "_icon" @@ -34,7 +34,7 @@ class SignManage: @classmethod async def rank( cls, user_id: str, num: int, group_id: str | None = None - ) -> BuildImage: + ) -> BuildImage: # sourcery skip: avoid-builtin-shadow """好感度排行 参数: @@ -120,9 +120,8 @@ class SignManage: log_time = new_log.create_time.astimezone( pytz.timezone("Asia/Shanghai") ).date() - if not is_card_view: - if not new_log or (log_time and log_time != now.date()): - return await cls._handle_sign_in(user, nickname, session) + if not is_card_view and (not new_log or (log_time and log_time != now.date())): + return await cls._handle_sign_in(user, nickname, session) return await get_card( user, nickname, -1, user_console.gold, "", is_card_view=is_card_view ) @@ -148,9 +147,7 @@ class SignManage: rand = random.random() add_probability = float(user.add_probability) specify_probability = user.specify_probability - if rand + add_probability > 0.97: - impression_added *= 2 - elif rand < specify_probability: + if rand + add_probability > 0.97 or rand < specify_probability: impression_added *= 2 await SignUser.sign(user, impression_added, session.bot_id, session.platform) gold = random.randint(1, 100) diff --git a/zhenxun/builtin_plugins/sign_in/utils.py b/zhenxun/builtin_plugins/sign_in/utils.py index d4e7cfdb..def67870 100644 --- a/zhenxun/builtin_plugins/sign_in/utils.py +++ b/zhenxun/builtin_plugins/sign_in/utils.py @@ -1,31 +1,34 @@ import os import random -from datetime import datetime from io import BytesIO from pathlib import Path +from datetime import datetime -import nonebot import pytz +import nonebot from nonebot.drivers import Driver 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_user import SignUser -from zhenxun.utils.image_utils import BuildImage 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 ( - SIGN_BACKGROUND_PATH, SIGN_BORDER_PATH, SIGN_RESOURCE_PATH, + SIGN_BACKGROUND_PATH, SIGN_TODAY_CARD_PATH, - level2attitude, lik2level, 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" @@ -88,20 +91,20 @@ async def get_card( card_file = Path(SIGN_TODAY_CARD_PATH) / file_name if card_file.exists(): return IMAGE_PATH / "sign" / "today_card" / file_name - else: - if add_impression == -1: - card_file = Path(SIGN_TODAY_CARD_PATH) / view_name - if card_file.exists(): - return card_file - is_card_view = True - if base_config.get("IMAGE_STYLE") == "zhenxun": - return await _generate_html_card( - user, nickname, add_impression, gold, gift, is_double, is_card_view - ) - else: - return await _generate_card( - user, nickname, add_impression, gold, gift, is_double, is_card_view - ) + if add_impression == -1: + card_file = Path(SIGN_TODAY_CARD_PATH) / view_name + if card_file.exists(): + return card_file + is_card_view = True + return ( + await _generate_html_card( + user, nickname, add_impression, gold, gift, is_double, is_card_view + ) + if base_config.get("IMAGE_STYLE") == "zhenxun" + else await _generate_card( + user, nickname, add_impression, gold, gift, is_double, is_card_view + ) + ) 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 = BuildImage(220, 20, background=SIGN_RESOURCE_PATH / "bar.png") - ratio = 1 - (next_impression - impression) / ( - next_impression - previous_impression - ) + ratio = 1 - (next_impression - impression) / (next_impression - previous_impression) if next_impression == 0: ratio = 0 await bar.resize(width=int(bar.width * ratio) or 1, height=bar.height) await bar_bk.paste(bar) - font_size = 30 - if "好感度双倍加持卡" in gift: - font_size = 20 + font_size = 20 if "好感度双倍加持卡" in gift else 30 gift_border = BuildImage( 270, 100, @@ -190,7 +189,7 @@ async def _generate_card( user_console = await user.user_console if user_console and user_console.uid is not None: 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: uid = "XXXX XXXX XXXX" uid_img = await BuildImage.build_text_image( @@ -246,9 +245,12 @@ async def _generate_card( default_setu_prob = ( 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( (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))}") _type = "view" @@ -308,11 +310,11 @@ async def generate_progress_bar_pic(): step_g = (bg_2[1] - bg_1[1]) / 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_g = round(bg_1[1] + step_g * 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 bk.paste(img_y, (0, 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()) - 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)): if impression >= keys[i]: - level, next_impression, previous_impression = lik2level[keys[i]], keys[i-1], keys[i] - if i==0: + level, next_impression, previous_impression = ( + lik2level[keys[i]], + keys[i - 1], + keys[i], + ) + if i == 0: next_impression = impression break return level, next_impression, previous_impression @@ -391,11 +401,11 @@ async def _generate_html_card( user_console = await user.user_console if user_console and user_console.uid is not None: 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: uid = "XXXX XXXX XXXX" level, next_impression, previous_impression = get_level_and_next_impression( - float(impression) + impression ) interpolation = next_impression - impression message = f"{BotConfig.self_nickname}希望你开心!" @@ -404,9 +414,7 @@ async def _generate_html_card( message = random.choice(MORNING_MESSAGE) elif hour >= 0 and hour < 6: message = random.choice(LG_MESSAGE) - _impression = add_impression - if is_double: - _impression = f"{add_impression}(×2)" + _impression = f"{add_impression}(×2)" if is_double else add_impression process = 1 - (next_impression - impression) / ( next_impression - previous_impression ) @@ -425,7 +433,7 @@ async def _generate_html_card( "attitude": f"对你的态度: {level2attitude[level]}", "interpolation": f"{interpolation:.2f}", "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, "date": str(now.replace(microsecond=0)), "font_size": 45, diff --git a/zhenxun/builtin_plugins/superuser/super_help.py b/zhenxun/builtin_plugins/superuser/super_help.py index 5fa1e09e..8d754d81 100644 --- a/zhenxun/builtin_plugins/superuser/super_help.py +++ b/zhenxun/builtin_plugins/superuser/super_help.py @@ -1,25 +1,24 @@ import nonebot from nonebot.permission import SUPERUSER 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_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.utils.enum import PluginType +from zhenxun.models.task_info import TaskInfo 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 ( BuildImage, - build_sort_image, - group_image, text2image, + group_image, + build_sort_image, ) -from zhenxun.utils.message import MessageUtils -from zhenxun.utils.rules import admin_check, ensure_group __plugin_meta__ = PluginMetadata( name="超级用户帮助",