mirror of
https://github.com/PaiGramTeam/PamGram.git
synced 2024-11-16 12:02:16 +00:00
✨ 支持自动签到统计信息
This commit is contained in:
parent
77ee577f7a
commit
6302ba72b1
@ -233,6 +233,7 @@ class Sign(Plugin, BasePlugin):
|
|||||||
if user.chat_id == chat_id:
|
if user.chat_id == chat_id:
|
||||||
return "自动签到已经开启过了"
|
return "自动签到已经开启过了"
|
||||||
user.chat_id = chat_id
|
user.chat_id = chat_id
|
||||||
|
user.status = SignStatusEnum.STATUS_SUCCESS
|
||||||
await self.sign_service.update(user)
|
await self.sign_service.update(user)
|
||||||
return "修改自动签到通知对话成功"
|
return "修改自动签到通知对话成功"
|
||||||
elif method == "关闭":
|
elif method == "关闭":
|
||||||
|
@ -16,6 +16,8 @@ from core.sign.models import SignStatusEnum
|
|||||||
from core.sign.services import SignServices
|
from core.sign.services import SignServices
|
||||||
from core.user import UserService
|
from core.user import UserService
|
||||||
from plugins.genshin.sign import Sign
|
from plugins.genshin.sign import Sign
|
||||||
|
from plugins.system.errorhandler import notice_chat_id
|
||||||
|
from plugins.system.sign_status import SignStatus
|
||||||
from utils.helpers import get_genshin_client
|
from utils.helpers import get_genshin_client
|
||||||
from utils.log import logger
|
from utils.log import logger
|
||||||
|
|
||||||
@ -85,18 +87,17 @@ class SignJob(Plugin):
|
|||||||
|
|
||||||
@job.run_daily(time=datetime.time(hour=0, minute=1, second=0), name="SignJob")
|
@job.run_daily(time=datetime.time(hour=0, minute=1, second=0), name="SignJob")
|
||||||
async def sign(self, context: CallbackContext):
|
async def sign(self, context: CallbackContext):
|
||||||
if context.job.name == "SignJob":
|
logger.info("正在执行自动签到" if context.job.name == "SignJob" else "正在执行自动重签")
|
||||||
logger.info("正在执行自动签到")
|
|
||||||
if context.job.name == "SignAgainJob":
|
|
||||||
logger.info("正在执行自动重签")
|
|
||||||
sign_list = await self.sign_service.get_all()
|
sign_list = await self.sign_service.get_all()
|
||||||
for sign_db in sign_list:
|
for sign_db in sign_list:
|
||||||
user_id = sign_db.user_id
|
user_id = sign_db.user_id
|
||||||
if sign_db.status != SignStatusEnum.STATUS_SUCCESS:
|
if sign_db.status in [SignStatusEnum.INVALID_COOKIES, SignStatusEnum.FORBIDDEN]:
|
||||||
if sign_db.status == SignStatusEnum.TIMEOUT_ERROR:
|
continue
|
||||||
if context.job.name == "SignAgainJob":
|
if context.job.name == "SignJob":
|
||||||
logger.info(f"用户 [{user_id}] 即将执行重签")
|
if sign_db.status not in [SignStatusEnum.STATUS_SUCCESS, SignStatusEnum.ALREADY_CLAIMED]:
|
||||||
else:
|
continue
|
||||||
|
elif context.job.name == "SignAgainJob":
|
||||||
|
if sign_db.status in [SignStatusEnum.STATUS_SUCCESS, SignStatusEnum.ALREADY_CLAIMED]:
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
text = await self.single_sign(user_id)
|
text = await self.single_sign(user_id)
|
||||||
@ -142,6 +143,9 @@ class SignJob(Plugin):
|
|||||||
continue
|
continue
|
||||||
sign_db.time_updated = datetime.datetime.now()
|
sign_db.time_updated = datetime.datetime.now()
|
||||||
await self.sign_service.update(sign_db)
|
await self.sign_service.update(sign_db)
|
||||||
logger.info("执行自动签到完成")
|
logger.info("执行自动签到完成" if context.job.name == "SignJob" else "执行自动重签完成")
|
||||||
if context.job.name == "SignJob":
|
if context.job.name == "SignJob":
|
||||||
context.job_queue.run_once(self.sign, when=datetime.time(hour=0, minute=1, second=0), name="SignAgainJob")
|
context.job_queue.run_once(self.sign, when=datetime.time(hour=0, minute=1, second=0), name="SignAgainJob")
|
||||||
|
elif context.job.name == "SignAgainJob":
|
||||||
|
text = await SignStatus.get_sign_status(self.sign_service)
|
||||||
|
await context.bot.send_message(notice_chat_id, text, parse_mode=ParseMode.HTML)
|
||||||
|
31
plugins/system/sign_status.py
Normal file
31
plugins/system/sign_status.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
from telegram import Update
|
||||||
|
from telegram.ext import CommandHandler, CallbackContext
|
||||||
|
|
||||||
|
from core.plugin import Plugin, handler
|
||||||
|
from core.sign import SignServices
|
||||||
|
from utils.decorators.admins import bot_admins_rights_check
|
||||||
|
from utils.log import logger
|
||||||
|
|
||||||
|
|
||||||
|
class SignStatus(Plugin):
|
||||||
|
def __init__(self, sign_service: SignServices = None):
|
||||||
|
self.sign_service = sign_service
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
async def get_sign_status(sign_service: SignServices) -> str:
|
||||||
|
sign_db = await sign_service.get_all()
|
||||||
|
names = ["签到成功", "Cookie 无效", "提前签到", "触发验证码", "API异常", "请求超时", "请求失败", "通知失败"]
|
||||||
|
values = [0, 0, 0, 0, 0, 0, 0, 0]
|
||||||
|
for sign in sign_db:
|
||||||
|
values[sign.status.value] += 1
|
||||||
|
text = f"<b>自动签到统计信息</b>\n\n总人数:<code>{len(sign_db)}</code>\n"
|
||||||
|
return text + "\n".join(f"{name}: <code>{value}</code>" for name, value in zip(names, values))
|
||||||
|
|
||||||
|
@handler(CommandHandler, command="sign_status", block=False)
|
||||||
|
@bot_admins_rights_check
|
||||||
|
async def sign_status(self, update: Update, _: CallbackContext):
|
||||||
|
user = update.effective_user
|
||||||
|
logger.info(f"用户 {user.full_name}[{user.id}] sign_status 命令请求")
|
||||||
|
message = update.effective_message
|
||||||
|
text = await self.get_sign_status(self.sign_service)
|
||||||
|
await message.reply_text(text, parse_mode="html", quote=True)
|
Loading…
Reference in New Issue
Block a user