🐛 修改俄罗斯轮盘偶尔结算失败

This commit is contained in:
HibiKier 2024-08-03 01:28:08 +08:00
parent 131cd5ea9a
commit e2d20b0eb4
3 changed files with 50 additions and 11 deletions

View File

@ -2,6 +2,8 @@ from tortoise import fields
from zhenxun.services.db_context import Model
from .group_console import GroupConsole
class TaskInfo(Model):
id = fields.IntField(pk=True, generated=True, auto_increment=True)
@ -20,3 +22,21 @@ class TaskInfo(Model):
class Meta:
table = "task_info"
table_description = "被动技能基本信息"
@classmethod
async def is_block(cls, module: str, group_id: str | None) -> bool:
"""判断被动技能是否被禁用
参数:
module: 被动技能模块名
group_id: 群组id
返回:
bool: 是否被禁用
"""
if task := await cls.get_or_none(module=module):
if task.status:
return True
if group_id:
return await GroupConsole.is_block_task(group_id, module)
return False

View File

@ -2,7 +2,7 @@ from nonebot.adapters import Bot
from nonebot.plugin import PluginMetadata
from nonebot_plugin_alconna import Arparma
from nonebot_plugin_alconna import At as alcAt
from nonebot_plugin_alconna import Match
from nonebot_plugin_alconna import Match, UniMsg
from nonebot_plugin_saa import Image, Text
from nonebot_plugin_session import EventSession
@ -64,10 +64,13 @@ async def _(money: int, num: Match[int], at_user: Match[alcAt]):
_russian_matcher.set_path_arg("at_user", at_user.result.target)
@_russian_matcher.got_path("num", prompt="请输入装填子弹的数量!(最多6颗)")
@_russian_matcher.got_path(
"num", prompt="请输入装填子弹的数量!(最多6颗输入取消来取消装弹)"
)
async def _(
bot: Bot,
session: EventSession,
message: UniMsg,
arparma: Arparma,
money: int,
num: int,
@ -75,10 +78,16 @@ async def _(
uname: str = UserName(),
):
gid = session.id2
if message.extract_plain_text() == "取消":
await Text("已取消装弹...").finish()
if not session.id1:
await Text("用户id为空...").finish()
if not gid:
await Text("群组id为空...").finish()
if money <= 0:
await Text("赌注金额必须大于0!").finish(reply=True)
if num < 0 or num > 6:
await Text("子弹数量必须在1-6之间!").finish(reply=True)
_at_user = at_user.result.target if at_user.available else None
rus = Russian(
at_user=_at_user, player1=(session.id1, uname), money=money, bullet_num=num
@ -94,7 +103,6 @@ async def _(
@_accept_matcher.handle()
async def _(session: EventSession, arparma: Arparma, uname: str = UserName()):
global a
gid = session.id2
if not session.id1:
await Text("用户id为空...").finish()

View File

@ -77,6 +77,17 @@ class RussianManage:
bullet_list[i] = 1
return bullet_list
def __remove_job(self, group_id: str):
"""移除定时任务
参数:
group_id: 群组id
"""
try:
scheduler.remove_job(f"russian_job_{group_id}")
except JobLookupError:
pass
def __build_job(
self, bot: Bot, group_id: str, is_add: bool = False, platform: str | None = None
):
@ -88,10 +99,7 @@ class RussianManage:
is_add: 是否添加新定时任务.
platform: 平台
"""
try:
scheduler.remove_job(f"russian_job_{group_id}")
except JobLookupError:
pass
self.__remove_job(group_id)
if is_add:
date = datetime.now() + timedelta(seconds=31)
scheduler.add_job(
@ -164,7 +172,7 @@ class RussianManage:
else:
message_list = [
Text(
"若30秒内无人接受挑战则此次对决作废【首次游玩请发送 ’俄罗斯轮盘帮助 来查看命令】"
"若30秒内无人接受挑战则此次对决作废【首次游玩请at我发送 帮助俄罗斯轮盘‘ 来查看命令】"
)
]
result = Text(
@ -191,6 +199,8 @@ class RussianManage:
return Text("又不是找你决斗,你接受什么啊!气!")
if russian.player2:
return Text("当前决斗已被其他玩家接受!请等待下局对决!")
if russian.player1[0] == user_id:
return Text("你发起的对决,你接受什么啊!气!")
russian.player2 = (user_id, uname)
russian.next_user = russian.player1[0]
return MessageFactory(
@ -321,11 +331,11 @@ class RussianManage:
del self._data[group_id]
return Text("规定时间内还未有人接受决斗,当前决斗过期...")
return Text("决斗还未开始,,无法结算哦...")
if user_id and user_id not in [russian.player1[0], russian.player1[0]]:
return Text("吃瓜群众不要捣乱!黄牌警告!")
if user_id and user_id not in [russian.player1[0], russian.player2[0]]:
return Text(f"吃瓜群众不要捣乱!黄牌警告!")
if not self.__check_is_timeout(group_id):
return Text(
f"{russian.player1[1]}{russian.player1[1]} 比赛并未超时,请继续比赛..."
f"{russian.player1[1]}{russian.player2[1]} 比赛并未超时,请继续比赛..."
)
win_user = None
lose_user = None
@ -379,6 +389,7 @@ class RussianManage:
padding=10,
color="#f9f6f2",
)
self.__remove_job(group_id)
result.append(Image(image.pic2bytes()))
del self._data[group_id]
return MessageFactory(result)