zhenxun_bot/plugins/draw_card/__init__.py

414 lines
15 KiB
Python
Raw Normal View History

2021-05-20 19:23:32 +08:00
from nonebot import on_regex, on_keyword
2022-02-19 18:20:19 +08:00
from nonebot.adapters.onebot.v11 import Bot, MessageEvent, Message
2021-05-20 19:23:32 +08:00
from nonebot.permission import SUPERUSER
from nonebot.typing import T_State
2022-02-19 18:20:19 +08:00
from nonebot.params import RegexGroup
from utils.utils import scheduler
from .genshin_handle import genshin_draw, update_genshin_info, reset_count, reload_genshin_pool
2021-06-04 18:01:33 +08:00
from .prts_handle import update_prts_info, prts_draw, reload_prts_pool
2021-06-17 10:18:58 +08:00
from .pretty_handle import update_pretty_info, pretty_draw, reload_pretty_pool
2022-02-19 18:20:19 +08:00
from .guardian_handle import update_guardian_info, guardian_draw, reload_guardian_pool
2021-05-26 20:08:13 +08:00
from .pcr_handle import update_pcr_info, pcr_draw
2021-06-04 18:01:33 +08:00
from .azur_handle import update_azur_info, azur_draw
from .fgo_handle import update_fgo_info, fgo_draw
from .onmyoji_handle import update_onmyoji_info, onmyoji_draw
2021-05-20 19:23:32 +08:00
from .update_game_info import update_info
2021-06-04 18:01:33 +08:00
from .util import is_number, check_num
2021-05-26 20:08:13 +08:00
from .rule import is_switch
2022-02-19 18:20:19 +08:00
from .config import draw_config
2021-06-04 18:01:33 +08:00
from .async_update_game_info import async_update_game
2022-02-19 18:20:19 +08:00
from typing import Tuple, Any
2021-06-04 18:01:33 +08:00
import re
import asyncio
2022-02-19 18:20:19 +08:00
2021-05-26 20:08:13 +08:00
2021-10-03 14:24:07 +08:00
__zx_plugin_name__ = "游戏抽卡"
__plugin_usage__ = """
usage
模拟赛马娘原神明日方舟坎公骑冠剑公主连结(/)碧蓝航线FGO阴阳师进行抽卡
指令
原神[1-300]: 原神常驻池
原神角色[1-300]: 原神角色UP池子
原神武器[1-300]: 原神武器UP池子
重置原神抽卡: 清空当前卡池的抽卡次数[即从0开始计算UP概率]
方舟[1-300]: 方舟卡池当有当期UP时指向UP池
赛马娘[1-200]: 赛马娘卡池当有当期UP时指向UP池
坎公骑冠剑[1-300]: 坎公骑冠剑卡池当有当期UP时指向UP池
pcr/公主连接[1-300]: 公主连接卡池
碧蓝航线/碧蓝[重型/轻型/特型][1-300]: 碧蓝航线重型/轻型/特型卡池
fgo[1-300]: fgo卡池
阴阳师[1-300]: 阴阳师卡池
* 以上指令可以通过 XX一井 来指定最大抽取数量 *
* 示例原神一井 *
""".strip()
__plugin_superuser_usage__ = """
usage
卡池方面的更新
指令
更新方舟信息
重载方舟卡池
更新原神信息
重载原神卡池
更新赛马娘信息
重载赛马娘卡池
更新坎公骑冠剑信息
更新碧蓝航线信息
更新fgo信息
更新阴阳师信息
""".strip()
__plugin_des__ = "就算是模拟抽卡也不能改变自己是个非酋"
__plugin_cmd__ = [
"原神[1-300]抽",
"原神角色[1-300]抽",
"原神武器[1-300]抽",
"重置原神抽卡",
"方舟[1-300]抽",
"赛马娘[1-200]抽",
"坎公骑冠剑[1-300]抽",
"pcr/公主连接[1-300]抽",
"fgo[1-300]抽",
"阴阳师[1-300]抽",
"更新方舟信息 [_superuser]",
"重载方舟卡池 [_superuser]",
"更新原神信息 [_superuser]",
"重载原神卡池 [_superuser]",
"更新赛马娘信息 [_superuser]",
"重载赛马娘卡池 [_superuser]",
"更新坎公骑冠剑信息 [_superuser]",
"更新碧蓝航线信息 [_superuser]",
"更新fgo信息 [_superuser]",
"更新阴阳师信息 [_superuser]",
]
__plugin_type__ = ("抽卡相关", 1)
__plugin_version__ = 0.1
__plugin_author__ = "HibiKier"
__plugin_settings__ = {
"level": 5,
"default_status": True,
"limit_superuser": False,
"cmd": ["游戏抽卡", "抽卡"],
}
2022-02-19 18:20:19 +08:00
prts = on_regex(r'.*?方舟([1-9|一][0-9]{0,2}[抽|井|连])', rule=is_switch('prts'), priority=5, block=True)
prts_update = on_keyword({'更新方舟信息', '更新明日方舟信息'}, permission=SUPERUSER, priority=1, block=True)
prts_up_reload = on_keyword({'重载方舟卡池'}, priority=1, block=True)
2021-10-03 14:24:07 +08:00
2022-02-19 18:20:19 +08:00
genshin = on_regex(r'.*?原神(武器|角色)?池?[1-9|一][0-9]{0,2}[抽|井|连]', rule=is_switch('genshin'), priority=5, block=True)
genshin_update = on_keyword({'更新原神信息'}, permission=SUPERUSER, priority=1, block=True)
genshin_reset = on_keyword({'重置原神抽卡'}, priority=1, block=True)
genshin_up_reload = on_keyword({'重载原神卡池'}, priority=1, block=True)
2021-05-20 19:23:32 +08:00
2022-02-19 18:20:19 +08:00
pretty = on_regex(r'.*?马娘卡?[1-9|一][0-9]{0,2}[抽|井|连]', rule=is_switch('pretty'), priority=5, block=True)
pretty_update = on_keyword({'更新马娘信息', '更新赛马娘信息'}, permission=SUPERUSER, priority=1, block=True)
pretty_up_reload = on_keyword({'重载赛马娘卡池'}, priority=1, block=True)
2021-05-20 19:23:32 +08:00
2022-02-19 18:20:19 +08:00
guardian = on_regex(r'.*?坎公骑冠剑武?器?[1-9|一][0-9]{0,2}[抽|井|连]', rule=is_switch('guardian'), priority=5, block=True)
guardian_update = on_keyword({'更新坎公骑冠剑信息'}, permission=SUPERUSER, priority=1, block=True)
guardian_up_reload = on_keyword({'重载坎公骑冠剑卡池'}, priority=1, block=True)
2021-05-20 19:23:32 +08:00
2022-02-19 18:20:19 +08:00
pcr = on_regex(r'.*?(pcr|公主连结|公主连接|公主链接|公主焊接)[1-9|一][0-9]{0,2}[抽|井|连]', rule=is_switch('pcr'), priority=5, block=True)
pcr_update = on_keyword({'更新pcr信息', '更新公主连结信息'}, permission=SUPERUSER, priority=1, block=True)
2021-05-26 20:08:13 +08:00
2022-02-19 18:20:19 +08:00
azur = on_regex(r'.*?碧蓝航?线?(轻型|重型|特型)池?[1-9|一][0-9]{0,2}[抽|连]', rule=is_switch('azur'), priority=5, block=True)
azur_update = on_keyword({'更新碧蓝信息', '更新碧蓝航线信息'}, permission=SUPERUSER, priority=1, block=True)
2021-05-26 20:08:13 +08:00
2022-02-19 18:20:19 +08:00
fgo = on_regex(r'.*?fgo[1-9|一][0-9]{0,2}[抽|连]', rule=is_switch('fgo'), priority=5, block=True)
fgo_update = on_keyword({'更新fgo信息'}, permission=SUPERUSER, priority=1, block=True)
2021-05-26 20:08:13 +08:00
2022-02-19 18:20:19 +08:00
onmyoji = on_regex(r'.*?阴阳师[1-9|一][0-9]{0,2}[抽|连]', rule=is_switch('onmyoji'), priority=5, block=True)
onmyoji_update = on_keyword({'更新阴阳师信息'}, permission=SUPERUSER, priority=1, block=True)
2021-05-26 20:08:13 +08:00
2021-05-20 19:23:32 +08:00
@prts.handle()
2022-02-19 18:20:19 +08:00
async def _(bot: Bot, event: MessageEvent, state: T_State, reg: Tuple[Any, ...] = RegexGroup()):
2021-05-20 19:23:32 +08:00
msg = str(event.get_message()).strip()
2022-02-19 18:20:19 +08:00
if msg in ['方舟一井', '方舟1井']:
2021-05-20 19:23:32 +08:00
num = 300
else:
2022-02-19 18:20:19 +08:00
rmsg = re.search(r'.*?方舟(.*)[抽|连]', msg)
2021-05-26 20:08:13 +08:00
if rmsg:
num, flag = check_num(rmsg.group(1), 300)
if not flag:
await prts.finish(num, at_sender=True)
2021-05-20 19:23:32 +08:00
else:
return
2021-05-26 20:08:13 +08:00
await prts.send(await prts_draw(int(num)), at_sender=True)
2021-05-20 19:23:32 +08:00
2021-06-04 18:01:33 +08:00
@prts_up_reload.handle()
2021-05-20 19:23:32 +08:00
async def _(bot: Bot, event: MessageEvent, state: T_State):
2021-06-04 18:01:33 +08:00
text = await reload_prts_pool()
2022-02-19 18:20:19 +08:00
await prts_up_reload.finish(Message(f'重载完成!\n{text}'))
2021-05-20 19:23:32 +08:00
@genshin.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
msg = str(event.get_message()).strip()
2022-02-19 18:20:19 +08:00
rmsg = re.search(r'.*?原神(武器|角色)?池?(.*)[抽|井|连]', msg)
2021-06-04 18:01:33 +08:00
if rmsg:
pool_name = rmsg.group(1)
2022-02-19 18:20:19 +08:00
if pool_name == '武器':
pool_name = 'arms'
elif pool_name == '角色':
pool_name = 'char'
2021-06-04 18:01:33 +08:00
else:
2022-02-19 18:20:19 +08:00
pool_name = ''
2021-06-04 18:01:33 +08:00
num = rmsg.group(2)
2022-02-19 18:20:19 +08:00
if msg.find('一井') != -1 or msg.find('1井') != -1:
2021-06-04 18:01:33 +08:00
num = 180
else:
num, flag = check_num(num, 180)
2021-05-26 20:08:13 +08:00
if not flag:
await genshin.finish(num, at_sender=True)
2021-06-04 18:01:33 +08:00
else:
return
2022-02-19 18:20:19 +08:00
await genshin.send(await genshin_draw(event.user_id, int(num), pool_name), at_sender=True)
2021-06-04 18:01:33 +08:00
@genshin_up_reload.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
text = await reload_genshin_pool()
2022-02-19 18:20:19 +08:00
await genshin_reset.finish(Message(f'重载成功!\n{text}'))
2021-05-20 19:23:32 +08:00
@genshin_reset.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
reset_count(event.user_id)
2022-02-19 18:20:19 +08:00
await genshin_reset.send('重置了原神抽卡次数', at_sender=True)
2021-05-20 19:23:32 +08:00
@pretty.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
msg = str(event.get_message()).strip()
2022-02-19 18:20:19 +08:00
if msg.find('1井') != -1 or msg.find('一井') != -1:
2021-05-20 19:23:32 +08:00
num = 200
if msg.find("") == -1:
2022-02-19 18:20:19 +08:00
pool_name = 'char'
2021-05-20 19:23:32 +08:00
else:
2022-02-19 18:20:19 +08:00
pool_name = 'card'
2021-05-20 19:23:32 +08:00
else:
2022-02-19 18:20:19 +08:00
rmsg = re.search(r'.*?马娘(.*)[抽|连]', msg)
2021-05-20 19:23:32 +08:00
if rmsg:
num = rmsg.group(1)
2022-02-19 18:20:19 +08:00
if num[0] == '':
2021-05-20 19:23:32 +08:00
num = num[1:]
2022-02-19 18:20:19 +08:00
pool_name = 'card'
2021-05-20 19:23:32 +08:00
else:
2022-02-19 18:20:19 +08:00
pool_name = 'char'
2021-05-26 20:08:13 +08:00
num, flag = check_num(num, 200)
if not flag:
await pretty.finish(num, at_sender=True)
else:
return
await pretty.send(await pretty_draw(int(num), pool_name), at_sender=True)
2021-06-17 10:18:58 +08:00
@pretty_up_reload.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
text = await reload_pretty_pool()
2022-02-19 18:20:19 +08:00
await genshin_reset.finish(Message(f'重载成功!\n{text}'))
2021-06-17 10:18:58 +08:00
2021-05-26 20:08:13 +08:00
@guardian.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
msg = str(event.get_message()).strip()
2022-02-19 18:20:19 +08:00
pool_name = 'char'
if msg.find('1井') != -1 or msg.find('一井') != -1:
2021-05-26 20:08:13 +08:00
num = 300
2022-02-19 18:20:19 +08:00
if msg.find('武器') != -1:
pool_name = 'arms'
2021-05-26 20:08:13 +08:00
else:
2022-02-19 18:20:19 +08:00
rmsg = re.search(r'.*?坎公骑冠剑(.*)[抽|连]', msg)
2021-05-26 20:08:13 +08:00
if rmsg:
num = rmsg.group(1)
2022-02-19 18:20:19 +08:00
if num.find('武器') != -1:
pool_name = 'arms'
num = num.replace('武器', '')
2021-05-26 20:08:13 +08:00
num, flag = check_num(num, 300)
if not flag:
await guardian.finish(num, at_sender=True)
else:
return
await guardian.send(await guardian_draw(int(num), pool_name), at_sender=True)
2022-02-19 18:20:19 +08:00
@guardian_up_reload.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
text = await reload_guardian_pool()
await genshin_reset.finish(Message(f'重载成功!\n{text}'))
2021-05-26 20:08:13 +08:00
@pcr.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
msg = str(event.get_message()).strip()
2022-02-19 18:20:19 +08:00
if msg.find('1井') != -1 or msg.find('一井') != -1:
2021-05-26 20:08:13 +08:00
num = 300
else:
2022-02-19 18:20:19 +08:00
rmsg = re.search(r'.*?(pcr|公主连结)(.*)[抽|井|连]', msg)
2021-05-26 20:08:13 +08:00
if rmsg:
num, flag = check_num(rmsg.group(2), 300)
if not flag:
await pcr.finish(num, at_sender=True)
else:
return
await pcr.send(await pcr_draw(int(num)), at_sender=True)
2021-06-04 18:01:33 +08:00
@azur.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
msg = str(event.get_message()).strip()
2022-02-19 18:20:19 +08:00
rmsg = re.search(r'.*?碧蓝航?线?(轻型|重型|特型)池?(.*)[抽|连]', msg)
2021-06-04 18:01:33 +08:00
if rmsg:
pool_name = rmsg.group(1)
num, flag = check_num(rmsg.group(2), 300)
if not flag:
await azur.finish(num, at_sender=True)
else:
return
await azur.send(await azur_draw(int(num), pool_name), at_sender=True)
@fgo.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
msg = str(event.get_message()).strip()
2022-02-19 18:20:19 +08:00
rmsg = re.search(r'.*?fgo(.*)[抽|连]', msg)
2021-06-04 18:01:33 +08:00
if rmsg:
num, flag = check_num(rmsg.group(1), 300)
if not flag:
await fgo.finish(num, at_sender=True)
else:
return
await fgo.send(await fgo_draw(int(num)), at_sender=True)
@onmyoji.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
msg = str(event.get_message()).strip()
2022-02-19 18:20:19 +08:00
rmsg = re.search(r'.*?阴阳师(.*)[抽|连]', msg)
2021-06-04 18:01:33 +08:00
if rmsg:
num, flag = check_num(rmsg.group(1), 300)
if not flag:
await onmyoji.finish(num, at_sender=True)
else:
return
await onmyoji.send(await onmyoji_draw(int(num)), at_sender=True)
2021-05-20 19:23:32 +08:00
@prts_update.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
await update_prts_info()
2022-02-19 18:20:19 +08:00
await prts_update.finish('更新完成!')
2021-05-20 19:23:32 +08:00
@genshin_update.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
await update_genshin_info()
2022-02-19 18:20:19 +08:00
await genshin_update.finish('更新完成!')
2021-05-20 19:23:32 +08:00
@pretty_update.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
await update_pretty_info()
2022-02-19 18:20:19 +08:00
await genshin_update.finish('更新完成!')
2021-05-20 19:23:32 +08:00
2021-05-26 20:08:13 +08:00
@guardian_update.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
await update_guardian_info()
2022-02-19 18:20:19 +08:00
await genshin_update.finish('更新完成!')
2021-05-26 20:08:13 +08:00
@pcr_update.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
await update_pcr_info()
2022-02-19 18:20:19 +08:00
await genshin_update.finish('更新完成!')
2021-05-26 20:08:13 +08:00
2021-06-04 18:01:33 +08:00
@azur_update.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
await update_azur_info()
2022-02-19 18:20:19 +08:00
await genshin_update.finish('更新完成!')
2021-06-04 18:01:33 +08:00
@fgo_update.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
await update_fgo_info()
2022-02-19 18:20:19 +08:00
await genshin_update.finish('更新完成!')
2021-06-04 18:01:33 +08:00
@onmyoji_update.handle()
async def _(bot: Bot, event: MessageEvent, state: T_State):
await update_onmyoji_info()
2022-02-19 18:20:19 +08:00
await genshin_update.finish('更新完成!')
2021-06-04 18:01:33 +08:00
2021-05-20 19:23:32 +08:00
# 更新资源
@scheduler.scheduled_job(
2022-02-19 18:20:19 +08:00
'cron',
2021-05-20 19:23:32 +08:00
hour=4,
minute=1,
)
async def _():
2021-06-04 18:01:33 +08:00
tasks = []
2022-02-19 18:20:19 +08:00
if draw_config.PRTS_FLAG:
2021-06-04 18:01:33 +08:00
tasks.append(asyncio.ensure_future(update_prts_info()))
2022-02-19 18:20:19 +08:00
if draw_config.GENSHIN_FLAG:
2021-06-04 18:01:33 +08:00
tasks.append(asyncio.ensure_future(update_genshin_info()))
2022-02-19 18:20:19 +08:00
if draw_config.PRETTY_FLAG:
2021-06-04 18:01:33 +08:00
tasks.append(asyncio.ensure_future(update_pretty_info()))
2022-02-19 18:20:19 +08:00
if draw_config.GUARDIAN_FLAG:
2021-06-04 18:01:33 +08:00
tasks.append(asyncio.ensure_future(update_guardian_info()))
2022-02-19 18:20:19 +08:00
if draw_config.PCR_FLAG:
2021-06-04 18:01:33 +08:00
tasks.append(asyncio.ensure_future(update_pcr_info()))
2022-02-19 18:20:19 +08:00
if draw_config.AZUR_FLAG:
2021-06-04 18:01:33 +08:00
tasks.append(asyncio.ensure_future(update_azur_info()))
2022-02-19 18:20:19 +08:00
if draw_config.FGO_FLAG:
2021-06-04 18:01:33 +08:00
tasks.append(asyncio.ensure_future(update_fgo_info()))
2022-02-19 18:20:19 +08:00
if draw_config.ONMYOJI_FLAG:
2021-06-04 18:01:33 +08:00
tasks.append(asyncio.ensure_future(update_onmyoji_info()))
await asyncio.gather(*tasks)
# 每天四点重载方舟up卡池
2021-05-20 19:23:32 +08:00
@scheduler.scheduled_job(
2022-02-19 18:20:19 +08:00
'cron',
2021-05-20 19:23:32 +08:00
hour=4,
minute=1,
)
async def _():
2022-02-19 18:20:19 +08:00
if draw_config.PRTS_FLAG:
2021-06-04 18:01:33 +08:00
await reload_prts_pool()
2021-06-17 10:18:58 +08:00
# 每天四点重载赛马娘up卡池
@scheduler.scheduled_job(
2022-02-19 18:20:19 +08:00
'cron',
2021-06-17 10:18:58 +08:00
hour=4,
minute=1,
)
async def _():
2022-02-19 18:20:19 +08:00
if draw_config.PRETTY_FLAG:
2021-06-17 10:18:58 +08:00
await reload_pretty_pool()
2021-06-04 18:01:33 +08:00
# 每天下午六点点重载原神up卡池
@scheduler.scheduled_job(
2022-02-19 18:20:19 +08:00
'cron',
2021-06-04 18:01:33 +08:00
hour=18,
minute=1,
)
async def _():
2022-02-19 18:20:19 +08:00
if draw_config.PRTS_FLAG:
2021-06-04 18:01:33 +08:00
await reload_genshin_pool()
2022-02-19 18:20:19 +08:00
# 重载坎公骑冠剑卡池
@scheduler.scheduled_job(
'cron',
hour=4,
minute=1,
)
async def _():
if draw_config.GUARDIAN_FLAG:
await reload_guardian_pool()