PaiGram/plugins/sign.py

114 lines
5.4 KiB
Python
Raw Normal View History

2022-04-14 07:18:45 +00:00
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import CallbackContext, ConversationHandler, filters
2022-05-18 14:27:33 +00:00
from logger import Log
2022-04-14 07:18:45 +00:00
from model.base import ServiceEnum
from model.genshinhelper import YuanShen, Genshin
from plugins.base import BasePlugins
from service import BaseService
from service.base import UserInfoData
class SignCommandData:
user_info: UserInfoData = UserInfoData()
chat_id: int = 0
reply_to_message_id: int = 0
class Sign(BasePlugins):
def __init__(self, service: BaseService):
super().__init__(service)
self._sign_yuanshen = YuanShen()
self._sing_genshin = Genshin()
2022-04-14 07:18:45 +00:00
CHECK_SERVER, COMMAND_RESULT = range(10400, 10402)
async def _start_sign(self, user_info: UserInfoData, service: ServiceEnum) -> str:
if service == ServiceEnum.MIHOYOBBS:
sign_api = self._sign_yuanshen
uid = user_info.mihoyo_game_uid
cookies = user_info.mihoyo_cookie
2022-04-14 07:18:45 +00:00
else:
sign_api = self._sing_genshin
uid = user_info.hoyoverse_game_uid
cookies = user_info.hoyoverse_cookie
2022-04-14 07:18:45 +00:00
sign_give = await sign_api.get_sign_give(cookies=cookies)
if sign_give.error:
2022-05-18 14:27:33 +00:00
Log.error(f"UID {uid} 获取签到信息失败API返回信息为 {sign_give.message}")
2022-04-14 07:18:45 +00:00
return f"获取签到信息失败API返回信息为 {sign_give.message}"
is_sign = await sign_api.is_sign(uid, cookies=cookies)
if is_sign.error:
2022-05-18 14:27:33 +00:00
Log.error(f"UID {uid} 获取签到信息失败API返回信息为 {is_sign.message}")
2022-04-14 07:18:45 +00:00
return f"获取签到状态失败API返回信息为 {is_sign.message}"
total_sign_day = is_sign.data["total_sign_day"]
award_name = sign_give.data["awards"][total_sign_day - 1]["name"]
award_cnt = sign_give.data["awards"][total_sign_day - 1]["cnt"]
2022-04-14 07:18:45 +00:00
today = is_sign.data["today"]
if not is_sign.data["is_sign"]:
sign = await sign_api.sign(uid, cookies=cookies)
if sign.code == 0:
result = "OK"
elif sign.code == -5003:
result = "今天旅行者已经签到过了~"
else:
2022-05-18 14:27:33 +00:00
Log.error(f"UID {uid} 签到失败 返回 错误代码 {sign.code} 错误信息 {sign.message}")
result = f"签到失败 返回 错误代码 {sign.code} 错误信息 {sign.message}"
2022-04-14 07:18:45 +00:00
else:
result = "今天旅行者已经签到过了~"
2022-05-18 14:27:33 +00:00
Log.info(f"UID {uid} 签到结果 {result}")
2022-04-14 07:18:45 +00:00
message = f"###### {today} ######\n" \
f"UID: {uid}\n" \
f"今日奖励: {award_name} × {award_cnt}\n" \
f"签到结果: {result}"
return message
async def command_start(self, update: Update, context: CallbackContext) -> int:
user = update.effective_user
message = update.message
2022-05-18 14:27:33 +00:00
Log.info(f"用户 {user.full_name}[{user.id}] 每日签到命令请求")
if filters.ChatType.GROUPS.filter(message):
self._add_delete_message_job(context, message.chat_id, message.message_id)
2022-04-14 07:18:45 +00:00
sign_command_data: SignCommandData = context.chat_data.get("sign_command_data")
if sign_command_data is None:
sign_command_data = SignCommandData()
context.chat_data["sign_command_data"] = sign_command_data
user_info = await self.service.user_service_db.get_user_info(user.id)
2022-04-21 11:28:17 +00:00
if user_info.user_id == 0:
await update.message.reply_text("未查询到账号信息")
return ConversationHandler.END
2022-04-14 07:18:45 +00:00
if user_info.service == ServiceEnum.NULL:
message = "请选择你要签到的服务器"
keyboard = [
[
InlineKeyboardButton("米游社", callback_data="米游社"),
2022-04-14 07:18:45 +00:00
InlineKeyboardButton("HoYoLab", callback_data="HoYoLab")
]
]
sign_command_data.user_info = user_info
await update.message.reply_text(message, reply_markup=InlineKeyboardMarkup(keyboard))
sign_command_data.chat_id = update.message.chat_id
sign_command_data.reply_to_message_id = update.message.message_id
return self.COMMAND_RESULT
else:
sign = await self._start_sign(user_info, user_info.service)
2022-04-14 07:18:45 +00:00
reply_message = await message.reply_text(sign)
if filters.ChatType.GROUPS.filter(reply_message):
2022-04-14 07:18:45 +00:00
self._add_delete_message_job(context, reply_message.chat_id, reply_message.message_id)
return ConversationHandler.END
async def command_result(self, update: Update, context: CallbackContext) -> int:
sign_command_data: SignCommandData = context.chat_data["sign_command_data"]
user_info = sign_command_data.user_info
query = update.callback_query
await query.answer()
message = "签到失败"
if query.data == "米游社":
message = await self._start_sign(user_info, ServiceEnum.MIHOYOBBS)
2022-04-14 07:18:45 +00:00
if query.data == "HoYoLab":
message = await self._start_sign(user_info, ServiceEnum.HOYOLAB)
2022-04-14 07:18:45 +00:00
await query.edit_message_text(message)
if query_message := query.message:
if filters.ChatType.GROUPS.filter(query_message):
self._add_delete_message_job(context, query_message.chat_id, query_message.message_id)
2022-04-14 07:18:45 +00:00
return ConversationHandler.END