Compare commits
5 Commits
373f2332a0
...
67f1ce535f
Author | SHA1 | Date | |
---|---|---|---|
|
67f1ce535f | ||
|
b6d45545fc | ||
|
59dafc004d | ||
|
57518399a1 | ||
|
ee288a1983 |
@ -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"})
|
||||
|
||||
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"),
|
||||
|
@ -41,7 +41,6 @@ from modules.handlers.contact import *
|
||||
from modules.handlers.group_join import *
|
||||
from modules.handlers.voice import *
|
||||
from modules.handlers.welcome import *
|
||||
from modules.handlers.sponsorship import *
|
||||
from modules.handlers.everything import *
|
||||
|
||||
from modules.scheduled import *
|
||||
|
@ -3,7 +3,7 @@ from app import app
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ForceReply, CallbackQuery
|
||||
from pyrogram.client import Client
|
||||
from pyrogram import filters
|
||||
from classes.holo_user import HoloUser
|
||||
from classes.holo_user import HoloUser, LabelSettingError
|
||||
from modules.utils import configGet, locale, logWrite, should_quote
|
||||
from modules.database import col_tmp, col_sponsorships
|
||||
|
||||
@ -67,7 +67,10 @@ async def callback_query_sponsor_yes(app: Client, clb: CallbackQuery):
|
||||
}
|
||||
)
|
||||
|
||||
await holo_user.label_set(configGet("users", "groups"), col_tmp.find_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "sponsorship"}})["sponsorship"]["label"])
|
||||
try:
|
||||
await holo_user.label_set(configGet("users", "groups"), col_tmp.find_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "sponsorship"}})["sponsorship"]["label"])
|
||||
except LabelSettingError as exp:
|
||||
await app.send_message(configGet("admin", "groups"), exp.__str__(), disable_notification=True)
|
||||
|
||||
edited_markup = [[InlineKeyboardButton(text=str(locale("accepted", "button")), callback_data="nothing")]]
|
||||
|
||||
|
@ -2,8 +2,8 @@ from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message
|
||||
from pyrogram.client import Client
|
||||
from modules.utils import locale, should_quote, find_user
|
||||
from classes.holo_user import HoloUser, LabelTooLongError
|
||||
from modules.utils import configGet, locale, should_quote, find_user
|
||||
from classes.holo_user import HoloUser, LabelTooLongError, LabelSettingError
|
||||
from modules import custom_filters
|
||||
|
||||
# Label command ================================================================================================================
|
||||
@ -32,6 +32,9 @@ async def cmd_label(app: Client, msg: Message):
|
||||
except LabelTooLongError:
|
||||
await msg.reply_text(locale("label_too_long", "message"))
|
||||
return
|
||||
except LabelSettingError as exp:
|
||||
await app.send_message(configGet("admin", "groups"), exp.__str__(), disable_notification=True)
|
||||
return
|
||||
await msg.reply_text(f"Setting **{target.id}**'s label to **{label}**...", quote=should_quote(msg))
|
||||
|
||||
else:
|
||||
|
@ -2,8 +2,8 @@ from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message
|
||||
from pyrogram.client import Client
|
||||
from classes.holo_user import HoloUser
|
||||
from modules.utils import logWrite, locale, should_quote
|
||||
from classes.holo_user import HoloUser, UserInvalidError
|
||||
from modules.utils import logWrite, locale, should_quote, find_user
|
||||
from modules import custom_filters
|
||||
|
||||
# Message command ==============================================================================================================
|
||||
@ -14,8 +14,8 @@ async def cmd_message(app: Client, msg: Message):
|
||||
|
||||
try:
|
||||
destination = HoloUser(int(msg.command[1]))
|
||||
except ValueError:
|
||||
destination = HoloUser(msg.command[1])
|
||||
except (ValueError, UserInvalidError):
|
||||
destination = HoloUser(await find_user(app, query=msg.command[1]))
|
||||
|
||||
if ((msg.text is not None) and (len(msg.text.split()) > 2)):
|
||||
await destination.message(context=msg, text=" ".join(msg.text.split()[2:]), caption=msg.caption, photo=msg.photo, video=msg.video, file=msg.document, adm_context=True)
|
||||
|
@ -115,13 +115,11 @@ async def confirm_yes(app: Client, msg: Message, kind: Literal["application", "s
|
||||
if question == "expires":
|
||||
sponsorship_content.append(f"{locale(f'question_{question}', 'message', 'sponsor_titles')} {tmp_sponsorship['sponsorship'][question].strftime('%d.%m.%Y')}")
|
||||
elif question == "proof":
|
||||
filename = uuid1()
|
||||
with open(f"tmp{sep}{filename}.jpg", "wb") as f:
|
||||
f.write(tmp_sponsorship['sponsorship']['proof'])
|
||||
continue
|
||||
else:
|
||||
sponsorship_content.append(f"{locale(f'question_{question}', 'message', 'sponsor_titles')} {tmp_sponsorship['sponsorship'][question]}")
|
||||
|
||||
await app.send_photo(chat_id=configGet("admin", "groups"), photo=f"tmp{sep}{filename}.jpg", caption=(locale("sponsor_got", "message")).format(str(holo_user.id), msg.from_user.first_name, msg.from_user.username, "\n".join(sponsorship_content)), parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup(
|
||||
await app.send_photo(chat_id=configGet("admin", "groups"), photo=tmp_sponsorship["sponsorship"]["proof"], caption=(locale("sponsor_got", "message")).format(str(holo_user.id), msg.from_user.first_name, msg.from_user.username, "\n".join(sponsorship_content)), parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(text=str(locale("sponsor_yes", "button")), callback_data=f"sponsor_yes_{holo_user.id}")
|
||||
@ -133,7 +131,7 @@ async def confirm_yes(app: Client, msg: Message, kind: Literal["application", "s
|
||||
)
|
||||
)
|
||||
|
||||
remove(f"tmp{sep}{filename}.jpg")
|
||||
# remove(f"tmp{sep}{filename}.jpg")
|
||||
|
||||
logWrite(f"User {holo_user.id} sent his sponsorship application and it will now be reviewed")
|
||||
|
||||
|
@ -2,7 +2,7 @@ from traceback import print_exc
|
||||
from app import app, isAnAdmin
|
||||
import asyncio
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply, InlineKeyboardMarkup, InlineKeyboardButton
|
||||
from pyrogram.types import Message, ForceReply, InlineKeyboardMarkup, InlineKeyboardButton
|
||||
from pyrogram.client import Client
|
||||
from classes.holo_user import HoloUser
|
||||
from modules.utils import configGet, logWrite, locale, all_locales
|
||||
@ -55,7 +55,11 @@ async def any_stage(app: Client, msg: Message):
|
||||
await holo_user.application_next(msg.text, msg=msg)
|
||||
|
||||
if configGet("enabled", "features", "sponsorships") is True:
|
||||
await holo_user.sponsorship_next(msg.text, msg=msg)
|
||||
|
||||
await holo_user.sponsorship_next(msg.text, msg)
|
||||
|
||||
if msg.photo is not None:
|
||||
await holo_user.sponsorship_next(msg.text, msg=msg, photo=msg.photo)
|
||||
|
||||
if holo_user.application_state()[0] != "fill" and holo_user.sponsorship_state()[0] != "fill":
|
||||
|
||||
|
@ -1,16 +0,0 @@
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message
|
||||
from pyrogram.client import Client
|
||||
from classes.holo_user import HoloUser
|
||||
from modules import custom_filters
|
||||
|
||||
@app.on_message(custom_filters.enabled_sponsorships & custom_filters.filling_sponsorship & ~filters.scheduled & filters.private)
|
||||
async def sponsor_proof(app: Client, msg: Message):
|
||||
|
||||
if msg.via_bot is None:
|
||||
|
||||
holo_user = HoloUser(msg.from_user)
|
||||
|
||||
if msg.photo is not None:
|
||||
await holo_user.sponsorship_next(msg.text, msg=msg, photo=msg.photo)
|
@ -33,7 +33,7 @@
|
||||
"bsonType": "date"
|
||||
},
|
||||
"sponsorship.proof": {
|
||||
"bsonType": "binData"
|
||||
"bsonType": "string"
|
||||
},
|
||||
"sponsorship.label": {
|
||||
"bsonType": "string"
|
||||
|
Reference in New Issue
Block a user