Merge remote-tracking branch 'origin/master'

This commit is contained in:
qwerdvd 2023-05-19 23:42:47 +08:00
commit 6182360111
4 changed files with 85 additions and 69 deletions

View File

@ -18,7 +18,9 @@
> >
> **如果已经是最新版本的`gsuid_core`, 可以直接对bot发送`core安装插件starrail`然后重启core以应用安装** > **如果已经是最新版本的`gsuid_core`, 可以直接对bot发送`core安装插件starrail`然后重启core以应用安装**
> >
> 支持NoneBot2 & HoshinoBot & ZeroBot的星穹铁道Bot插件 > 如使用命令缺失素材可尝试使用命令`sr下载全部资源`
>
> 支持NoneBot2 & HoshinoBot & ZeroBot & YunzaiBot的星穹铁道Bot插件
> >
> 🚧插件目前还在施工中,可以使用,功能快速迭代中...🚧 > 🚧插件目前还在施工中,可以使用,功能快速迭代中...🚧
@ -40,7 +42,11 @@
<img src="https://s2.loli.net/2023/05/14/xgmuBvAP5UVLsn4.jpg"/> <img src="https://s2.loli.net/2023/05/14/xgmuBvAP5UVLsn4.jpg"/>
</p></details> </p></details>
以及自动签到 & 体力推送等.. <details><summary>查询深渊 - 命令: sr查询深渊 & sr深渊</summary><p>
<img src="https://s2.loli.net/2023/05/19/54OPsvHibgeu9YB.jpg"/>
</p></details>
以及自动签到 & 体力推送 & WIKI & 攻略图等..
## 丨其他 ## 丨其他

View File

@ -31,11 +31,17 @@ async def send_srabyss_info(bot: Bot, ev: Event):
schedule_type = '1' schedule_type = '1'
await bot.logger.info('[sr查询深渊信息]深渊期数: {}'.format(schedule_type)) await bot.logger.info('[sr查询深渊信息]深渊期数: {}'.format(schedule_type))
if ev.text in ['', '', '十一', '']: if ev.text in ['', '', '', '', '', '', '', '', '', '']:
floor = ( floor = (
ev.text.replace('', '9') ev.text.replace('', '1')
.replace('十一', '11') .replace('', '2')
.replace('十二', '12') .replace('', '3')
.replace('', '4')
.replace('', '5')
.replace('', '6')
.replace('', '7')
.replace('', '8')
.replace('', '9')
.replace('', '10') .replace('', '10')
) )
else: else:
@ -44,10 +50,10 @@ async def send_srabyss_info(bot: Bot, ev: Event):
floor = int(floor) floor = int(floor)
else: else:
floor = None floor = None
# print(floor)
await bot.logger.info('[sr查询深渊信息]深渊层数: {}'.format(floor)) await bot.logger.info('[sr查询深渊信息]深渊层数: {}'.format(floor))
# data = GsCookie() # data = GsCookie()
# raw_abyss_data = await data.get_spiral_abyss_data(uid, schedule_type) # raw_abyss_data = await data.get_spiral_abyss_data(uid, schedule_type)
# print(raw_abyss_data) # print(raw_abyss_data)
im = await draw_abyss_img(ev.user_id, uid, schedule_type) im = await draw_abyss_img(ev.user_id, uid, floor, schedule_type)
await bot.send(im) await bot.send(im)

View File

@ -1,6 +1,5 @@
import asyncio
from pathlib import Path from pathlib import Path
from typing import Union from typing import Union, Optional
from PIL import Image, ImageDraw from PIL import Image, ImageDraw
from gsuid_core.logger import logger from gsuid_core.logger import logger
@ -10,8 +9,6 @@ from .utils import get_icon
from ..utils.convert import GsCookie from ..utils.convert import GsCookie
from ..utils.image.convert import convert_img from ..utils.image.convert import convert_img
from ..sruid_utils.api.mys.models import AbyssAvatar from ..sruid_utils.api.mys.models import AbyssAvatar
# )
from ..utils.image.image_tools import get_qq_avatar, draw_pic_with_ring from ..utils.image.image_tools import get_qq_avatar, draw_pic_with_ring
from ..utils.fonts.starrail_fonts import ( from ..utils.fonts.starrail_fonts import (
sr_font_22, sr_font_22,
@ -21,10 +18,18 @@ from ..utils.fonts.starrail_fonts import (
sr_font_42, sr_font_42,
) )
# from ..utils.resource.download_url import download_file abyss_list = {
# from ..utils.resource.generate_char_card import create_single_char_card '1': '琥珀恩赐其一',
# from ..utils.resource.RESOURCE_PATH import ( '2': '琥珀恩赐其二',
# CHAR_ICON_PATH, '3': '琥珀恩赐其三',
'4': '琥珀恩赐其四',
'5': '琥珀恩赐其五',
'6': '琥珀恩赐其六',
'7': '琥珀恩赐其七',
'8': '琥珀恩赐其八',
'9': '琥珀恩赐其九',
'10': '琥珀恩赐其十',
}
TEXT_PATH = Path(__file__).parent / 'texture2D' TEXT_PATH = Path(__file__).parent / 'texture2D'
white_color = (255, 255, 255) white_color = (255, 255, 255)
@ -134,6 +139,7 @@ async def _draw_floor_card(
async def draw_abyss_img( async def draw_abyss_img(
qid: Union[str, int], qid: Union[str, int],
uid: str, uid: str,
floor: Optional[int] = None,
schedule_type: str = '1', schedule_type: str = '1',
) -> Union[bytes, str]: ) -> Union[bytes, str]:
# 获取Cookies # 获取Cookies
@ -156,30 +162,21 @@ async def draw_abyss_img(
# char_temp = {} # char_temp = {}
# 获取查询者数据 # 获取查询者数据
# if floor: if floor:
# floor = floor - 9 floor_num = 1
# if floor < 0: if floor > 10:
# return '楼层不能小于9层!' return '楼层不能大于10层!'
# if len(raw_abyss_data['floors']) >= floor + 1: if len(raw_abyss_data['all_floor_detail']) < floor:
# floors_data = raw_abyss_data['floors'][floor] return '你还没有挑战该层!'
# else: else:
# return '你还没有挑战该层!' if raw_abyss_data['max_floor'] == '':
# else: return '你还没有挑战本期深渊!\n可以使用[sr上期深渊]命令查询上期~'
# if len(raw_abyss_data['floors']) == 0: floor_num = len(raw_abyss_data['all_floor_detail'])
# return '你还没有挑战本期深渊!\n可以使用[上期深渊]命令查询上期~'
# floors_data = raw_abyss_data['floors'][-1]
if raw_abyss_data['max_floor'] == '':
return '你还没有挑战本期深渊!\n可以使用[sr上期深渊]命令查询上期~'
# if floors_data['levels'][-1]['battles']:
# is_unfull = False
# else:
# is_unfull = True
# 获取背景图片各项参数 # 获取背景图片各项参数
based_w = 900 based_w = 900
floor_num = len(raw_abyss_data['all_floor_detail'])
if floor_num >= 3: if floor_num >= 3:
based_h = 1227 based_h = 2367
else: else:
based_h = 657 + 570 * floor_num based_h = 657 + 570 * floor_num
img = img_bg.copy() img = img_bg.copy()
@ -233,10 +230,15 @@ async def draw_abyss_img(
'lm', 'lm',
) )
task = []
for index_floor, level in enumerate(raw_abyss_data['all_floor_detail']): for index_floor, level in enumerate(raw_abyss_data['all_floor_detail']):
if index_floor >= 3: if floor:
break if abyss_list[str(floor)] == level['name']:
index_floor = 0
else:
continue
else:
if index_floor >= 3:
break
floor_pic = Image.open(TEXT_PATH / 'floor_bg.png') floor_pic = Image.open(TEXT_PATH / 'floor_bg.png')
level_star = level['star_num'] level_star = level['star_num']
floor_name = level['name'] floor_name = level['name']
@ -279,28 +281,21 @@ async def draw_abyss_img(
# ) # )
# char_temp[char["id"]] = talent_num # char_temp[char["id"]] = talent_num
# break # break
task.append( await _draw_abyss_card(
_draw_abyss_card( char,
char, 0, # type: ignore
0, # type: ignore floor_pic,
floor_pic, index_char,
index_char, index_part,
index_part,
)
) )
await asyncio.gather(*task) await _draw_floor_card(
task.clear() level_star,
task.append( floor_pic,
_draw_floor_card( img,
level_star, index_floor,
floor_pic, floor_name,
img, round_num,
index_floor,
floor_name,
round_num,
)
) )
await asyncio.gather(*task)
# title_data = { # title_data = {
# '最强一击!': damage_rank[0], # '最强一击!': damage_rank[0],

View File

@ -6,6 +6,7 @@ import asyncio
from string import digits, ascii_letters from string import digits, ascii_letters
from typing import Dict, Union, Optional, cast from typing import Dict, Union, Optional, cast
from gsuid_core.logger import logger
from gsuid_core.utils.api.mys_api import _MysApi from gsuid_core.utils.api.mys_api import _MysApi
from gsuid_core.utils.api.mys.models import MysSign, SignInfo, SignList from gsuid_core.utils.api.mys.models import MysSign, SignInfo, SignList
from gsuid_core.utils.api.mys.tools import ( from gsuid_core.utils.api.mys.tools import (
@ -42,9 +43,17 @@ class MysApi(_MysApi):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
asyncio.run(self.get_fp()) loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
try:
device_fp = loop.run_until_complete(self.get_fp())
self._HEADER['x-rpc-device_fp'] = device_fp
finally:
loop.run_until_complete(loop.shutdown_asyncgens())
loop.close()
self._HEADER['x-rpc-device_id'] = self.device_id self._HEADER['x-rpc-device_id'] = self.device_id
self._HEADER['x-rpc-page'] = '3.1.3_#/rpg' self._HEADER['x-rpc-page'] = '3.1.3_#/rpg'
self._HEADER['x-rpc-challenge_game'] = '6'
async def create_qrcode_url(self) -> Union[Dict, int]: async def create_qrcode_url(self) -> Union[Dict, int]:
device_id: str = ''.join(random.choices(ascii_letters + digits, k=64)) device_id: str = ''.join(random.choices(ascii_letters + digits, k=64))
@ -197,6 +206,8 @@ class MysApi(_MysApi):
'CHALLENGE_INFO_URL', 'CHALLENGE_INFO_URL',
uid, uid,
params={ params={
'isPrev': 'true',
'need_all': 'true',
'role_id': uid, 'role_id': uid,
'schedule_type': schedule_type, 'schedule_type': schedule_type,
'server': server_id, 'server': server_id,
@ -204,7 +215,7 @@ class MysApi(_MysApi):
cookie=ck, cookie=ck,
header=self._HEADER, header=self._HEADER,
) )
print(data) # print(data)
if isinstance(data, Dict): if isinstance(data, Dict):
data = cast(AbyssData, data['data']) data = cast(AbyssData, data['data'])
return data return data
@ -313,16 +324,14 @@ class MysApi(_MysApi):
header=HEADER, header=HEADER,
data=body, data=body,
) )
if res["retcode"] != 0: if not isinstance(res, Dict):
print("获取fp连接失败") logger.error(f"获取fp连接失败{res}")
print(res) return random_hex(13).lower()
self._HEADER['x-rpc-device_fp'] = random_hex(13).lower()
elif res["data"]["code"] != 200: elif res["data"]["code"] != 200:
print("获取fp参数不正确") logger.error(f"获取fp参数不正确{res['data']['msg']}")
print(res["data"]["msg"]) return random_hex(13).lower()
self._HEADER['x-rpc-device_fp'] = random_hex(13).lower()
else: else:
self._HEADER['x-rpc-device_fp'] = res["data"]["device_fp"] return res["data"]["device_fp"]
mys_api = MysApi() mys_api = MysApi()