mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-05-08 04:55:51 +08:00
✨ 新增gs开启自动留影叙佳期
(#563)
This commit is contained in:
parent
db543a46da
commit
7a2a123b7f
@ -29,6 +29,9 @@ CONIFG_DEFAULT: Dict[str, GSC] = {
|
||||
'BBSTaskTime': GsListStrConfig(
|
||||
'每晚米游社任务时间设置', '每晚米游社任务时间设置(时,分)', ['1', '41']
|
||||
),
|
||||
'GetDrawTaskTime': GsListStrConfig(
|
||||
'每晚留影叙佳期任务时间设置', '每晚留影叙佳期任务时间设置(时,分)', ['3', '25']
|
||||
),
|
||||
'MhyBBSCoinReport': GsBoolConfig(
|
||||
'米游币推送',
|
||||
'开启后会私聊每个用户当前米游币任务完成情况',
|
||||
@ -59,6 +62,11 @@ CONIFG_DEFAULT: Dict[str, GSC] = {
|
||||
'开启后每晚01:16将开始自动米游币任务',
|
||||
True,
|
||||
),
|
||||
'SchedGetDraw': GsBoolConfig(
|
||||
'定时留影叙佳期',
|
||||
'开启后每晚03:25将开始自动米游币任务',
|
||||
True,
|
||||
),
|
||||
'CrazyNotice': GsBoolConfig(
|
||||
'催命模式',
|
||||
'开启后当达到推送阈值将会一直推送',
|
||||
|
@ -16,6 +16,7 @@ PRIV_MAP = {
|
||||
'自动签到': 'sign',
|
||||
'自动米游币': 'bbs',
|
||||
'推送': 'push',
|
||||
'自动留影叙佳期': 'draw',
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,12 +1,18 @@
|
||||
from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.aps import scheduler
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
|
||||
from .get_draw import post_my_draw
|
||||
from ..utils.database import get_sqla
|
||||
from .daily_check_draw import daily_get_draw
|
||||
from ..genshinuid_config.gs_config import gsconfig
|
||||
|
||||
sv_post_my_draw = SV('留影叙佳期')
|
||||
sv_post_my_draw_admin = SV('自动留影叙佳期', pm=1)
|
||||
|
||||
DRAW_TIME = gsconfig.get_config('GetDrawTaskTime').data
|
||||
|
||||
|
||||
# 群聊内 每月统计 功能
|
||||
@ -17,3 +23,15 @@ async def send_postdraw_data(bot: Bot, ev: Event):
|
||||
if uid is None:
|
||||
return UID_HINT
|
||||
await bot.send(await post_my_draw(uid))
|
||||
|
||||
|
||||
@sv_post_my_draw_admin.on_fullmatch(('强制进行自动留影叙佳期'))
|
||||
async def send_all_postdraw_data(bot: Bot, ev: Event):
|
||||
await daily_get_draw()
|
||||
|
||||
|
||||
# 执行自动留影叙佳期
|
||||
@scheduler.scheduled_job('cron', hour=DRAW_TIME[0], minute=DRAW_TIME[1])
|
||||
async def sign_at_night():
|
||||
if gsconfig.get_config('SchedGetDraw').data:
|
||||
await daily_get_draw()
|
||||
|
117
GenshinUID/genshinuid_postdraw/daily_check_draw.py
Normal file
117
GenshinUID/genshinuid_postdraw/daily_check_draw.py
Normal file
@ -0,0 +1,117 @@
|
||||
import random
|
||||
import asyncio
|
||||
import datetime
|
||||
from copy import deepcopy
|
||||
from typing import List, Optional
|
||||
|
||||
from gsuid_core.gss import gss
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.utils.api.mys.models import RoleCalendar, RolesCalendar
|
||||
|
||||
from .get_draw import post_my_draw
|
||||
from ..utils.mys_api import mys_api
|
||||
from ..utils.database import get_sqla
|
||||
|
||||
private_msg_list = {}
|
||||
group_msg_list = {}
|
||||
calendar: RolesCalendar = None
|
||||
is_got: Optional[bool] = None
|
||||
today = datetime.datetime.now().day
|
||||
|
||||
|
||||
async def check_today(uid: str) -> bool:
|
||||
global calendar
|
||||
global is_got
|
||||
global today
|
||||
if calendar is None:
|
||||
calendar = await mys_api.get_draw_calendar(uid)
|
||||
|
||||
now = datetime.datetime.now()
|
||||
|
||||
if today == now.day and is_got is not None:
|
||||
return is_got
|
||||
else:
|
||||
today = now.day
|
||||
|
||||
month = now.month
|
||||
calendar_role: List[RoleCalendar] = calendar['calendar_role_infos'][
|
||||
str(month)
|
||||
]['calendar_role']
|
||||
|
||||
assert isinstance(calendar_role, List)
|
||||
|
||||
for char in calendar_role:
|
||||
char_day = char['role_birthday']
|
||||
day = now.day
|
||||
if char_day == f'{month}/{day}':
|
||||
is_got = True
|
||||
logger.info('[自动留影叙佳期] 今日有可获取角色,开启任务...')
|
||||
break
|
||||
else:
|
||||
is_got = False
|
||||
logger.info('[自动留影叙佳期] 今日无可获取角色,自动取消任务...')
|
||||
|
||||
return is_got
|
||||
|
||||
|
||||
async def single_get_draw(bot_id: str, uid: str, gid: str, qid: str):
|
||||
if is_got is not None and not is_got:
|
||||
return
|
||||
elif not await check_today(uid):
|
||||
return
|
||||
|
||||
im = await post_my_draw(uid)
|
||||
|
||||
if '没有需要获取' in im:
|
||||
return
|
||||
|
||||
if gid == 'on':
|
||||
if qid not in private_msg_list:
|
||||
private_msg_list[qid] = []
|
||||
private_msg_list[qid].append({'bot_id': bot_id, 'uid': uid, 'msg': im})
|
||||
else:
|
||||
# 向群消息推送列表添加这个群
|
||||
if gid not in group_msg_list:
|
||||
group_msg_list[gid] = {
|
||||
'bot_id': bot_id,
|
||||
'success': 0,
|
||||
'failed': 0,
|
||||
}
|
||||
|
||||
# 如果失败, 则添加到推送列表
|
||||
if isinstance(im, bytes):
|
||||
group_msg_list[gid]['failed'] += 1
|
||||
else:
|
||||
group_msg_list[gid]['success'] += 1
|
||||
|
||||
|
||||
async def daily_get_draw():
|
||||
tasks = []
|
||||
for bot_id in gss.active_bot:
|
||||
sqla = get_sqla(bot_id)
|
||||
user_list = await sqla.get_all_user()
|
||||
for user in user_list:
|
||||
if user.draw_switch != 'off':
|
||||
tasks.append(
|
||||
single_get_draw(
|
||||
user.bot_id, user.uid, user.sign_switch, user.user_id
|
||||
)
|
||||
)
|
||||
if len(tasks) >= 1:
|
||||
await asyncio.gather(*tasks)
|
||||
delay = 50 + random.randint(3, 45)
|
||||
logger.info(f'[自动留影叙佳期] 已完成{len(tasks)}个用户, 等待{delay}秒进行下一次获取')
|
||||
tasks.clear()
|
||||
await asyncio.sleep(delay)
|
||||
|
||||
await asyncio.gather(*tasks)
|
||||
tasks.clear()
|
||||
result = {
|
||||
'private_msg_list': deepcopy(private_msg_list),
|
||||
'group_msg_list': deepcopy(group_msg_list),
|
||||
}
|
||||
private_msg_list.clear()
|
||||
group_msg_list.clear()
|
||||
logger.info(result)
|
||||
logger.info('[自动留影叙佳期] 已结束')
|
||||
return result
|
@ -5,15 +5,12 @@ from gsuid_core.utils.error_reply import get_error_img
|
||||
from ..utils.mys_api import mys_api
|
||||
|
||||
|
||||
async def post_my_draw(uid) -> Union[str, bytes]:
|
||||
async def post_my_draw(uid: str) -> Union[str, bytes]:
|
||||
bs_index = await mys_api.get_bs_index(uid)
|
||||
calendar = await mys_api.get_draw_calendar(uid)
|
||||
|
||||
# 错误检查
|
||||
if isinstance(bs_index, int):
|
||||
return await get_error_img(bs_index)
|
||||
if isinstance(calendar, int):
|
||||
return await get_error_img(calendar)
|
||||
|
||||
im_list = []
|
||||
|
||||
@ -32,7 +29,7 @@ async def post_my_draw(uid) -> Union[str, bytes]:
|
||||
)
|
||||
im_list.append(message)
|
||||
else:
|
||||
im_list.append(f'UID{uid}成功获取{role["name"]}的画片!')
|
||||
im_list.append(f'[留影叙佳期] UID{uid}成功获取{role["name"]}的画片!')
|
||||
if im_list == []:
|
||||
im_list.append(f'UID{uid}没有需要获取的画片了~')
|
||||
im_list.append(f'[留影叙佳期]UID{uid}没有需要获取的画片了~')
|
||||
return '\n'.join(im_list)
|
||||
|
Loading…
x
Reference in New Issue
Block a user