mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-05 11:49:59 +08:00
update 0.0.6.0
This commit is contained in:
@@ -6,7 +6,6 @@ from .group_user_checkin import (
|
||||
)
|
||||
from nonebot.typing import T_State
|
||||
from nonebot.adapters.cqhttp import Bot, GroupMessageEvent
|
||||
from utils.manager import plugins2cd_manager
|
||||
from nonebot.adapters.cqhttp.permission import GROUP
|
||||
from utils.message_builder import image
|
||||
from nonebot import on_command
|
||||
@@ -15,6 +14,7 @@ from pathlib import Path
|
||||
from configs.path_config import DATA_PATH
|
||||
from services.log import logger
|
||||
from .utils import clear_sign_data_pic
|
||||
from utils.utils import is_number
|
||||
|
||||
try:
|
||||
import ujson as json
|
||||
@@ -43,9 +43,30 @@ __plugin_settings__ = {
|
||||
"limit_superuser": False,
|
||||
"cmd": ["签到"],
|
||||
}
|
||||
plugins2cd_manager.add_cd_limit(
|
||||
'sign_in',
|
||||
)
|
||||
__plugin_cd_limit__ = {}
|
||||
__plugin_configs__ = {
|
||||
"MAX_SIGN_GOLD": {
|
||||
"value": 200,
|
||||
"help": "签到好感度加成额外获得的最大金币数",
|
||||
"default_value": 200
|
||||
},
|
||||
"SIGN_CARD1_PROB": {
|
||||
"value": 0.2,
|
||||
"help": "签到好感度双倍加持卡Ⅰ掉落概率",
|
||||
"default_value": 0.2
|
||||
},
|
||||
"SIGN_CARD2_PROB": {
|
||||
"value": 0.09,
|
||||
"help": "签到好感度双倍加持卡Ⅱ掉落概率",
|
||||
"default_value": 0.09
|
||||
},
|
||||
"SIGN_CARD3_PROB": {
|
||||
"value": 0.05,
|
||||
"help": "签到好感度双倍加持卡Ⅲ掉落概率",
|
||||
"default_value": 0.05
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
_file = Path(f"{DATA_PATH}/not_show_sign_rank_user.json")
|
||||
try:
|
||||
@@ -90,7 +111,14 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
|
||||
|
||||
@sign_rank.handle()
|
||||
async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
|
||||
await sign_rank.send(await group_impression_rank(event.group_id))
|
||||
num = get_message_text(event.json())
|
||||
if is_number(num) and 51 > int(num) > 10:
|
||||
num = int(num)
|
||||
else:
|
||||
num = 10
|
||||
_image = await group_impression_rank(event.group_id, num)
|
||||
if _image:
|
||||
await sign_rank.send(image(b64=_image.pic2bs4()))
|
||||
|
||||
|
||||
@total_sign_rank.handle()
|
||||
|
||||
@@ -10,16 +10,6 @@ SIGN_BACKGROUND_PATH = Path(SIGN_RESOURCE_PATH) / 'background'
|
||||
SIGN_BORDER_PATH.mkdir(exist_ok=True, parents=True)
|
||||
SIGN_BACKGROUND_PATH.mkdir(exist_ok=True, parents=True)
|
||||
|
||||
SIGN_CARD1_PROB = 0.2 # 好感度双倍加持卡Ⅰ
|
||||
SIGN_CARD2_PROB = 0.09 # 好感度双倍加持卡Ⅱ
|
||||
SIGN_CARD3_PROB = 0.05 # 好感度双倍加持卡Ⅲ
|
||||
|
||||
PROB_DATA = {
|
||||
SIGN_CARD3_PROB: '好感度双倍加持卡Ⅲ',
|
||||
SIGN_CARD2_PROB: '好感度双倍加持卡Ⅱ',
|
||||
SIGN_CARD1_PROB: '好感度双倍加持卡Ⅰ'
|
||||
}
|
||||
|
||||
|
||||
lik2relation = {
|
||||
'0': '路人',
|
||||
|
||||
@@ -5,11 +5,13 @@ from models.bag_user import BagUser
|
||||
from configs.config import NICKNAME
|
||||
from nonebot.adapters.cqhttp import MessageSegment
|
||||
from asyncio.exceptions import TimeoutError
|
||||
from utils.image_utils import CreateImg
|
||||
from utils.image_utils import CreateImg, CreateMat
|
||||
from services.db_context import db
|
||||
from .utils import get_card, SIGN_TODAY_CARD_PATH
|
||||
from typing import Optional
|
||||
from services.log import logger
|
||||
from .random_event import random_event
|
||||
from utils.data_utils import init_rank
|
||||
from io import BytesIO
|
||||
import random
|
||||
import aiohttp
|
||||
@@ -82,31 +84,9 @@ async def group_user_check(nickname: str, user_qq: int, group: int) -> MessageSe
|
||||
return await get_card(user, nickname, None, gold, "", is_card_view=True)
|
||||
|
||||
|
||||
async def group_impression_rank(group: int) -> str:
|
||||
result = "\t好感度排行榜\t\n"
|
||||
async def group_impression_rank(group: int, num: int) -> Optional[CreateMat]:
|
||||
user_qq_list, impression_list, _ = await SignGroupUser.get_all_impression(group)
|
||||
_count = 11
|
||||
if user_qq_list and impression_list:
|
||||
for i in range(1, len(user_qq_list)):
|
||||
if len(user_qq_list) == 0 or len(impression_list) == 0 or i == _count:
|
||||
break
|
||||
impression = max(impression_list)
|
||||
index = impression_list.index(impression)
|
||||
user_qq = user_qq_list[index]
|
||||
try:
|
||||
user_name = (
|
||||
await GroupInfoUser.get_member_info(user_qq, group)
|
||||
).user_name
|
||||
except AttributeError:
|
||||
logger.info(f"USER {user_qq}, GROUP {group} 不在群内")
|
||||
_count += 1
|
||||
impression_list.remove(impression)
|
||||
user_qq_list.remove(user_qq)
|
||||
continue
|
||||
result += f"{i - _count + 11}. {user_name}: {impression:.2f}\n"
|
||||
impression_list.remove(impression)
|
||||
user_qq_list.remove(user_qq)
|
||||
return result[:-1]
|
||||
return await init_rank("好感度排行榜", user_qq_list, impression_list, group, num)
|
||||
|
||||
|
||||
async def random_gold(user_id, group_id, impression):
|
||||
|
||||
@@ -1,21 +1,30 @@
|
||||
from configs.config import MAX_SIGN_GOLD
|
||||
from typing import Union
|
||||
from .config import PROB_DATA
|
||||
from configs.config import Config
|
||||
import random
|
||||
|
||||
|
||||
PROB_DATA = None
|
||||
|
||||
|
||||
def random_event(impression: float) -> 'Union[str, int], str':
|
||||
"""
|
||||
签到随机事件
|
||||
:param impression: 好感度
|
||||
:return: 额外奖励 和 类型
|
||||
"""
|
||||
global PROB_DATA
|
||||
if not PROB_DATA:
|
||||
PROB_DATA = {
|
||||
Config.get_config("sign_in", "SIGN_CARD3_PROB"): '好感度双倍加持卡Ⅲ',
|
||||
Config.get_config("sign_in", "SIGN_CARD2_PROB"): '好感度双倍加持卡Ⅱ',
|
||||
Config.get_config("sign_in", "SIGN_CARD1_PROB"): '好感度双倍加持卡Ⅰ'
|
||||
}
|
||||
rand = random.random() - impression / 1000
|
||||
for prob in PROB_DATA.keys():
|
||||
if rand <= prob:
|
||||
return PROB_DATA[prob], 'props'
|
||||
gold = random.randint(1, random.randint(1, int(1 if impression < 1 else impression)))
|
||||
gold = MAX_SIGN_GOLD if gold > MAX_SIGN_GOLD else gold
|
||||
max_sign_gold = Config.get_config("sign_in", "MAX_SIGN_GOLD")
|
||||
gold = max_sign_gold if gold > max_sign_gold else gold
|
||||
return gold, 'gold'
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ from .config import (
|
||||
from models.sign_group_user import SignGroupUser
|
||||
from models.group_member_info import GroupInfoUser
|
||||
from nonebot.adapters.cqhttp import MessageSegment
|
||||
from utils.utils import get_user_avatar
|
||||
from utils.image_utils import CreateImg
|
||||
from utils.message_builder import image
|
||||
from configs.config import NICKNAME
|
||||
@@ -22,7 +23,6 @@ from io import BytesIO
|
||||
import asyncio
|
||||
import random
|
||||
import nonebot
|
||||
import aiohttp
|
||||
import os
|
||||
|
||||
|
||||
@@ -41,13 +41,6 @@ async def init_image():
|
||||
clear_sign_data_pic()
|
||||
|
||||
|
||||
async def _get_pic(qq):
|
||||
url = f"http://q1.qlogo.cn/g?b=qq&nk={qq}&s=100"
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url, timeout=5) as response:
|
||||
return await response.read()
|
||||
|
||||
|
||||
async def get_card(
|
||||
user: "SignGroupUser",
|
||||
nickname: str,
|
||||
@@ -80,7 +73,7 @@ async def get_card(
|
||||
"sign/today_card",
|
||||
)
|
||||
is_card_view = True
|
||||
ava = BytesIO(await _get_pic(user_id))
|
||||
ava = BytesIO(await get_user_avatar(user_id))
|
||||
uid = await GroupInfoUser.get_group_member_uid(
|
||||
user.user_qq, user.belonging_group
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user