|
|
|
@ -1,5 +1,5 @@
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
from traceback import print_exc
|
|
|
|
|
from traceback import format_exc
|
|
|
|
|
from app import app, isAnAdmin
|
|
|
|
|
from typing import Any, List, Literal, Union
|
|
|
|
|
from pyrogram.types import User, ChatMember, ChatPrivileges, Chat, Message, Photo, Video, Document, Animation, Voice, ForceReply, ReplyKeyboardMarkup
|
|
|
|
@ -8,7 +8,7 @@ from dateutil.relativedelta import relativedelta
|
|
|
|
|
from classes.errors.geo import PlaceNotFoundError
|
|
|
|
|
from modules.database import col_tmp, col_users, col_applications, col_sponsorships, col_messages, col_spoilers
|
|
|
|
|
from modules.logging import logWrite
|
|
|
|
|
from modules.utils import configGet, create_tmp, download_tmp, find_location, locale, should_quote
|
|
|
|
|
from modules.utils import configGet, find_location, locale, should_quote
|
|
|
|
|
|
|
|
|
|
class DefaultApplicationTemp(dict):
|
|
|
|
|
def __init__(self, user: int, reapply: bool = False):
|
|
|
|
@ -71,6 +71,10 @@ class LabelTooLongError(Exception):
|
|
|
|
|
self.label = label
|
|
|
|
|
super().__init__(f"Could not set label to '{label}' because it is {len(label)} characters long (16 is maximum)")
|
|
|
|
|
|
|
|
|
|
class LabelSettingError(Exception):
|
|
|
|
|
def __init__(self, exp: Exception, trace: str) -> None:
|
|
|
|
|
super().__init__(f"❌ **Could not set label**\n\nException: `{exp}`\n\n**Traceback:**\n```\n{trace}\n```")
|
|
|
|
|
|
|
|
|
|
class HoloUser():
|
|
|
|
|
"""This object represents a user of HoloChecker bot.
|
|
|
|
|
It is primarily used to interact with a database in a more python-friendly way,
|
|
|
|
@ -266,9 +270,9 @@ class HoloUser():
|
|
|
|
|
|
|
|
|
|
# Report to admin and to sender about message sending failure
|
|
|
|
|
except Exception as exp:
|
|
|
|
|
logWrite(f"Exception {exp} happened as {context.from_user.id} tried to send message to {self.id}. Traceback:\n{print_exc()}")
|
|
|
|
|
logWrite(f"Exception {exp} happened as {context.from_user.id} tried to send message to {self.id}. Traceback:\n{format_exc()}")
|
|
|
|
|
try:
|
|
|
|
|
await app.send_message(configGet("owner"), locale("message_traceback", "message").format(context.from_user.id, self.id, exp, print_exc()))
|
|
|
|
|
await app.send_message(configGet("owner"), locale("message_traceback", "message").format(context.from_user.id, self.id, exp, format_exc()))
|
|
|
|
|
except bad_request_400.PeerIdInvalid:
|
|
|
|
|
logWrite(f"Could not notify admin about failure when sending message! Admin has never interacted with bot!")
|
|
|
|
|
await context.reply_text(locale("message_error", "message"), quote=should_quote(context))
|
|
|
|
@ -288,10 +292,9 @@ class HoloUser():
|
|
|
|
|
if not await isAnAdmin(self.id):
|
|
|
|
|
await app.set_administrator_title(configGet("users", "groups"), self.id, label)
|
|
|
|
|
self.set("label", label)
|
|
|
|
|
except bad_request_400.UserCreator:
|
|
|
|
|
logWrite(f"Could not set {self.id}'s title to '{self.label}' because of bad_request_400.UserCreator")
|
|
|
|
|
except bad_request_400.ChatAdminRequired:
|
|
|
|
|
logWrite(f"Could not set {self.id}'s title to '{self.label}' because of bad_request_400.ChatAdminRequired")
|
|
|
|
|
except Exception as exp:
|
|
|
|
|
logWrite(f"Could not set {self.id}'s title to '{self.label}' due to {exp}")
|
|
|
|
|
raise LabelSettingError(exp, format_exc())
|
|
|
|
|
|
|
|
|
|
async def label_reset(self, chat: Chat) -> None:
|
|
|
|
|
"""Reset label in destination group
|
|
|
|
@ -391,7 +394,6 @@ class HoloUser():
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
print(f'Look: {((datetime.now() - input_dt).days)} > {(datetime.now() - datetime.now().replace(year=datetime.now().year - configGet("age_allowed"))).days}')
|
|
|
|
|
progress["application"][str(stage)] = input_dt
|
|
|
|
|
col_tmp.update_one({"user": {"$eq": self.id}, "type": {"$eq": "application"}}, {"$set": {"application": progress["application"], "stage": progress["stage"]+1}})
|
|
|
|
|
await msg.reply_text(locale(f"question{stage+1}", "message", locale=self.locale), reply_markup=ForceReply(placeholder=str(locale(f"question{stage+1}", "force_reply", locale=self.locale))))
|
|
|
|
@ -412,7 +414,7 @@ class HoloUser():
|
|
|
|
|
except Exception as exp:
|
|
|
|
|
await msg.reply_text(locale("question3_error", "message", locale=self.locale), reply_markup=ForceReply(placeholder=str(locale(f"question{stage}", "force_reply", locale=self.locale))))
|
|
|
|
|
try:
|
|
|
|
|
await app.send_message(configGet("owner"), locale("question3_traceback", "message", locale=self.locale).format(query, exp, print_exc()))
|
|
|
|
|
await app.send_message(configGet("owner"), locale("question3_traceback", "message", locale=self.locale).format(query, exp, format_exc()))
|
|
|
|
|
except bad_request_400.PeerIdInvalid:
|
|
|
|
|
logWrite(f"Could not notify admin about failure when sending message! Admin has never interacted with bot!")
|
|
|
|
|
return
|
|
|
|
@ -483,12 +485,9 @@ class HoloUser():
|
|
|
|
|
* msg (`Message`): Message that should receive replies
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
if col_tmp.find_one({"user": self.id, "type": "sponsorship"}) is not None:
|
|
|
|
|
|
|
|
|
|
progress = col_tmp.find_one({"user": self.id, "type": "sponsorship"})
|
|
|
|
|
|
|
|
|
|
if progress is None:
|
|
|
|
|
return
|
|
|
|
|
if progress is not None:
|
|
|
|
|
|
|
|
|
|
stage = progress["stage"]
|
|
|
|
|
|
|
|
|
@ -522,7 +521,7 @@ class HoloUser():
|
|
|
|
|
elif stage == 3:
|
|
|
|
|
|
|
|
|
|
if photo is not None:
|
|
|
|
|
progress["sponsorship"]["proof"] = await download_tmp(app, photo.file_id)
|
|
|
|
|
progress["sponsorship"]["proof"] = photo.file_id
|
|
|
|
|
col_tmp.update_one({"user": {"$eq": self.id}, "type": {"$eq": "sponsorship"}}, {"$set": {"sponsorship": progress["sponsorship"], "stage": progress["stage"]+1}})
|
|
|
|
|
await msg.reply_text(locale(f"sponsor{stage+1}", "message", locale=self.locale), reply_markup=ForceReply(placeholder=str(locale(f"sponsor{stage+1}", "force_reply", locale=self.locale))))
|
|
|
|
|
|
|
|
|
@ -533,7 +532,7 @@ class HoloUser():
|
|
|
|
|
progress["sponsorship"]["label"] = query
|
|
|
|
|
col_tmp.update_one({"user": {"$eq": self.id}, "type": {"$eq": "sponsorship"}}, {"$set": {"sponsorship": progress["sponsorship"], "complete": True}})
|
|
|
|
|
await msg.reply_photo(
|
|
|
|
|
photo=create_tmp(progress["sponsorship"]["proof"], kind="image"),
|
|
|
|
|
photo=progress["sponsorship"]["proof"],
|
|
|
|
|
caption=locale("sponsor_confirm", "message", locale=self.locale).format(
|
|
|
|
|
progress["sponsorship"]["streamer"],
|
|
|
|
|
progress["sponsorship"]["expires"].strftime("%d.%m.%Y"),
|
|
|
|
|