mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-08 05:10:01 +08:00
版本更新
This commit is contained in:
@@ -4,12 +4,12 @@ from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
import pytz
|
||||
from nonebot_plugin_session import EventSession
|
||||
from nonebot_plugin_uninfo import Uninfo
|
||||
|
||||
from zhenxun.services.log import logger
|
||||
from zhenxun.models.sign_log import SignLog
|
||||
from zhenxun.models.sign_user import SignUser
|
||||
from zhenxun.utils.utils import get_user_avatar
|
||||
from zhenxun.utils.platform import PlatformUtils
|
||||
from zhenxun.models.friend_user import FriendUser
|
||||
from zhenxun.configs.path_config import IMAGE_PATH
|
||||
from zhenxun.models.user_console import UserConsole
|
||||
@@ -32,12 +32,12 @@ PLATFORM_PATH = {
|
||||
class SignManage:
|
||||
@classmethod
|
||||
async def rank(
|
||||
cls, user_id: str, num: int, group_id: str | None = None
|
||||
) -> BuildImage: # sourcery skip: avoid-builtin-shadow
|
||||
cls, session: Uninfo, num: int, group_id: str | None = None
|
||||
) -> BuildImage | str: # sourcery skip: avoid-builtin-shadow
|
||||
"""好感度排行
|
||||
|
||||
参数:
|
||||
user_id: 用户id
|
||||
session: Uninfo
|
||||
num: 排行榜数量
|
||||
group_id: 群组id
|
||||
|
||||
@@ -49,14 +49,17 @@ class SignManage:
|
||||
user_list = await GroupInfoUser.filter(group_id=group_id).values_list(
|
||||
"user_id", flat=True
|
||||
)
|
||||
query = query.filter(user_id__in=user_list)
|
||||
if user_list:
|
||||
query = query.filter(user_id__in=user_list)
|
||||
user_list = (
|
||||
await query.annotate()
|
||||
.order_by("-impression")
|
||||
.values_list("user_id", "impression", "sign_count", "platform")
|
||||
)
|
||||
if not user_list:
|
||||
return "当前还没有人签到过哦..."
|
||||
user_id_list = [user[0] for user in user_list]
|
||||
index = user_id_list.index(user_id) + 1
|
||||
index = user_id_list.index(session.user.id) + 1
|
||||
user_list = user_list[:num] if num < len(user_list) else user_list
|
||||
column_name = ["排名", "-", "名称", "好感度", "签到次数", "平台"]
|
||||
friend_list = await FriendUser.filter(user_id__in=user_id_list).values_list(
|
||||
@@ -70,8 +73,11 @@ class SignManage:
|
||||
for g in group_user:
|
||||
uid2name[g[0]] = g[1]
|
||||
data_list = []
|
||||
platform = PlatformUtils.get_platform(session)
|
||||
for i, user in enumerate(user_list):
|
||||
bytes = await get_user_avatar(user[0])
|
||||
bytes = await PlatformUtils.get_user_avatar(
|
||||
user[0], platform, session.self_id
|
||||
)
|
||||
data_list.append(
|
||||
[
|
||||
f"{i+1}",
|
||||
@@ -92,28 +98,29 @@ class SignManage:
|
||||
|
||||
@classmethod
|
||||
async def sign(
|
||||
cls, session: EventSession, nickname: str, is_card_view: bool = False
|
||||
) -> Path | None:
|
||||
cls, session: Uninfo, nickname: str, is_card_view: bool = False
|
||||
) -> Path:
|
||||
"""签到
|
||||
|
||||
参数:
|
||||
session: Session
|
||||
session: Uninfo
|
||||
nickname: 用户昵称
|
||||
is_card_view: 是否展示卡片
|
||||
|
||||
返回:
|
||||
Path: 卡片路径
|
||||
"""
|
||||
if not session.id1:
|
||||
return None
|
||||
platform = PlatformUtils.get_platform(session)
|
||||
now = datetime.now(pytz.timezone("Asia/Shanghai"))
|
||||
user_console = await UserConsole.get_user(session.id1, session.platform)
|
||||
user_console = await UserConsole.get_user(session.user.id, platform)
|
||||
user, _ = await SignUser.get_or_create(
|
||||
user_id=session.id1,
|
||||
defaults={"user_console": user_console, "platform": session.platform},
|
||||
user_id=session.user.id,
|
||||
defaults={"user_console": user_console, "platform": platform},
|
||||
)
|
||||
new_log = (
|
||||
await SignLog.filter(user_id=session.id1).order_by("-create_time").first()
|
||||
await SignLog.filter(user_id=session.user.id)
|
||||
.order_by("-create_time")
|
||||
.first()
|
||||
)
|
||||
log_time = None
|
||||
if new_log:
|
||||
@@ -123,7 +130,13 @@ class SignManage:
|
||||
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
|
||||
user,
|
||||
session,
|
||||
nickname,
|
||||
-1,
|
||||
user_console.gold,
|
||||
"",
|
||||
is_card_view=is_card_view,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
@@ -131,36 +144,35 @@ class SignManage:
|
||||
cls,
|
||||
user: SignUser,
|
||||
nickname: str,
|
||||
session: EventSession,
|
||||
session: Uninfo,
|
||||
) -> Path:
|
||||
"""签到处理
|
||||
|
||||
参数:
|
||||
user: SignUser
|
||||
nickname: 用户昵称
|
||||
session: Session
|
||||
session: Uninfo
|
||||
|
||||
返回:
|
||||
Path: 卡片路径
|
||||
"""
|
||||
platform = PlatformUtils.get_platform(session)
|
||||
impression_added = (secrets.randbelow(99) + 1) / 100
|
||||
rand = random.random()
|
||||
add_probability = float(user.add_probability)
|
||||
specify_probability = user.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)
|
||||
await SignUser.sign(user, impression_added, session.self_id, platform)
|
||||
gold = random.randint(1, 100)
|
||||
gift = random_event(float(user.impression))
|
||||
if isinstance(gift, int):
|
||||
gold += gift
|
||||
await UserConsole.add_gold(
|
||||
user.user_id, gold + gift, "sign_in", session.platform
|
||||
)
|
||||
await UserConsole.add_gold(user.user_id, gold + gift, "sign_in", platform)
|
||||
gift = f"额外金币 +{gift}"
|
||||
else:
|
||||
await UserConsole.add_gold(user.user_id, gold, "sign_in", session.platform)
|
||||
await UserConsole.add_props_by_name(user.user_id, gift, 1, session.platform)
|
||||
await UserConsole.add_gold(user.user_id, gold, "sign_in", platform)
|
||||
await UserConsole.add_props_by_name(user.user_id, gift, 1, platform)
|
||||
gift += " + 1"
|
||||
logger.info(
|
||||
f"签到成功. score: {user.impression:.2f} "
|
||||
@@ -170,6 +182,7 @@ class SignManage:
|
||||
)
|
||||
return await get_card(
|
||||
user,
|
||||
session,
|
||||
nickname,
|
||||
impression_added,
|
||||
gold,
|
||||
|
||||
Reference in New Issue
Block a user