format 一下

This commit is contained in:
qwerdvd 2023-09-30 16:32:30 +08:00
parent e6a02824ac
commit a15dea8361
18 changed files with 3099 additions and 3011 deletions

View File

@ -1,60 +1,70 @@
# flake8: noqa # flake8: noqa
OLD_URL = "https://api-takumi.mihoyo.com" OLD_URL = "https://api-takumi.mihoyo.com"
OS_OLD_URL = "https://api-os-takumi.mihoyo.com" OS_OLD_URL = "https://api-os-takumi.mihoyo.com"
NEW_URL = 'https://api-takumi-record.mihoyo.com' NEW_URL = "https://api-takumi-record.mihoyo.com"
OS_URL = "https://sg-public-api.hoyolab.com" OS_URL = "https://sg-public-api.hoyolab.com"
OS_INFO_URL = "https://bbs-api-os.hoyolab.com" OS_INFO_URL = "https://bbs-api-os.hoyolab.com"
STAR_RAIL_SIGN_INFO_URL = f'{OLD_URL}/event/luna/info' STAR_RAIL_SIGN_INFO_URL = f"{OLD_URL}/event/luna/info"
STAR_RAIL_SIGN_INFO_URL_OS = f'{OS_URL}/event/luna/os/info' STAR_RAIL_SIGN_INFO_URL_OS = f"{OS_URL}/event/luna/os/info"
STAR_RAIL_SIGN_LIST_URL = f'{OLD_URL}/event/luna/home' STAR_RAIL_SIGN_LIST_URL = f"{OLD_URL}/event/luna/home"
STAR_RAIL_SIGN_LIST_URL_OS = f'{OS_URL}/event/luna/os/home' STAR_RAIL_SIGN_LIST_URL_OS = f"{OS_URL}/event/luna/os/home"
STAR_RAIL_SIGN_EXTRA_INFO_URL = f'{OLD_URL}/event/luna/extra_info' STAR_RAIL_SIGN_EXTRA_INFO_URL = f"{OLD_URL}/event/luna/extra_info"
STAR_RAIL_SIGN_EXTRA_REWARD_URL = f'{OLD_URL}/event/luna/extra_reward' STAR_RAIL_SIGN_EXTRA_REWARD_URL = f"{OLD_URL}/event/luna/extra_reward"
STAR_RAIL_SIGN_URL = f'{OLD_URL}/event/luna/sign' STAR_RAIL_SIGN_URL = f"{OLD_URL}/event/luna/sign"
STAR_RAIL_SIGN_URL_OS = f'{OS_URL}/event/luna/os/sign' STAR_RAIL_SIGN_URL_OS = f"{OS_URL}/event/luna/os/sign"
STAR_RAIL_MONTH_INFO_URL = f'{OLD_URL}/event/srledger/month_info' # 开拓阅历接口 STAR_RAIL_MONTH_INFO_URL = (
f"{OLD_URL}/event/srledger/month_info"
) # 开拓阅历接口
STAR_RAIL_MONTH_DETAIL_URL = ( STAR_RAIL_MONTH_DETAIL_URL = (
f'{OLD_URL}/event/srledger/month_detail' # 开拓阅历详情接口 f"{OLD_URL}/event/srledger/month_detail" # 开拓阅历详情接口
) )
STAR_RAIL_NOTE_URL = f'{NEW_URL}/game_record/app/hkrpg/api/note' # 实时便签接口 STAR_RAIL_NOTE_URL = (
STAR_RAIL_NOTE_URL_OS = f'{OS_INFO_URL}/game_record/hkrpg/api/note' # OS实时便签接口 f"{NEW_URL}/game_record/app/hkrpg/api/note"
STAR_RAIL_INDEX_URL = f'{NEW_URL}/game_record/app/hkrpg/api/index' # 角色橱窗接口 ) # 实时便签接口
STAR_RAIL_NOTE_URL_OS = (
f"{OS_INFO_URL}/game_record/hkrpg/api/note"
) # OS实时便签接口
STAR_RAIL_INDEX_URL = (
f"{NEW_URL}/game_record/app/hkrpg/api/index"
) # 角色橱窗接口
STAR_RAIL_INDEX_URL_OS = ( STAR_RAIL_INDEX_URL_OS = (
f'{OS_INFO_URL}/game_record/hkrpg/api/index' # OS角色橱窗接口 f"{OS_INFO_URL}/game_record/hkrpg/api/index" # OS角色橱窗接口
) )
STAR_RAIL_AVATAR_BASIC_URL = ( STAR_RAIL_AVATAR_BASIC_URL = (
f'{NEW_URL}/game_record/app/hkrpg/api/avatar/basic' # 全部角色接口 f"{NEW_URL}/game_record/app/hkrpg/api/avatar/basic" # 全部角色接口
) )
STAR_RAIL_ROLE_BASIC_INFO_URL = ( STAR_RAIL_ROLE_BASIC_INFO_URL = (
f'{NEW_URL}/game_record/app/hkrpg/api/role/basicInfo' # 角色基础信息接口 f"{NEW_URL}/game_record/app/hkrpg/api/role/basicInfo" # 角色基础信息接口
) )
STAR_RAIL_ROLE_BASIC_INFO_URL_OS = f'{OS_INFO_URL}/game_record/hkrpg/api/index' STAR_RAIL_ROLE_BASIC_INFO_URL_OS = f"{OS_INFO_URL}/game_record/hkrpg/api/index"
STAR_RAIL_AVATAR_INFO_URL = ( STAR_RAIL_AVATAR_INFO_URL = (
f'{NEW_URL}/game_record/app/hkrpg/api/avatar/info' # 角色详细信息接口 f"{NEW_URL}/game_record/app/hkrpg/api/avatar/info" # 角色详细信息接口
) )
STAR_RAIL_AVATAR_INFO_URL_OS = ( STAR_RAIL_AVATAR_INFO_URL_OS = (
f'{OS_INFO_URL}/game_record/hkrpg/api/avatar/info' # OS角色详细信息接口 f"{OS_INFO_URL}/game_record/hkrpg/api/avatar/info" # OS角色详细信息接口
) )
CHALLENGE_INFO_URL = f'{NEW_URL}/game_record/app/hkrpg/api/challenge' CHALLENGE_INFO_URL = f"{NEW_URL}/game_record/app/hkrpg/api/challenge"
CHALLENGE_INFO_URL_OS = f'{OS_INFO_URL}/game_record/hkrpg/api/challenge' CHALLENGE_INFO_URL_OS = f"{OS_INFO_URL}/game_record/hkrpg/api/challenge"
ROGUE_INFO_URL = f'{NEW_URL}/game_record/app/hkrpg/api/rogue' # 角色模拟宇宙信息接口 ROGUE_INFO_URL = (
f"{NEW_URL}/game_record/app/hkrpg/api/rogue"
) # 角色模拟宇宙信息接口
ROGUE_LOCUST_INFO_URL = ( ROGUE_LOCUST_INFO_URL = (
f'{NEW_URL}/game_record/app/hkrpg/api/rogue_locust' # 角色寰宇蝗灾信息接口 f"{NEW_URL}/game_record/app/hkrpg/api/rogue_locust" # 角色寰宇蝗灾信息接口
) )
STAR_RAIL_GACHA_LOG_URL = f'{OLD_URL}/common/gacha_record/api/getGachaLog' STAR_RAIL_GACHA_LOG_URL = f"{OLD_URL}/common/gacha_record/api/getGachaLog"
STAR_RAIL_GACHA_LOG_URL_OS = ( STAR_RAIL_GACHA_LOG_URL_OS = (
f'{OS_OLD_URL}/common/gacha_record/api/getGachaLog' f"{OS_OLD_URL}/common/gacha_record/api/getGachaLog"
) )
GET_FP_URL = 'https://public-data-api.mihoyo.com/device-fp/api/getFp' GET_FP_URL = "https://public-data-api.mihoyo.com/device-fp/api/getFp"
GET_FP_URL_OS = 'https://sg-public-data-api.hoyoverse.com/device-fp/api/getFp' GET_FP_URL_OS = "https://sg-public-data-api.hoyoverse.com/device-fp/api/getFp"
# CREATE_QRCODE = f'{OLD_URL}/event/bbs_sign_reward/gen_auth_code' # CREATE_QRCODE = f'{OLD_URL}/event/bbs_sign_reward/gen_auth_code'
STAR_RAIL_WIDGRT_URL = f'{NEW_URL}/game_record/app/hkrpg/aapi/widget' STAR_RAIL_WIDGRT_URL = f"{NEW_URL}/game_record/app/hkrpg/aapi/widget"
_API = locals() _API = locals()

View File

@ -46,7 +46,16 @@ TEXT_PATH = Path(__file__).parent / 'texture2D'
bg_img = Image.open(TEXT_PATH / 'bg.png') bg_img = Image.open(TEXT_PATH / 'bg.png')
white_color = (213, 213, 213) white_color = (213, 213, 213)
NUM_MAP = {0: '', 1: '', 2: '', 3: '', 4: '', 5: '', 6: '', 7: ''} NUM_MAP = {
0: '',
1: '',
2: '',
3: '',
4: '',
5: '',
6: '',
7: '',
}
RANK_MAP = { RANK_MAP = {
1: '_rank1.png', 1: '_rank1.png',

View File

@ -59,7 +59,9 @@ class JingYuan(BaseAvatar):
def extra_ability(self): def extra_ability(self):
logger.info('额外能力') logger.info('额外能力')
logger.info('【神君】下回合的攻击段数大于等于6段, 则其下回合的暴击伤害提高25%') logger.info(
'【神君】下回合的攻击段数大于等于6段, 则其下回合的暴击伤害提高25%'
)
self.extra_ability_attribute['CriticalDamageBase'] = 0.25 self.extra_ability_attribute['CriticalDamageBase'] = 0.25
logger.info('施放战技后, 暴击率提升10%') logger.info('施放战技后, 暴击率提升10%')
self.extra_ability_attribute['CriticalChanceBase'] = 0.1 self.extra_ability_attribute['CriticalChanceBase'] = 0.1
@ -118,7 +120,9 @@ class Danhengil(BaseAvatar):
def extra_ability(self): def extra_ability(self):
logger.info('额外能力') logger.info('额外能力')
logger.info('对拥有虚数属性弱点的敌方目标造成伤害时, 暴击伤害提高24%') logger.info(
'对拥有虚数属性弱点的敌方目标造成伤害时, 暴击伤害提高24%'
)
self.extra_ability_attribute['CriticalDamageBase'] = 0.24 self.extra_ability_attribute['CriticalDamageBase'] = 0.24
@ -316,7 +320,9 @@ class Welt(BaseAvatar):
def extra_ability(self): def extra_ability(self):
logger.info('额外能力') logger.info('额外能力')
logger.info('施放终结技时, 有100%基础概率使目标受到的伤害提高12%, 持续2回合。') logger.info(
'施放终结技时, 有100%基础概率使目标受到的伤害提高12%, 持续2回合。'
)
logger.info('对被弱点击破的敌方目标造成的伤害提高20') logger.info('对被弱点击破的敌方目标造成的伤害提高20')
self.extra_ability_attribute['AllDamageAddedRatio'] = 0.32 self.extra_ability_attribute['AllDamageAddedRatio'] = 0.32

File diff suppressed because it is too large Load Diff

View File

@ -295,7 +295,9 @@ class RoleInstance:
# 检查是否有某一属性的抗性穿透 # 检查是否有某一属性的抗性穿透
attr_name = attr.split('ResistancePenetration')[0] attr_name = attr.split('ResistancePenetration')[0]
if attr_name in (self.avatar.avatar_element, 'AllDamage'): if attr_name in (self.avatar.avatar_element, 'AllDamage'):
logger.info(f'{attr_name}属性有{merged_attr[attr]}穿透加成') logger.info(
f'{attr_name}属性有{merged_attr[attr]}穿透加成'
)
enemy_status_resistance += merged_attr[attr] enemy_status_resistance += merged_attr[attr]
# 检查是否有某一技能属性的抗性穿透 # 检查是否有某一技能属性的抗性穿透
if attr_name.__contains__('_'): if attr_name.__contains__('_'):

File diff suppressed because it is too large Load Diff

View File

@ -130,7 +130,9 @@ async def get_char_args(
if isinstance(char_data, str): if isinstance(char_data, str):
return char_data return char_data
else: else:
for i, s in enumerate(['头部', '手部', '躯干', '腿部', '位面球', '连结绳']): for i, s in enumerate(
['头部', '手部', '躯干', '腿部', '位面球', '连结绳']
):
if '赤沙' in part: if '赤沙' in part:
continue continue
if part[-1] in PieceName_ilst[i]: if part[-1] in PieceName_ilst[i]:

View File

@ -54,7 +54,9 @@ async def draw_enka_card(uid: str, char_list: List, showfrom: int = 0):
return await convert_img(Image.new('RGBA', (0, 1), (255, 255, 255))) return await convert_img(Image.new('RGBA', (0, 1), (255, 255, 255)))
else: else:
line1 = f'UID {uid} 刷新成功' line1 = f'UID {uid} 刷新成功'
line2 = f'可以使用 sr查询{char_data_list[0]["avatarName"]} 查询详情角色面板' line2 = (
f'可以使用 sr查询{char_data_list[0]["avatarName"]} 查询详情角色面板'
)
char_num = len(char_data_list) char_num = len(char_data_list)
if char_num <= 4: if char_num <= 4:
based_w, based_h = 1380, 926 based_w, based_h = 1380, 926

View File

@ -8,7 +8,9 @@ from gsuid_core.utils.plugins_config.models import (
) )
CONIFG_DEFAULT: Dict[str, GSC] = { CONIFG_DEFAULT: Dict[str, GSC] = {
'SignTime': GsListStrConfig('每晚签到时间设置', '每晚米游社签到时间设置(时,分)', ['0', '38']), 'SignTime': GsListStrConfig(
'每晚签到时间设置', '每晚米游社签到时间设置(时,分)', ['0', '38']
),
'SignReportSimple': GsBoolConfig( 'SignReportSimple': GsBoolConfig(
'简洁签到报告', '简洁签到报告',
'开启后可以大大减少每日签到报告字数', '开启后可以大大减少每日签到报告字数',

View File

@ -39,6 +39,8 @@ async def get_gachalog_by_link(bot: Bot, ev: Event):
if ev.command.startswith('强制'): if ev.command.startswith('强制'):
await bot.logger.info('[WARNING]本次为强制刷新') await bot.logger.info('[WARNING]本次为强制刷新')
is_force = True is_force = True
await bot.send(f'UID{uid}开始执行[刷新抽卡记录],需要一定时间...请勿重复触发!') await bot.send(
f'UID{uid}开始执行[刷新抽卡记录],需要一定时间...请勿重复触发!'
)
im = await save_gachalogs(uid, gacha_url, None, is_force) im = await save_gachalogs(uid, gacha_url, None, is_force)
return await bot.send(im) return await bot.send(im)

View File

@ -112,7 +112,12 @@ async def save_gachalogs(
uid, gacha_url, gachalogs_history, is_force uid, gacha_url, gachalogs_history, is_force
) )
else: else:
new_data = {'始发跃迁': [], '群星跃迁': [], '角色跃迁': [], '光锥跃迁': []} new_data = {
'始发跃迁': [],
'群星跃迁': [],
'角色跃迁': [],
'光锥跃迁': [],
}
if gachalogs_history: if gachalogs_history:
for i in ['始发跃迁', '群星跃迁', '角色跃迁', '光锥跃迁']: for i in ['始发跃迁', '群星跃迁', '角色跃迁', '光锥跃迁']:
for item in raw_data[i]: for item in raw_data[i]:
@ -128,7 +133,12 @@ async def save_gachalogs(
if raw_data == {} or not raw_data: if raw_data == {} or not raw_data:
return '请给出正确的抽卡记录链接或链接已失效' return '请给出正确的抽卡记录链接或链接已失效'
temp_data = {'始发跃迁': [], '群星跃迁': [], '角色跃迁': [], '光锥跃迁': []} temp_data = {
'始发跃迁': [],
'群星跃迁': [],
'角色跃迁': [],
'光锥跃迁': [],
}
for i in ['始发跃迁', '群星跃迁', '角色跃迁', '光锥跃迁']: for i in ['始发跃迁', '群星跃迁', '角色跃迁', '光锥跃迁']:
for item in raw_data[i]: for item in raw_data[i]:
if item not in temp_data[i]: if item not in temp_data[i]:

View File

@ -1,278 +1,279 @@
import json import json
from pathlib import Path from pathlib import Path
from typing import Union from typing import Union
from datetime import datetime from datetime import datetime
from PIL import Image, ImageDraw from PIL import Image, ImageDraw
from msgspec import json as msgjson from msgspec import json as msgjson
from gsuid_core.logger import logger from gsuid_core.logger import logger
from ..utils.mys_api import mys_api from ..utils.mys_api import mys_api
from ..utils.error_reply import get_error from ..utils.error_reply import get_error
from ..utils.image.convert import convert_img from ..utils.image.convert import convert_img
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
from ..utils.fonts.starrail_fonts import sr_font_20, sr_font_28, sr_font_34 from ..utils.fonts.starrail_fonts import sr_font_20, sr_font_28, sr_font_34
TEXT_PATH = Path(__file__).parent / 'texture2d' TEXT_PATH = Path(__file__).parent / 'texture2d'
monthly_bg = Image.open(TEXT_PATH / 'monthly_bg.png') monthly_bg = Image.open(TEXT_PATH / 'monthly_bg.png')
avatar_default = Image.open(TEXT_PATH / '200101.png') avatar_default = Image.open(TEXT_PATH / '200101.png')
first_color = (29, 29, 29) first_color = (29, 29, 29)
second_color = (67, 61, 56) second_color = (67, 61, 56)
second_color2 = (98, 98, 98) second_color2 = (98, 98, 98)
black_color = (54, 54, 54) black_color = (54, 54, 54)
white_color = (213, 213, 213) white_color = (213, 213, 213)
COLOR_MAP = { COLOR_MAP = {
'每日活跃': (248, 227, 157), '每日活跃': (248, 227, 157),
'活动奖励': (99, 231, 176), '活动奖励': (99, 231, 176),
'冒险奖励': (114, 205, 251), '冒险奖励': (114, 205, 251),
'模拟宇宙奖励': (160, 149, 248), '模拟宇宙奖励': (160, 149, 248),
'忘却之庭奖励': (221, 119, 250), '忘却之庭奖励': (221, 119, 250),
'邮件奖励': (244, 110, 104), '邮件奖励': (244, 110, 104),
'其他': (255, 242, 200), '其他': (255, 242, 200),
'Daily Activity': (248, 227, 157), 'Daily Activity': (248, 227, 157),
'Events': (99, 231, 176), 'Events': (99, 231, 176),
'Adventure': (114, 205, 251), 'Adventure': (114, 205, 251),
'moni': (160, 149, 248), 'moni': (160, 149, 248),
'Spiral Abyss': (221, 119, 250), 'Spiral Abyss': (221, 119, 250),
'Quests': (244, 110, 104), 'Quests': (244, 110, 104),
'Other': (255, 242, 200), 'Other': (255, 242, 200),
} }
async def draw_note_img(sr_uid: str) -> Union[bytes, str]: async def draw_note_img(sr_uid: str) -> Union[bytes, str]:
path = PLAYER_PATH / str(sr_uid) path = PLAYER_PATH / str(sr_uid)
if not path.exists(): if not path.exists():
path.mkdir(parents=True, exist_ok=True) path.mkdir(parents=True, exist_ok=True)
# 获取当前时间 # 获取当前时间
now = datetime.now() now = datetime.now()
current_year_mon = now.strftime('%Y-%m') current_year_mon = now.strftime('%Y-%m')
add_month = '' add_month = ''
if int(now.month) < 10: if int(now.month) < 10:
add_month = '0' add_month = '0'
now_month = str(now.year) + str(add_month) + str(now.month) now_month = str(now.year) + str(add_month) + str(now.month)
# 获取数据 # 获取数据
data = await mys_api.get_award(sr_uid, now_month) data = await mys_api.get_award(sr_uid, now_month)
if isinstance(data, int): if isinstance(data, int):
return get_error(data) return get_error(data)
# 保存数据 # 保存数据
with Path.open( with Path.open(
path / f'monthly_{current_year_mon}.json', 'w', encoding='utf-8' path / f'monthly_{current_year_mon}.json', 'w', encoding='utf-8'
) as f: ) as f:
save_json_data = msgjson.format(msgjson.encode(data), indent=4) save_json_data = msgjson.format(msgjson.encode(data), indent=4)
save_data = json.dumps( save_data = json.dumps(
{ {
'data_time': now.strftime('%Y-%m-%d %H:%M:%S'), 'data_time': now.strftime('%Y-%m-%d %H:%M:%S'),
'data': save_json_data.decode('utf-8'), 'data': save_json_data.decode('utf-8'),
}, },
ensure_ascii=False, ensure_ascii=False,
) )
f.write(save_data) f.write(save_data)
# 获取上月数据 # 获取上月数据
last_month = now.month - 1 last_month = now.month - 1
last_year = now.year last_year = now.year
if last_month == 0: if last_month == 0:
last_month = 12 last_month = 12
last_year -= 1 last_year -= 1
last_year_mon = f'{last_year}-{last_month:02d}' last_year_mon = f'{last_year}-{last_month:02d}'
last_monthly_path = path / f'monthly_{last_year_mon}.json' last_monthly_path = path / f'monthly_{last_year_mon}.json'
if last_monthly_path.exists(): if last_monthly_path.exists():
with Path.open(last_monthly_path, encoding='utf-8') as f: with Path.open(last_monthly_path, encoding='utf-8') as f:
last_monthly_data = json.load(f) last_monthly_data = json.load(f)
last_monthly_data = last_monthly_data['data'] last_monthly_data = last_monthly_data['data']
else: else:
add_month = '' add_month = ''
if int(last_month) < 10: if int(last_month) < 10:
add_month = '0' add_month = '0'
find_last_month = str(last_year) + str(add_month) + str(last_month) find_last_month = str(last_year) + str(add_month) + str(last_month)
last_monthly_data = await mys_api.get_award(sr_uid, find_last_month) last_monthly_data = await mys_api.get_award(sr_uid, find_last_month)
if isinstance(last_monthly_data, int): if isinstance(last_monthly_data, int):
return get_error(last_monthly_data) return get_error(last_monthly_data)
# nickname and level # nickname and level
role_basic_info = await mys_api.get_role_basic_info(sr_uid) role_basic_info = await mys_api.get_role_basic_info(sr_uid)
if isinstance(role_basic_info, int): if isinstance(role_basic_info, int):
return get_error(role_basic_info) return get_error(role_basic_info)
nickname = role_basic_info.nickname nickname = role_basic_info.nickname
day_hcoin = data.day_data.current_hcoin day_hcoin = data.day_data.current_hcoin
day_rails_pass = data.day_data.current_rails_pass day_rails_pass = data.day_data.current_rails_pass
lastday_hcoin = 0 lastday_hcoin = 0
lastday_rails_pass = 0 lastday_rails_pass = 0
if int(sr_uid[0]) < 6: if int(sr_uid[0]) < 6:
lastday_hcoin = data.day_data.last_hcoin lastday_hcoin = data.day_data.last_hcoin
lastday_rails_pass = data.day_data.last_rails_pass lastday_rails_pass = data.day_data.last_rails_pass
month_hcoin = data.month_data.current_hcoin month_hcoin = data.month_data.current_hcoin
month_rails_pass = data.month_data.current_rails_pass month_rails_pass = data.month_data.current_rails_pass
lastmonth_hcoin = data.month_data.last_hcoin lastmonth_hcoin = data.month_data.last_hcoin
lastmonth_rails_pass = data.month_data.last_rails_pass lastmonth_rails_pass = data.month_data.last_rails_pass
day_hcoin_str = await int_carry(day_hcoin) day_hcoin_str = await int_carry(day_hcoin)
day_rails_pass_str = await int_carry(day_rails_pass) day_rails_pass_str = await int_carry(day_rails_pass)
month_hcoin_str = await int_carry(month_hcoin) month_hcoin_str = await int_carry(month_hcoin)
month_rails_pass_str = await int_carry(month_rails_pass) month_rails_pass_str = await int_carry(month_rails_pass)
lastday_hcoin_str = await int_carry(lastday_hcoin) lastday_hcoin_str = await int_carry(lastday_hcoin)
lastday_rails_pass_str = await int_carry(lastday_rails_pass) lastday_rails_pass_str = await int_carry(lastday_rails_pass)
lastmonth_hcoin_str = await int_carry(lastmonth_hcoin) lastmonth_hcoin_str = await int_carry(lastmonth_hcoin)
lastmonth_rails_pass_str = await int_carry(lastmonth_rails_pass) lastmonth_rails_pass_str = await int_carry(lastmonth_rails_pass)
img = monthly_bg.copy() img = monthly_bg.copy()
avatar_img = avatar_default.copy() avatar_img = avatar_default.copy()
char_pic = avatar_img.convert('RGBA').resize( char_pic = avatar_img.convert('RGBA').resize(
(125, 125), Image.Resampling.LANCZOS # type: ignore (125, 125),
) Image.Resampling.LANCZOS, # type: ignore
img.paste(char_pic, (115, 133), char_pic) )
img_draw = ImageDraw.Draw(img) img.paste(char_pic, (115, 133), char_pic)
img_draw = ImageDraw.Draw(img)
# 写Nickname
img_draw.text( # 写Nickname
(310, 184), nickname, font=sr_font_34, fill=first_color, anchor='lm' img_draw.text(
) (310, 184), nickname, font=sr_font_34, fill=first_color, anchor='lm'
)
# 写UID
img_draw.text( # 写UID
(267, 219), img_draw.text(
f'UID {sr_uid}', (267, 219),
font=sr_font_20, f'UID {sr_uid}',
fill=second_color2, font=sr_font_20,
anchor='lm', fill=second_color2,
) anchor='lm',
)
# 写本日星琼
img_draw.text( # 写本日星琼
(283, 326), img_draw.text(
day_hcoin_str, (283, 326),
font=sr_font_28, day_hcoin_str,
fill=white_color, font=sr_font_28,
anchor='lm', fill=white_color,
) anchor='lm',
)
# 写本月星琼
img_draw.text( # 写本月星琼
(513, 326), img_draw.text(
month_hcoin_str, (513, 326),
font=sr_font_28, month_hcoin_str,
fill=white_color, font=sr_font_28,
anchor='lm', fill=white_color,
) anchor='lm',
)
# 写昨日星琼
img_draw.text( # 写昨日星琼
(283, 366), img_draw.text(
lastday_hcoin_str, (283, 366),
font=sr_font_28, lastday_hcoin_str,
fill=black_color, font=sr_font_28,
anchor='lm', fill=black_color,
) anchor='lm',
)
# 写上月星琼
img_draw.text( # 写上月星琼
(513, 366), img_draw.text(
lastmonth_hcoin_str, (513, 366),
font=sr_font_28, lastmonth_hcoin_str,
fill=black_color, font=sr_font_28,
anchor='lm', fill=black_color,
) anchor='lm',
)
# 写本日铁票
img_draw.text( # 写本日铁票
(283, 431), img_draw.text(
day_rails_pass_str, (283, 431),
font=sr_font_28, day_rails_pass_str,
fill=white_color, font=sr_font_28,
anchor='lm', fill=white_color,
) anchor='lm',
)
# 写本月铁票
img_draw.text( # 写本月铁票
(513, 431), img_draw.text(
month_rails_pass_str, (513, 431),
font=sr_font_28, month_rails_pass_str,
fill=white_color, font=sr_font_28,
anchor='lm', fill=white_color,
) anchor='lm',
)
# 写昨日铁票
img_draw.text( # 写昨日铁票
(283, 473), img_draw.text(
lastday_rails_pass_str, (283, 473),
font=sr_font_28, lastday_rails_pass_str,
fill=black_color, font=sr_font_28,
anchor='lm', fill=black_color,
) anchor='lm',
)
# 写上月铁票
img_draw.text( # 写上月铁票
(513, 473), img_draw.text(
lastmonth_rails_pass_str, (513, 473),
font=sr_font_28, lastmonth_rails_pass_str,
fill=black_color, font=sr_font_28,
anchor='lm', fill=black_color,
) anchor='lm',
xy = ((0, 0), (2100, 2100)) )
temp = -90 xy = ((0, 0), (2100, 2100))
if not data.month_data.group_by: temp = -90
pie_image = Image.new('RGBA', (2100, 2100), color=(255, 255, 255, 0)) if not data.month_data.group_by:
pie_image_draw = ImageDraw.Draw(pie_image) pie_image = Image.new('RGBA', (2100, 2100), color=(255, 255, 255, 0))
pie_image_draw.ellipse(xy, fill=(128, 128, 128)) pie_image_draw = ImageDraw.Draw(pie_image)
else: pie_image_draw.ellipse(xy, fill=(128, 128, 128))
pie_image = Image.new('RGBA', (2100, 2100), color=(255, 255, 255, 0)) else:
pie_image_draw = ImageDraw.Draw(pie_image) pie_image = Image.new('RGBA', (2100, 2100), color=(255, 255, 255, 0))
for _index, i in enumerate(data.month_data.group_by): pie_image_draw = ImageDraw.Draw(pie_image)
pie_image_draw.pieslice( for _index, i in enumerate(data.month_data.group_by):
xy, pie_image_draw.pieslice(
temp, xy,
temp + (i.percent / 100) * 360, temp,
COLOR_MAP[i.action_name], temp + (i.percent / 100) * 360,
) COLOR_MAP[i.action_name],
temp = temp + (i.percent / 100) * 360 )
# 绘制蒙版圆形 temp = temp + (i.percent / 100) * 360
new_image = Image.new('RGBA', (2100, 2100), color=(255, 255, 255, 0)) # 绘制蒙版圆形
pie_image_draw.ellipse((150, 150, 1950, 1950), fill=(255, 255, 255, 0)) new_image = Image.new('RGBA', (2100, 2100), color=(255, 255, 255, 0))
pie_image_draw.ellipse((150, 150, 1950, 1950), fill=(255, 255, 255, 0))
position = (1050, 1050)
pie_image.paste(new_image, position, mask=new_image) position = (1050, 1050)
result_pie = pie_image.resize((210, 210)) pie_image.paste(new_image, position, mask=new_image)
img.paste(result_pie, (138, 618), result_pie) result_pie = pie_image.resize((210, 210))
img.paste(result_pie, (138, 618), result_pie)
if last_monthly_data:
pie_image = Image.new('RGBA', (2100, 2100), color=(255, 255, 255, 0)) if last_monthly_data:
pie_image_draw = ImageDraw.Draw(pie_image) pie_image = Image.new('RGBA', (2100, 2100), color=(255, 255, 255, 0))
for _index, i in enumerate(last_monthly_data.month_data.group_by): pie_image_draw = ImageDraw.Draw(pie_image)
pie_image_draw.pieslice( for _index, i in enumerate(last_monthly_data.month_data.group_by):
xy, pie_image_draw.pieslice(
temp, xy,
temp + (i.percent / 100) * 360, temp,
COLOR_MAP[i.action_name], temp + (i.percent / 100) * 360,
) COLOR_MAP[i.action_name],
temp = temp + (i.percent / 100) * 360 )
else: temp = temp + (i.percent / 100) * 360
pie_image = Image.new('RGBA', (2100, 2100), color=(255, 255, 255, 0)) else:
pie_image_draw = ImageDraw.Draw(pie_image) pie_image = Image.new('RGBA', (2100, 2100), color=(255, 255, 255, 0))
pie_image_draw.ellipse(xy, fill=(128, 128, 128)) pie_image_draw = ImageDraw.Draw(pie_image)
pie_image_draw.ellipse(xy, fill=(128, 128, 128))
# 绘制蒙版圆形
new_image = Image.new('RGBA', (2100, 2100), color=(255, 255, 255, 0)) # 绘制蒙版圆形
pie_image_draw.ellipse((150, 150, 1950, 1950), fill=(255, 255, 255, 0)) new_image = Image.new('RGBA', (2100, 2100), color=(255, 255, 255, 0))
pie_image_draw.ellipse((150, 150, 1950, 1950), fill=(255, 255, 255, 0))
position = (1050, 1050)
pie_image.paste(new_image, position, mask=new_image) position = (1050, 1050)
result_pie = pie_image.resize((210, 210)) pie_image.paste(new_image, position, mask=new_image)
img.paste(result_pie, (138, 618 + 350), result_pie) result_pie = pie_image.resize((210, 210))
img.paste(result_pie, (138, 618 + 350), result_pie)
img = await convert_img(img)
logger.info('[开拓月历] 图片绘制完成!等待发送...') img = await convert_img(img)
return img logger.info('[开拓月历] 图片绘制完成!等待发送...')
return img
async def int_carry(i: int) -> str:
if i >= 100000: async def int_carry(i: int) -> str:
i_str = f'{i / 10000:.1f}W' if i >= 100000:
else: i_str = f'{i / 10000:.1f}W'
i_str = str(i) else:
return i_str i_str = str(i)
return i_str

View File

@ -17,5 +17,7 @@ async def send_download_resource_msg(bot: Bot, ev: Event):
async def startup(): async def startup():
logger.info('[sr资源文件下载] 正在检查与下载缺失的资源文件,可能需要较长时间,请稍等') logger.info(
'[sr资源文件下载] 正在检查与下载缺失的资源文件,可能需要较长时间,请稍等'
)
logger.info(f'[sr资源文件下载] {await download_all_resource()}') logger.info(f'[sr资源文件下载] {await download_all_resource()}')

View File

@ -65,7 +65,9 @@ async def send_daily_sign():
single['msg'], 'direct', qid, single['bot_id'], '', '' single['msg'], 'direct', qid, single['bot_id'], '', ''
) )
except Exception as e: except Exception as e:
logger.warning(f'[SR每日全部签到] QQ {qid} 私聊推送失败!错误信息:{e}') logger.warning(
f'[SR每日全部签到] QQ {qid} 私聊推送失败!错误信息:{e}'
)
await asyncio.sleep(0.5) await asyncio.sleep(0.5)
logger.info('[SR每日全部签到]私聊推送完成') logger.info('[SR每日全部签到]私聊推送完成')
@ -74,7 +76,9 @@ async def send_daily_sign():
# 根据succee数判断是否为简洁推送 # 根据succee数判断是否为简洁推送
if group_msg_list[gid]['success'] >= 0: if group_msg_list[gid]['success'] >= 0:
report = ( report = (
'以下为签到失败报告:{}'.format(group_msg_list[gid]['push_message']) '以下为签到失败报告:{}'.format(
group_msg_list[gid]['push_message']
)
if group_msg_list[gid]['push_message'] != '' if group_msg_list[gid]['push_message'] != ''
else '' else ''
) )

View File

@ -57,11 +57,15 @@ async def sign_in(sr_uid: str) -> str:
Header['x-rpc-challenge'] = ch Header['x-rpc-challenge'] = ch
Header['x-rpc-validate'] = vl Header['x-rpc-validate'] = vl
Header['x-rpc-seccode'] = f'{vl}|jordan' Header['x-rpc-seccode'] = f'{vl}|jordan'
logger.info(f'[SR签到] {sr_uid} 已获取验证码, 等待时间{delay}') logger.info(
f'[SR签到] {sr_uid} 已获取验证码, 等待时间{delay}'
)
await asyncio.sleep(delay) await asyncio.sleep(delay)
else: else:
delay = 605 + random.randint(1, 120) delay = 605 + random.randint(1, 120)
logger.info(f'[SR签到] {sr_uid} 未获取验证码,等待{delay}秒后重试...') logger.info(
f'[SR签到] {sr_uid} 未获取验证码,等待{delay}秒后重试...'
)
await asyncio.sleep(delay) await asyncio.sleep(delay)
continue continue
logger.info('配置文件暂未开启[跳过无感验证],结束本次任务...') logger.info('配置文件暂未开启[跳过无感验证],结束本次任务...')
@ -70,7 +74,9 @@ async def sign_in(sr_uid: str) -> str:
if index == 0: if index == 0:
logger.info(f'[SR签到] {sr_uid} 该用户无校验码!') logger.info(f'[SR签到] {sr_uid} 该用户无校验码!')
else: else:
logger.info(f'[SR签到] [无感验证] {sr_uid} 该用户重试 {index} 次验证成功!') logger.info(
f'[SR签到] [无感验证] {sr_uid} 该用户重试 {index} 次验证成功!'
)
break break
if (int(str(sr_uid)[0]) > 5) and (sign_data.code == 'ok'): if (int(str(sr_uid)[0]) > 5) and (sign_data.code == 'ok'):
# 国际服签到无risk_code字段 # 国际服签到无risk_code字段
@ -103,7 +109,9 @@ async def sign_in(sr_uid: str) -> str:
sign_missed -= 1 sign_missed -= 1
sign_missed = sign_info.sign_cnt_missed or sign_missed sign_missed = sign_info.sign_cnt_missed or sign_missed
im = f'{mes_im}!\n{get_im}\n本月漏签次数:{sign_missed}' im = f'{mes_im}!\n{get_im}\n本月漏签次数:{sign_missed}'
logger.info(f'[SR签到] {sr_uid} 签到完成, 结果: {mes_im}, 漏签次数: {sign_missed}') logger.info(
f'[SR签到] {sr_uid} 签到完成, 结果: {mes_im}, 漏签次数: {sign_missed}'
)
return im return im
@ -163,7 +171,9 @@ async def daily_sign():
delay = 1 delay = 1
else: else:
delay = 50 + random.randint(3, 45) delay = 50 + random.randint(3, 45)
logger.info(f'[SR签到] 已签到{len(tasks)}个用户, 等待{delay}秒进行下一次签到') logger.info(
f'[SR签到] 已签到{len(tasks)}个用户, 等待{delay}秒进行下一次签到'
)
tasks.clear() tasks.clear()
already = 0 already = 0
await asyncio.sleep(delay) await asyncio.sleep(delay)

View File

@ -69,7 +69,8 @@ async def _draw_task_img(
avatar_url = char.avatars[i] avatar_url = char.avatars[i]
image = await download_image(avatar_url) image = await download_image(avatar_url)
char_pic = image.convert('RGBA').resize( char_pic = image.convert('RGBA').resize(
(40, 40), Image.Resampling.LANCZOS # type: ignore (40, 40),
Image.Resampling.LANCZOS, # type: ignore
) )
note_travel_img.paste(char_pic, (495 + 68 * i, 20), char_pic) note_travel_img.paste(char_pic, (495 + 68 * i, 20), char_pic)
img.paste(note_travel_img, (0, 790 + index * 80), note_travel_img) img.paste(note_travel_img, (0, 790 + index * 80), note_travel_img)

View File

@ -27,7 +27,12 @@ async def send_bind_card(bot: Bot, ev: Event):
@sv_user_info.on_command( @sv_user_info.on_command(
(f'{PREFIX}绑定uid', f'{PREFIX}切换uid', f'{PREFIX}删除uid', f'{PREFIX}解绑uid') (
f'{PREFIX}绑定uid',
f'{PREFIX}切换uid',
f'{PREFIX}删除uid',
f'{PREFIX}解绑uid',
)
) )
async def send_link_uid_msg(bot: Bot, ev: Event): async def send_link_uid_msg(bot: Bot, ev: Event):
await bot.logger.info('sr开始执行[绑定/解绑用户信息]') await bot.logger.info('sr开始执行[绑定/解绑用户信息]')

View File

@ -81,7 +81,9 @@ async def download_all_file_from_cos():
or not Path.stat(path).st_size or not Path.stat(path).st_size
or not is_diff or not is_diff
): ):
logger.info(f'[cos]开始下载[{resource_type}]_[{name}]...') logger.info(
f'[cos]开始下载[{resource_type}]_[{name}]...'
)
temp_num += 1 temp_num += 1
if isinstance(url, int): if isinstance(url, int):
logger.error( logger.error(
@ -119,4 +121,6 @@ async def download_all_file_from_cos():
await _download(TASKS) await _download(TASKS)
await _download(TASKS) await _download(TASKS)
if count := len(failed_list): if count := len(failed_list):
logger.error(f'[cos]仍有{count}个文件未下载,请使用命令 `下载全部资源` 重新下载') logger.error(
f'[cos]仍有{count}个文件未下载,请使用命令 `下载全部资源` 重新下载'
)