update 0.0.6.0

This commit is contained in:
HibiKier
2021-11-04 16:11:50 +08:00
parent 21c1950898
commit 19d650c35d
217 changed files with 8213 additions and 5697 deletions
+33 -5
View File
@@ -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
View File
@@ -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 -25
View File
@@ -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):
+13 -4
View File
@@ -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'
+2 -9
View File
@@ -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
)