mirror of
https://github.com/baiqwerdvd/StarRailUID.git
synced 2025-06-19 13:55:04 +08:00
🎨优化 sr每日
样式
This commit is contained in:
parent
d0180833ab
commit
f40caf61aa
@ -1,23 +1,19 @@
|
|||||||
# import asyncio
|
import asyncio
|
||||||
|
|
||||||
from gsuid_core.sv import SV
|
from gsuid_core.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
|
from gsuid_core.gss import gss
|
||||||
# from gsuid_core.gss import gss
|
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
|
from gsuid_core.aps import scheduler
|
||||||
|
from gsuid_core.logger import logger
|
||||||
|
from gsuid_core.segment import MessageSegment
|
||||||
|
|
||||||
from ..utils.convert import get_uid
|
from ..utils.convert import get_uid
|
||||||
|
from .notice import get_notice_list
|
||||||
# from .notice import get_notice_list
|
|
||||||
from .resin_text import get_resin_text
|
from .resin_text import get_resin_text
|
||||||
from ..utils.error_reply import UID_HINT
|
from ..utils.error_reply import UID_HINT
|
||||||
from .draw_resin_card import get_resin_img
|
from .draw_resin_card import get_resin_img
|
||||||
|
|
||||||
# from gsuid_core.aps import scheduler
|
|
||||||
# from gsuid_core.logger import logger
|
|
||||||
# from gsuid_core.segment import MessageSegment
|
|
||||||
|
|
||||||
|
|
||||||
sv_get_resin = SV('sr查询体力')
|
sv_get_resin = SV('sr查询体力')
|
||||||
sv_get_resin_admin = SV('sr强制推送', pm=1)
|
sv_get_resin_admin = SV('sr强制推送', pm=1)
|
||||||
|
|
||||||
@ -34,36 +30,36 @@ async def send_daily_info(bot: Bot, ev: Event):
|
|||||||
await bot.send(im)
|
await bot.send(im)
|
||||||
|
|
||||||
|
|
||||||
# @sv_get_resin_admin.on_fullmatch(('sr强制推送体力提醒'))
|
@sv_get_resin_admin.on_fullmatch(('sr强制推送体力提醒'))
|
||||||
# async def force_notice_job(bot: Bot, ev: Event):
|
async def force_notice_job(bot: Bot, ev: Event):
|
||||||
# await bot.logger.info('开始执行[sr强制推送体力信息]')
|
await bot.logger.info('开始执行[sr强制推送体力信息]')
|
||||||
# await notice_job()
|
await notice_job()
|
||||||
|
|
||||||
|
|
||||||
# @scheduler.scheduled_job('cron', minute='*/30')
|
@scheduler.scheduled_job('cron', minute='*/30')
|
||||||
# async def notice_job():
|
async def notice_job():
|
||||||
# result = await get_notice_list()
|
result = await get_notice_list()
|
||||||
# logger.info('[推送检查]完成!等待消息推送中...')
|
logger.info('[推送检查]完成!等待消息推送中...')
|
||||||
# logger.debug(result)
|
logger.debug(result)
|
||||||
#
|
|
||||||
# # 执行私聊推送
|
# 执行私聊推送
|
||||||
# for bot_id in result:
|
for bot_id in result:
|
||||||
# for BOT_ID in gss.active_bot:
|
for BOT_ID in gss.active_bot:
|
||||||
# bot = gss.active_bot[BOT_ID]
|
bot = gss.active_bot[BOT_ID]
|
||||||
# for user_id in result[bot_id]['direct']:
|
for user_id in result[bot_id]['direct']:
|
||||||
# msg = result[bot_id]['direct'][user_id]
|
msg = result[bot_id]['direct'][user_id]
|
||||||
# await bot.target_send(msg, 'direct', user_id, bot_id, '', '')
|
await bot.target_send(msg, 'direct', user_id, bot_id, '', '')
|
||||||
# await asyncio.sleep(0.5)
|
await asyncio.sleep(0.5)
|
||||||
# logger.info('[推送检查] 私聊推送完成')
|
logger.info('[推送检查] 私聊推送完成')
|
||||||
# for gid in result[bot_id]['group']:
|
for gid in result[bot_id]['group']:
|
||||||
# msg_list = []
|
msg_list = []
|
||||||
# for user_id in result[bot_id]['group'][gid]:
|
for user_id in result[bot_id]['group'][gid]:
|
||||||
# msg_list.append(MessageSegment.at(user_id))
|
msg_list.append(MessageSegment.at(user_id))
|
||||||
# msg = result[bot_id]['group'][gid][user_id]
|
msg = result[bot_id]['group'][gid][user_id]
|
||||||
# msg_list.append(MessageSegment.text(msg))
|
msg_list.append(MessageSegment.text(msg))
|
||||||
# await bot.target_send(msg_list, 'group', gid, bot_id, '', '')
|
await bot.target_send(msg_list, 'group', gid, bot_id, '', '')
|
||||||
# await asyncio.sleep(0.5)
|
await asyncio.sleep(0.5)
|
||||||
# logger.info('[推送检查] 群聊推送完成')
|
logger.info('[推送检查] 群聊推送完成')
|
||||||
|
|
||||||
|
|
||||||
@sv_get_resin.on_fullmatch(('sr每日', 'srmr', 'sr实时便笺', 'sr便笺', 'sr便签'))
|
@sv_get_resin.on_fullmatch(('sr每日', 'srmr', 'sr实时便笺', 'sr便笺', 'sr便签'))
|
||||||
|
@ -12,6 +12,7 @@ from ..utils.mys_api import mys_api
|
|||||||
from ..utils.image.convert import convert_img
|
from ..utils.image.convert import convert_img
|
||||||
from ..sruid_utils.api.mys.models import Expedition
|
from ..sruid_utils.api.mys.models import Expedition
|
||||||
from ..utils.fonts.starrail_fonts import (
|
from ..utils.fonts.starrail_fonts import (
|
||||||
|
sr_font_22,
|
||||||
sr_font_24,
|
sr_font_24,
|
||||||
sr_font_26,
|
sr_font_26,
|
||||||
sr_font_36,
|
sr_font_36,
|
||||||
@ -55,35 +56,44 @@ async def _draw_task_img(
|
|||||||
index: int,
|
index: int,
|
||||||
char: Expedition,
|
char: Expedition,
|
||||||
):
|
):
|
||||||
expedition_name = char['name']
|
if char is not None:
|
||||||
remaining_time: str = seconds2hours(char['remaining_time'])
|
expedition_name = char['name']
|
||||||
note_travel_img = note_travel_bg.copy()
|
remaining_time: str = seconds2hours(char['remaining_time'])
|
||||||
for i in range(2):
|
note_travel_img = note_travel_bg.copy()
|
||||||
avatar_url = char['avatars'][i]
|
for i in range(2):
|
||||||
image = await download_image(avatar_url)
|
avatar_url = char['avatars'][i]
|
||||||
char_pic = image.convert('RGBA').resize(
|
image = await download_image(avatar_url)
|
||||||
(40, 40), Image.Resampling.LANCZOS # type: ignore
|
char_pic = image.convert('RGBA').resize(
|
||||||
|
(40, 40), Image.Resampling.LANCZOS # type: ignore
|
||||||
|
)
|
||||||
|
note_travel_img.paste(char_pic, (495 + 68 * i, 20), char_pic)
|
||||||
|
img.paste(note_travel_img, (0, 790 + index * 80), note_travel_img)
|
||||||
|
if char['status'] == 'Finished':
|
||||||
|
status_mark = '待收取'
|
||||||
|
else:
|
||||||
|
status_mark = str(remaining_time)
|
||||||
|
img_draw.text(
|
||||||
|
(120, 830 + index * 80),
|
||||||
|
expedition_name,
|
||||||
|
font=sr_font_22,
|
||||||
|
fill=white_color,
|
||||||
|
anchor='lm',
|
||||||
|
)
|
||||||
|
img_draw.text(
|
||||||
|
(380, 830 + index * 80),
|
||||||
|
status_mark,
|
||||||
|
font=sr_font_22,
|
||||||
|
fill=white_color,
|
||||||
|
anchor='mm',
|
||||||
)
|
)
|
||||||
note_travel_img.paste(char_pic, (495 + 68 * i, 20), char_pic)
|
|
||||||
img.paste(note_travel_img, (0, 790 + index * 80), note_travel_img)
|
|
||||||
if char['status'] == 'Finished':
|
|
||||||
status_mark = '待收取'
|
|
||||||
else:
|
else:
|
||||||
status_mark = str(remaining_time)
|
img_draw.text(
|
||||||
img_draw.text(
|
(120, 830 + index * 80),
|
||||||
(120, 830 + index * 80),
|
'等待加入探索队列...',
|
||||||
expedition_name,
|
font=sr_font_22,
|
||||||
font=sr_font_24,
|
fill=white_color,
|
||||||
fill=white_color,
|
anchor='lm',
|
||||||
anchor='lm',
|
)
|
||||||
)
|
|
||||||
img_draw.text(
|
|
||||||
(365, 830 + index * 80),
|
|
||||||
status_mark,
|
|
||||||
font=sr_font_24,
|
|
||||||
fill=white_color,
|
|
||||||
anchor='mm',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
async def get_resin_img(bot_id: str, user_id: str):
|
async def get_resin_img(bot_id: str, user_id: str):
|
||||||
@ -119,7 +129,7 @@ async def get_resin_img(bot_id: str, user_id: str):
|
|||||||
|
|
||||||
async def _draw_all_resin_img(img: Image.Image, uid: str, index: int):
|
async def _draw_all_resin_img(img: Image.Image, uid: str, index: int):
|
||||||
resin_img = await draw_resin_img(uid)
|
resin_img = await draw_resin_img(uid)
|
||||||
img.paste(resin_img, (500 * index, 0), resin_img)
|
img.paste(resin_img, (700 * index, 0), resin_img)
|
||||||
|
|
||||||
|
|
||||||
async def seconds2hours_zhcn(seconds: int) -> str:
|
async def seconds2hours_zhcn(seconds: int) -> str:
|
||||||
@ -176,8 +186,13 @@ async def draw_resin_img(sr_uid: str) -> Image.Image:
|
|||||||
|
|
||||||
# 派遣
|
# 派遣
|
||||||
task_task = []
|
task_task = []
|
||||||
for index, char in enumerate(daily_data['expeditions']):
|
for i in range(4):
|
||||||
task_task.append(_draw_task_img(img, img_draw, index, char))
|
char = (
|
||||||
|
daily_data['expeditions'][i]
|
||||||
|
if i < len(daily_data['expeditions'])
|
||||||
|
else None
|
||||||
|
)
|
||||||
|
task_task.append(_draw_task_img(img, img_draw, i, char))
|
||||||
await asyncio.gather(*task_task)
|
await asyncio.gather(*task_task)
|
||||||
|
|
||||||
# 绘制树脂圆环
|
# 绘制树脂圆环
|
||||||
|
106
StarRailUID/starrailuid_resin/notice.py
Normal file
106
StarRailUID/starrailuid_resin/notice.py
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
from typing import Dict
|
||||||
|
|
||||||
|
from gsuid_core.gss import gss
|
||||||
|
from gsuid_core.logger import logger
|
||||||
|
|
||||||
|
from ..utils.api import get_sqla
|
||||||
|
from ..utils.mys_api import mys_api
|
||||||
|
from ..sruid_utils.api.mys.models import DailyNoteData
|
||||||
|
from ....GenshinUID.GenshinUID.genshinuid_config.gs_config import gsconfig
|
||||||
|
|
||||||
|
MR_NOTICE = '\n可发送[srmr]或者[sr每日]来查看更多信息!\n'
|
||||||
|
|
||||||
|
NOTICE = {
|
||||||
|
'resin': f'你的开拓力快满啦!{MR_NOTICE}',
|
||||||
|
'go': f'你有派遣信息即将可收取!{MR_NOTICE}',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async def get_notice_list() -> Dict[str, Dict[str, Dict]]:
|
||||||
|
msg_dict: Dict[str, Dict[str, Dict]] = {}
|
||||||
|
for bot_id in gss.active_bot:
|
||||||
|
sqla = get_sqla(bot_id)
|
||||||
|
user_list = await sqla.get_all_push_user_list()
|
||||||
|
for user in user_list:
|
||||||
|
raw_data = await mys_api.get_daily_data(user.sr_uid)
|
||||||
|
if isinstance(raw_data, int):
|
||||||
|
logger.error(f'[sr推送提醒]获取{user.sr_uid}的数据失败!')
|
||||||
|
continue
|
||||||
|
push_data = await sqla.select_push_data(user.sr_uid)
|
||||||
|
msg_dict = await all_check(
|
||||||
|
user.bot_id,
|
||||||
|
raw_data,
|
||||||
|
push_data.__dict__,
|
||||||
|
msg_dict,
|
||||||
|
user.user_id,
|
||||||
|
user.sr_uid,
|
||||||
|
)
|
||||||
|
return msg_dict
|
||||||
|
|
||||||
|
|
||||||
|
async def all_check(
|
||||||
|
bot_id: str,
|
||||||
|
raw_data: DailyNoteData,
|
||||||
|
push_data: Dict,
|
||||||
|
msg_dict: Dict[str, Dict[str, Dict]],
|
||||||
|
user_id: str,
|
||||||
|
uid: str,
|
||||||
|
) -> Dict[str, Dict[str, Dict]]:
|
||||||
|
sqla = get_sqla(bot_id)
|
||||||
|
for mode in NOTICE.keys():
|
||||||
|
# 检查条件
|
||||||
|
if push_data[f'{mode}_is_push'] == 'on':
|
||||||
|
if gsconfig.get_config('CrazyNotice').data:
|
||||||
|
if not await check(mode, raw_data, push_data[f'{mode}_value']):
|
||||||
|
await sqla.update_push_data(
|
||||||
|
uid, {f'{mode}_is_push': 'off'}
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
# 准备推送
|
||||||
|
if await check(mode, raw_data, push_data[f'{mode}_value']):
|
||||||
|
if push_data[f'{mode}_push'] == 'off':
|
||||||
|
pass
|
||||||
|
# on 推送到私聊
|
||||||
|
else:
|
||||||
|
# 初始化
|
||||||
|
if bot_id not in msg_dict:
|
||||||
|
msg_dict[bot_id] = {'direct': {}, 'group': {}}
|
||||||
|
|
||||||
|
if push_data[f'{mode}_push'] == 'on':
|
||||||
|
# 添加私聊信息
|
||||||
|
if user_id not in msg_dict[bot_id]['direct']:
|
||||||
|
msg_dict[bot_id]['direct'][user_id] = NOTICE[mode]
|
||||||
|
else:
|
||||||
|
msg_dict[bot_id]['direct'][user_id] += NOTICE[mode]
|
||||||
|
await sqla.update_push_data(uid, {f'{mode}_is_push': 'on'})
|
||||||
|
# 群号推送到群聊
|
||||||
|
else:
|
||||||
|
# 初始化
|
||||||
|
gid = push_data[f'{mode}_push']
|
||||||
|
if gid not in msg_dict[bot_id]['group']:
|
||||||
|
msg_dict[bot_id]['group'][gid] = {}
|
||||||
|
|
||||||
|
if user_id not in msg_dict[bot_id]['group'][gid]:
|
||||||
|
msg_dict[bot_id]['group'][gid][user_id] = NOTICE[mode]
|
||||||
|
else:
|
||||||
|
msg_dict[bot_id]['group'][gid][user_id] += NOTICE[mode]
|
||||||
|
await sqla.update_push_data(uid, {f'{mode}_is_push': 'on'})
|
||||||
|
return msg_dict
|
||||||
|
|
||||||
|
|
||||||
|
async def check(mode: str, data: DailyNoteData, limit: int) -> bool:
|
||||||
|
if mode == 'resin':
|
||||||
|
if data['current_stamina'] >= limit:
|
||||||
|
return True
|
||||||
|
elif data['current_stamina'] >= data['max_stamina']:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
if mode == 'go':
|
||||||
|
for i in data['expeditions']:
|
||||||
|
if i['status'] == 'Ongoing':
|
||||||
|
if int(i['remaining_time']) <= limit * 60:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
return False
|
Loading…
x
Reference in New Issue
Block a user