mirror of
https://github.com/PaiGramTeam/PaiGram.git
synced 2024-11-27 02:26:08 +00:00
83 lines
2.6 KiB
Python
83 lines
2.6 KiB
Python
|
from pathlib import Path
|
||
|
from typing import Optional
|
||
|
|
||
|
import httpx
|
||
|
from httpx import URL
|
||
|
from httpx import HTTPError
|
||
|
from telegram import InlineKeyboardMarkup, InlineKeyboardButton
|
||
|
from telegram.helpers import create_deep_linked_url
|
||
|
|
||
|
from gram_core.basemodel import Settings
|
||
|
from modules.gacha_log.error import GachaLogWebNotConfigError, GachaLogWebUploadError, GachaLogNotFound
|
||
|
|
||
|
|
||
|
class GachaLogWebConfig(Settings):
|
||
|
"""抽卡记录在线查询配置"""
|
||
|
|
||
|
url: Optional[str] = ""
|
||
|
token: Optional[str] = ""
|
||
|
|
||
|
class Config(Settings.Config):
|
||
|
env_prefix = "gacha_log_web_"
|
||
|
|
||
|
|
||
|
gacha_log_web_config = GachaLogWebConfig()
|
||
|
DEFAULT_POOL = "角色祈愿"
|
||
|
|
||
|
|
||
|
class GachaLogOnlineView:
|
||
|
"""抽卡记录在线查询"""
|
||
|
|
||
|
gacha_log_path: Path
|
||
|
|
||
|
@staticmethod
|
||
|
def get_web_upload_button(bot_username: str):
|
||
|
if not gacha_log_web_config.url:
|
||
|
return None
|
||
|
return InlineKeyboardMarkup(
|
||
|
[
|
||
|
[
|
||
|
InlineKeyboardButton(
|
||
|
">> 查询详细信息 <<", url=create_deep_linked_url(bot_username, "gacha_log_online_view")
|
||
|
)
|
||
|
]
|
||
|
]
|
||
|
)
|
||
|
|
||
|
async def web_upload(self, user_id: str, uid: str) -> str:
|
||
|
if not gacha_log_web_config.url:
|
||
|
raise GachaLogWebNotConfigError
|
||
|
file_path = self.gacha_log_path / f"{user_id}-{uid}.json"
|
||
|
if not file_path.exists():
|
||
|
raise GachaLogNotFound
|
||
|
async with httpx.AsyncClient() as client:
|
||
|
with open(file_path, "rb") as file:
|
||
|
try:
|
||
|
req = await client.post(
|
||
|
URL(gacha_log_web_config.url).join("upload"),
|
||
|
files={"file": file},
|
||
|
data={
|
||
|
"token": gacha_log_web_config.token,
|
||
|
"uid": uid,
|
||
|
"game": "genshin",
|
||
|
},
|
||
|
)
|
||
|
req.raise_for_status()
|
||
|
except HTTPError as e:
|
||
|
raise GachaLogWebUploadError from e
|
||
|
account_id = req.json()["account_id"]
|
||
|
url = (
|
||
|
URL(gacha_log_web_config.url)
|
||
|
.join("gacha_log")
|
||
|
.copy_merge_params(
|
||
|
{
|
||
|
"account_id": account_id,
|
||
|
"banner_type": DEFAULT_POOL,
|
||
|
"rarities": "3,4,5",
|
||
|
"size": 100,
|
||
|
"page": 1,
|
||
|
}
|
||
|
)
|
||
|
)
|
||
|
return str(url)
|