🐛 Fix conversation admin check handle

This commit is contained in:
xtaodada 2023-06-14 18:59:04 +08:00
parent 9c343e2e72
commit d0cf14e4b0
Signed by: xtaodada
GPG Key ID: 4CBB3F4FA8C85659
8 changed files with 49 additions and 37 deletions

View File

@ -252,12 +252,23 @@ class _Conversation(_Plugin, ConversationFuncs, ABC):
handlers: List[HandlerType] = []
for data in datas:
handlers.append(
data.type(
callback=func,
**data.kwargs,
if data.admin:
handlers.append(
AdminHandler(
handler=data.type(
callback=func,
**data.kwargs,
),
application=self.application,
)
)
else:
handlers.append(
data.type(
callback=func,
**data.kwargs,
)
)
)
if conversation_data := getattr(func, _CONVERSATION_HANDLER_ATTR_NAME, None):
if (_type := conversation_data.type) is ConversationDataType.Entry:

View File

@ -7,7 +7,7 @@ from modules.gacha.error import GachaIllegalArgument
from modules.gacha.utils import lerp
class BannerType(Enum):
class GenshinBannerType(Enum):
STANDARD = 0
EVENT = 1
WEAPON = 2
@ -35,7 +35,7 @@ class GachaBanner(BaseModel):
title: str = ""
html_title: str = ""
banner_id: str = ""
banner_type: BannerType = BannerType.STANDARD
banner_type: GenshinBannerType = GenshinBannerType.STANDARD
wish_max_progress: int = 0
pool_balance_weights4: Tuple[int] = ((1, 255), (17, 255), (21, 10455))
pool_balance_weights5: Tuple[int] = ((1, 30), (147, 150), (181, 10230))
@ -58,7 +58,7 @@ class GachaBanner(BaseModel):
raise GachaIllegalArgument
def has_epitomized(self):
return self.banner_type == BannerType.WEAPON
return self.banner_type == GenshinBannerType.WEAPON
def get_event_chance(self, rarity: int) -> int:
if rarity == 4:

View File

@ -2,7 +2,7 @@ from typing import Optional
from pydantic import BaseModel
from modules.gacha.banner import BannerType, GachaBanner
from modules.gacha.banner import GenshinBannerType, GachaBanner
from modules.gacha.player.banner import PlayerGachaBannerInfo
@ -23,8 +23,8 @@ class PlayerGachaInfo(BaseModel):
self.event_character_banner = PlayerGachaBannerInfo()
def get_banner_info(self, banner: GachaBanner) -> PlayerGachaBannerInfo:
if banner.banner_type == BannerType.EVENT:
if banner.banner_type == GenshinBannerType.EVENT:
return self.event_character_banner
if banner.banner_type == BannerType.WEAPON:
if banner.banner_type == GenshinBannerType.WEAPON:
return self.event_weapon_banner
return self.standard_banner

View File

@ -1,13 +1,13 @@
from genshin.models import BannerType
from genshin.models import GenshinBannerType
PAIMONMOE_VERSION = 3
UIGF_VERSION = "v2.2"
GACHA_TYPE_LIST = {
BannerType.NOVICE: "新手祈愿",
BannerType.PERMANENT: "常驻祈愿",
BannerType.WEAPON: "武器祈愿",
BannerType.CHARACTER1: "角色祈愿",
BannerType.CHARACTER2: "角色祈愿",
GenshinBannerType.NOVICE: "新手祈愿",
GenshinBannerType.PERMANENT: "常驻祈愿",
GenshinBannerType.WEAPON: "武器祈愿",
GenshinBannerType.CHARACTER1: "角色祈愿",
GenshinBannerType.CHARACTER2: "角色祈愿",
}

View File

@ -9,7 +9,7 @@ from typing import Dict, IO, List, Optional, Tuple, Union
import aiofiles
from genshin import AuthkeyTimeout, Client, InvalidAuthkey
from genshin.models import BannerType
from genshin.models import GenshinBannerType
from openpyxl import load_workbook
from core.dependence.assets import AssetsService
@ -164,7 +164,7 @@ class GachaLog:
def import_data_backend(all_items: List[GachaItem], gacha_log: GachaLogInfo, temp_id_data: Dict) -> int:
new_num = 0
for item_info in all_items:
pool_name = GACHA_TYPE_LIST[BannerType(int(item_info.gacha_type))]
pool_name = GACHA_TYPE_LIST[GenshinBannerType(int(item_info.gacha_type))]
if item_info.id not in temp_id_data[pool_name]:
gacha_log.item_list[pool_name].append(item_info)
temp_id_data[pool_name].append(item_info.id)
@ -482,7 +482,7 @@ class GachaLog:
return f"{pool_name} · 非"
return pool_name
async def get_analysis(self, user_id: int, client: Client, pool: BannerType, assets: AssetsService):
async def get_analysis(self, user_id: int, client: Client, pool: GenshinBannerType, assets: AssetsService):
"""
获取抽卡记录分析数据
:param user_id: 用户id
@ -502,13 +502,13 @@ class GachaLog:
all_five, no_five_star = await self.get_all_5_star_items(data, assets, pool_name)
all_four, no_four_star = await self.get_all_4_star_items(data, assets)
summon_data = None
if pool == BannerType.CHARACTER1:
if pool == GenshinBannerType.CHARACTER1:
summon_data = self.get_301_pool_data(total, all_five, no_five_star, no_four_star)
pool_name = self.count_fortune(pool_name, summon_data)
elif pool == BannerType.WEAPON:
elif pool == GenshinBannerType.WEAPON:
summon_data = self.get_302_pool_data(total, all_five, all_four, no_five_star, no_four_star)
pool_name = self.count_fortune(pool_name, summon_data, True)
elif pool == BannerType.PERMANENT:
elif pool == GenshinBannerType.PERMANENT:
summon_data = self.get_200_pool_data(total, all_five, all_four, no_five_star, no_four_star)
pool_name = self.count_fortune(pool_name, summon_data)
last_time = data[0].time.strftime("%Y-%m-%d %H:%M")
@ -526,7 +526,7 @@ class GachaLog:
}
async def get_pool_analysis(
self, user_id: int, client: Client, pool: BannerType, assets: AssetsService, group: bool
self, user_id: int, client: Client, pool: GenshinBannerType, assets: AssetsService, group: bool
) -> dict:
"""获取抽卡记录分析数据
:param user_id: 用户id

View File

@ -126,7 +126,7 @@ class PayLogPlugin(Plugin.Conversation):
@conversation.entry_point
@handler(CommandHandler, command="pay_log_delete", filters=filters.ChatType.PRIVATE, block=False)
@handler(MessageHandler, filters=filters.Regex("^删除充值记录$") & filters.ChatType.PRIVATE, block=False)
async def command_start_delete(self, update: Update, _: CallbackContext) -> int:
async def command_start_delete(self, update: Update, context: CallbackContext) -> int:
message = update.effective_message
user = update.effective_user
logger.info("用户 %s[%s] 删除充值记录命令请求", user.full_name, user.id)
@ -140,6 +140,7 @@ class PayLogPlugin(Plugin.Conversation):
if not status:
await message.reply_text("你还没有导入充值记录哦~")
return ConversationHandler.END
context.chat_data["uid"] = client.uid
await message.reply_text("你确定要删除充值记录吗?(此项操作无法恢复),如果确定请发送 ”确定“,发送其他内容取消")
return CONFIRM_DELETE

View File

@ -16,7 +16,7 @@ from metadata.genshin import AVATAR_DATA, WEAPON_DATA, avatar_to_game_id, weapon
from metadata.shortname import weaponToName
from modules.apihelper.client.components.gacha import Gacha as GachaClient
from modules.apihelper.models.genshin.gacha import GachaInfo
from modules.gacha.banner import BannerType, GachaBanner
from modules.gacha.banner import GenshinBannerType, GachaBanner
from modules.gacha.player.info import PlayerGachaInfo
from modules.gacha.system import BannerSystem
from utils.log import logger
@ -99,16 +99,16 @@ class WishSimulatorHandle:
banner.fallback_items4_pool1.append(weapon_to_game_id(r4_prob["item_name"]))
if gacha_type in {301, 400}:
banner.wish_max_progress = 1
banner.banner_type = BannerType.EVENT
banner.banner_type = GenshinBannerType.EVENT
banner.weight4 = ((1, 510), (8, 510), (10, 10000))
banner.weight5 = ((1, 60), (73, 60), (90, 10000))
elif gacha_type == 302:
banner.wish_max_progress = 2
banner.banner_type = BannerType.WEAPON
banner.banner_type = GenshinBannerType.WEAPON
banner.weight4 = ((1, 600), (7, 600), (10, 10000))
banner.weight5 = ((1, 70), (62, 70), (90, 10000))
else:
banner.banner_type = BannerType.STANDARD
banner.banner_type = GenshinBannerType.STANDARD
return banner
async def gacha_base_info(self, gacha_name: str = "角色活动", default: bool = False) -> GachaInfo:
@ -228,7 +228,7 @@ class WishSimulatorPlugin(Plugin):
player_gacha_info = await self.gacha_db.get(user.id)
# 检查 wish_item_id
if (
banner.banner_type == BannerType.WEAPON
banner.banner_type == GenshinBannerType.WEAPON
and player_gacha_info.event_weapon_banner.wish_item_id not in banner.rate_up_items5
):
player_gacha_info.event_weapon_banner.wish_item_id = 0

View File

@ -2,7 +2,7 @@ from io import BytesIO
import genshin
from aiofiles import open as async_open
from genshin.models import BannerType
from genshin.models import GenshinBannerType
from telegram import Document, InlineKeyboardButton, InlineKeyboardMarkup, Message, Update, User
from telegram.constants import ChatAction
from telegram.ext import CallbackContext, CommandHandler, ConversationHandler, MessageHandler, filters
@ -304,12 +304,12 @@ class WishLogPlugin(Plugin.Conversation):
async def command_start_analysis(self, update: Update, context: CallbackContext) -> None:
message = update.effective_message
user = update.effective_user
pool_type = BannerType.CHARACTER1
pool_type = GenshinBannerType.CHARACTER1
if args := self.get_args(context):
if "武器" in args:
pool_type = BannerType.WEAPON
pool_type = GenshinBannerType.WEAPON
elif "常驻" in args:
pool_type = BannerType.STANDARD
pool_type = GenshinBannerType.STANDARD
logger.info("用户 %s[%s] 抽卡记录命令请求 || 参数 %s", user.full_name, user.id, pool_type.name)
try:
client = await self.helper.get_genshin_client(user.id, need_cookie=False)
@ -358,13 +358,13 @@ class WishLogPlugin(Plugin.Conversation):
async def command_start_count(self, update: Update, context: CallbackContext) -> None:
message = update.effective_message
user = update.effective_user
pool_type = BannerType.CHARACTER1
pool_type = GenshinBannerType.CHARACTER1
all_five = False
if args := self.get_args(context):
if "武器" in args:
pool_type = BannerType.WEAPON
pool_type = GenshinBannerType.WEAPON
elif "常驻" in args:
pool_type = BannerType.STANDARD
pool_type = GenshinBannerType.STANDARD
elif "仅五星" in args:
all_five = True
logger.info("用户 %s[%s] 抽卡统计命令请求 || 参数 %s || 仅五星 %s", user.full_name, user.id, pool_type.name, all_five)