Added language_code context

This commit is contained in:
Profitroll 2022-12-17 00:58:33 +01:00
parent fa08679b11
commit a769ea9ef5
19 changed files with 230 additions and 161 deletions

View File

@ -100,13 +100,13 @@ class HoloUser():
self.locale = holo_user["tg_locale"] self.locale = holo_user["tg_locale"]
self.username = holo_user["tg_username"] self.username = holo_user["tg_username"]
if isinstance(user, User) and (self.name != user.first_name): if isinstance(user, User) and ((self.name != user.first_name) and (user.first_name is None)):
self.set("tg_name", user.first_name) self.set("tg_name", user.first_name)
if isinstance(user, User) and (self.phone != user.phone_number): if isinstance(user, User) and (self.phone != user.phone_number):
self.set("tg_phone", user.phone_number) self.set("tg_phone", user.phone_number)
if isinstance(user, User) and ((self.locale != user.language_code) and (user.language_code != None)): if isinstance(user, User) and ((self.locale != user.language_code) and (user.language_code is not None)):
self.set("tg_locale", user.language_code) self.set("tg_locale", user.language_code)
if isinstance(user, User) and (self.username != user.username): if isinstance(user, User) and (self.username != user.username):
@ -328,39 +328,39 @@ class HoloUser():
input_dt = datetime.strptime(query, "%d.%m.%Y") input_dt = datetime.strptime(query, "%d.%m.%Y")
except ValueError: except ValueError:
logWrite(f"User {msg.from_user.id} failed stage {stage} due to sending invalid date format") logWrite(f"User {msg.from_user.id} failed stage {stage} due to sending invalid date format")
await msg.reply_text(locale(f"question2_invalid", "message"), reply_markup=ForceReply(placeholder=str(locale(f"question{stage}", "force_reply")))) await msg.reply_text(locale(f"question2_invalid", "message", locale=self.locale), reply_markup=ForceReply(placeholder=str(locale(f"question{stage}", "force_reply", locale=self.locale))))
return return
if datetime.now() <= input_dt: if datetime.now() <= input_dt:
logWrite(f"User {msg.from_user.id} failed stage {stage} due to joking") logWrite(f"User {msg.from_user.id} failed stage {stage} due to joking")
await msg.reply_text(locale("question2_joke", "message"), reply_markup=ForceReply(placeholder=str(locale("question2", "force_reply")))) await msg.reply_text(locale("question2_joke", "message", locale=self.locale), reply_markup=ForceReply(placeholder=str(locale("question2", "force_reply", locale=self.locale))))
return return
elif ((datetime.now() - input_dt).days) < ((datetime.now() - datetime.now().replace(year=datetime.now().year - configGet("age_allowed"))).days): elif ((datetime.now() - input_dt).days) < ((datetime.now() - datetime.now().replace(year=datetime.now().year - configGet("age_allowed"))).days):
logWrite(f"User {msg.from_user.id} failed stage {stage} due to being underage") logWrite(f"User {msg.from_user.id} failed stage {stage} due to being underage")
await msg.reply_text(locale("question2_underage", "message").format(str(configGet("age_allowed"))), reply_markup=ForceReply(placeholder=str(locale("question2", "force_reply")))) await msg.reply_text(locale("question2_underage", "message", locale=self.locale).format(str(configGet("age_allowed"))), reply_markup=ForceReply(placeholder=str(locale("question2", "force_reply", locale=self.locale))))
return return
else: else:
print(f'Look: {((datetime.now() - input_dt).days)} > {(datetime.now() - datetime.now().replace(year=datetime.now().year - configGet("age_allowed"))).days}') 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 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}}) 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"), reply_markup=ForceReply(placeholder=str(locale(f"question{stage+1}", "force_reply")))) 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))))
elif stage == 3: elif stage == 3:
try: try:
result = (get(f"http://api.geonames.org/searchJSON?q={query}&maxRows=1&countryBias=UA&lang=uk&orderby=relevance&featureClass=P&featureClass=A&username={configGet('username', 'geocoding')}")).json() result = (get(f"http://api.geonames.org/searchJSON?q={query}&maxRows=1&countryBias=UA&lang=uk&orderby=relevance&featureClass=P&featureClass=A&username={configGet('username', 'geocoding')}")).json()
progress["application"][str(stage)] = result["geonames"][0] progress["application"][str(stage)] = result["geonames"][0]
col_tmp.update_one({"user": {"$eq": self.id}, "type": {"$eq": "application"}}, {"$set": {"application": progress["application"], "stage": progress["stage"]+1}}) 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"question3_found", "message").format(result["geonames"][0]["name"], result["geonames"][0]["adminName1"])) await msg.reply_text(locale(f"question3_found", "message", locale=self.locale).format(result["geonames"][0]["name"], result["geonames"][0]["adminName1"]))
await msg.reply_text(locale(f"question{stage+1}", "message"), reply_markup=ForceReply(placeholder=str(locale(f"question{stage+1}", "force_reply")))) 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))))
except (ValueError, KeyError, IndexError): except (ValueError, KeyError, IndexError):
await msg.reply_text(locale(f"question3_invalid", "message"), reply_markup=ForceReply(placeholder=str(locale(f"question{stage}", "force_reply")))) await msg.reply_text(locale(f"question3_invalid", "message", locale=self.locale), reply_markup=ForceReply(placeholder=str(locale(f"question{stage}", "force_reply", locale=self.locale))))
return return
except Exception as exp: except Exception as exp:
await msg.reply_text(locale("question3_error", "message"), reply_markup=ForceReply(placeholder=str(locale(f"question{stage}", "force_reply")))) 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: try:
await app.send_message(configGet("owner"), locale("question3_traceback", "message").format(query, exp, print_exc())) await app.send_message(configGet("owner"), locale("question3_traceback", "message", locale=self.locale).format(query, exp, print_exc()))
except bad_request_400.PeerIdInvalid: except bad_request_400.PeerIdInvalid:
logWrite(f"Could not notify admin about failure when sending message! Admin has never interacted with bot!") logWrite(f"Could not notify admin about failure when sending message! Admin has never interacted with bot!")
return return
@ -373,20 +373,20 @@ class HoloUser():
for question in progress["application"]: for question in progress["application"]:
if i == 2: if i == 2:
age = relativedelta(datetime.now(), progress['application']['2']) age = relativedelta(datetime.now(), progress['application']['2'])
application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {progress['application']['2'].strftime('%d.%m.%Y')} ({age.years} р.)") application_content.append(f"{locale('question'+str(i), 'message', 'question_titles', locale=self.locale)} {progress['application']['2'].strftime('%d.%m.%Y')} ({age.years} р.)")
elif i == 3: elif i == 3:
if progress['application']['3']['countryCode'] == "UA": if progress['application']['3']['countryCode'] == "UA":
application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {progress['application']['3']['name']} ({progress['application']['3']['adminName1']})") application_content.append(f"{locale('question'+str(i), 'message', 'question_titles', locale=self.locale)} {progress['application']['3']['name']} ({progress['application']['3']['adminName1']})")
else: else:
application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {progress['application']['3']['name']} ({progress['application']['3']['adminName1']}, {progress['application']['3']['countryName']})") application_content.append(f"{locale('question'+str(i), 'message', 'question_titles', locale=self.locale)} {progress['application']['3']['name']} ({progress['application']['3']['adminName1']}, {progress['application']['3']['countryName']})")
else: else:
application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {progress['application'][question]}") application_content.append(f"{locale('question'+str(i), 'message', 'question_titles', locale=self.locale)} {progress['application'][question]}")
i += 1 i += 1
await msg.reply_text(locale("confirm", "message").format("\n".join(application_content)), reply_markup=ReplyKeyboardMarkup(locale("confirm", "keyboard"), resize_keyboard=True)) await msg.reply_text(locale("confirm", "message", locale=self.locale).format("\n".join(application_content)), reply_markup=ReplyKeyboardMarkup(locale("confirm", "keyboard", locale=self.locale), resize_keyboard=True))
else: else:
progress["application"][str(stage)] = query progress["application"][str(stage)] = query
col_tmp.update_one({"user": {"$eq": self.id}, "type": {"$eq": "application"}}, {"$set": {"application": progress["application"], "stage": progress["stage"]+1}}) 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"), reply_markup=ForceReply(placeholder=str(locale(f"question{stage+1}", "force_reply")))) 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))))
logWrite(f"User {self.id} completed stage {stage} of application") logWrite(f"User {self.id} completed stage {stage} of application")

View File

@ -5,5 +5,5 @@ from modules.utils import locale
# Callback empty =============================================================================================================== # Callback empty ===============================================================================================================
@app.on_callback_query(filters.regex("nothing")) @app.on_callback_query(filters.regex("nothing"))
async def callback_query_nothing(app, clb): async def callback_query_nothing(app, clb):
await clb.answer(text=locale("nothing", "callback")) await clb.answer(text=locale("nothing", "callback", locale=clb.from_user))
# ============================================================================================================================== # ==============================================================================================================================

View File

@ -18,7 +18,7 @@ async def callback_reapply_query_accept(app, clb):
await app.send_message(configGet("admin_group"), locale("approved_by", "message").format(clb.from_user.first_name, holo_user.id), disable_notification=True) await app.send_message(configGet("admin_group"), locale("approved_by", "message").format(clb.from_user.first_name, holo_user.id), disable_notification=True)
logWrite(f"User {holo_user.id} got their reapplication approved by {clb.from_user.id}") logWrite(f"User {holo_user.id} got their reapplication approved by {clb.from_user.id}")
await app.send_message(holo_user.id, locale("approved_joined", "message")) await app.send_message(holo_user.id, locale("approved_joined", "message", locale=holo_user))
col_applications.delete_one({"user": {"$eq": holo_user.id}}) col_applications.delete_one({"user": {"$eq": holo_user.id}})
col_applications.insert_one({"user": holo_user.id, "date": datetime.now(), "admin": clb.from_user.id, "application": col_tmp.find_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}})["application"]}) col_applications.insert_one({"user": holo_user.id, "date": datetime.now(), "admin": clb.from_user.id, "application": col_tmp.find_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}})["application"]})
@ -27,7 +27,7 @@ async def callback_reapply_query_accept(app, clb):
edited_markup = [[InlineKeyboardButton(text=str(locale("accepted", "button")), callback_data="nothing")]] edited_markup = [[InlineKeyboardButton(text=str(locale("accepted", "button")), callback_data="nothing")]]
await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup)) await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup))
await clb.answer(text=locale("sub_accepted", "callback").format(holo_user.id), show_alert=True) await clb.answer(text=locale("sub_accepted", "callback", locale=clb.from_user).format(holo_user.id), show_alert=True)
need_link = True need_link = True
@ -38,14 +38,14 @@ async def callback_reapply_query_accept(app, clb):
if need_link: if need_link:
link = await app.create_chat_invite_link(configGet("destination_group"), name=f"Invite for {holo_user.id}", member_limit=1) #, expire_date=datetime.now()+timedelta(days=1)) link = await app.create_chat_invite_link(configGet("destination_group"), name=f"Invite for {holo_user.id}", member_limit=1) #, expire_date=datetime.now()+timedelta(days=1))
await app.send_message(holo_user.id, locale("read_rules", "message")) await app.send_message(holo_user.id, locale("read_rules", "message", locale=holo_user))
for rule_msg in locale("rules"): for rule_msg in locale("rules", locale=holo_user):
await app.send_message(holo_user.id, rule_msg) await app.send_message(holo_user.id, rule_msg)
await app.send_message(holo_user.id, locale("approved", "message"), reply_markup=InlineKeyboardMarkup( await app.send_message(holo_user.id, locale("approved", "message"), reply_markup=InlineKeyboardMarkup(
[[ [[
InlineKeyboardButton(str(locale("join", "button")), url=link.invite_link) InlineKeyboardButton(str(locale("join", "button", locale=holo_user)), url=link.invite_link)
]] ]]
)) ))
@ -53,7 +53,7 @@ async def callback_reapply_query_accept(app, clb):
logWrite(f"User {holo_user.id} got an invite link {link.invite_link}") logWrite(f"User {holo_user.id} got an invite link {link.invite_link}")
else: else:
await app.send_message(holo_user.id, locale("approved_joined", "message")) await app.send_message(holo_user.id, locale("approved_joined", "message", locale=holo_user))
@app.on_callback_query(filters.regex("reapply_no_[\s\S]*")) @app.on_callback_query(filters.regex("reapply_no_[\s\S]*"))
async def callback_query_reapply_reject(app, clb): async def callback_query_reapply_reject(app, clb):
@ -62,7 +62,7 @@ async def callback_query_reapply_reject(app, clb):
holo_user = HoloUser(int(fullclb[2])) holo_user = HoloUser(int(fullclb[2]))
await app.send_message(configGet("admin_group"), locale("rejected_by", "message").format(clb.from_user.first_name, fullclb[2]), disable_notification=True) await app.send_message(configGet("admin_group"), locale("rejected_by", "message").format(clb.from_user.first_name, fullclb[2]), disable_notification=True)
await app.send_message(holo_user.id, locale("rejected", "message")) await app.send_message(holo_user.id, locale("rejected", "message", locale=holo_user))
logWrite(f"User {fullclb[2]} got their reapplication rejected by {clb.from_user.id}") logWrite(f"User {fullclb[2]} got their reapplication rejected by {clb.from_user.id}")
col_tmp.update_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}}, {"$set": {"state": "rejected", "sent": False}}) col_tmp.update_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}}, {"$set": {"state": "rejected", "sent": False}})
@ -70,7 +70,7 @@ async def callback_query_reapply_reject(app, clb):
edited_markup = [[InlineKeyboardButton(text=str(locale("declined", "button")), callback_data="nothing")]] edited_markup = [[InlineKeyboardButton(text=str(locale("declined", "button")), callback_data="nothing")]]
await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup)) await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup))
await clb.answer(text=locale("sub_rejected", "callback").format(fullclb[2]), show_alert=True) await clb.answer(text=locale("sub_rejected", "callback", locale=clb.from_user).format(fullclb[2]), show_alert=True)
# Use old application when user reapplies after leaving the chat # Use old application when user reapplies after leaving the chat
@app.on_callback_query(filters.regex("reapply_old_[\s\S]*")) @app.on_callback_query(filters.regex("reapply_old_[\s\S]*"))
@ -78,7 +78,7 @@ async def callback_query_reapply_old(app, clb):
fullclb = clb.data.split("_") fullclb = clb.data.split("_")
message = await app.get_messages(clb.from_user.id, int(fullclb[2])) message = await app.get_messages(clb.from_user.id, int(fullclb[2]))
await confirm_yes(app, message) await confirm_yes(app, message)
await clb.message.edit(clb.message.text, reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(locale("done", "button"), "nothing")]])) await clb.message.edit(clb.message.text, reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(locale("done", "button", locale=clb.from_user), "nothing")]]))
# Start a new application when user reapplies after leaving the chat # Start a new application when user reapplies after leaving the chat
@app.on_callback_query(filters.regex("reapply_new_[\s\S]*")) @app.on_callback_query(filters.regex("reapply_new_[\s\S]*"))
@ -86,11 +86,12 @@ async def callback_query_reapply_new(app, clb):
fullclb = clb.data.split("_") fullclb = clb.data.split("_")
await clb.answer(locale("reapply_stopped", "callback")) await clb.answer(locale("reapply_stopped", "callback", locale=clb.from_user))
message = await app.get_messages(clb.from_user.id, int(fullclb[2])) message = await app.get_messages(clb.from_user.id, int(fullclb[2]))
col_tmp.update_one({"user": clb.from_user.id}, {"$set": {"state": "fill", "completed": False, "stage": 1}})
await welcome_pass(app, message, once_again=True) await welcome_pass(app, message, once_again=True)
logWrite(f"User {clb.from_user.id} restarted the application after leaving the chat earlier") logWrite(f"User {clb.from_user.id} restarted the application after leaving the chat earlier")
await clb.message.edit(clb.message.text, reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(locale("done", "button"), "nothing")]])) await clb.message.edit(clb.message.text, reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(locale("done", "button", locale=clb.from_user), "nothing")]]))
# Abort application fill in progress and restart it # Abort application fill in progress and restart it
@app.on_callback_query(filters.regex("reapply_stop_[\s\S]*")) @app.on_callback_query(filters.regex("reapply_stop_[\s\S]*"))
@ -100,9 +101,9 @@ async def callback_query_reapply_stop(app, clb):
holo_user = HoloUser(clb.from_user) holo_user = HoloUser(clb.from_user)
holo_user.application_restart() holo_user.application_restart()
await clb.answer(locale("reapply_stopped", "callback")) await clb.answer(locale("reapply_stopped", "callback", locale=holo_user))
message = await app.get_messages(clb.from_user.id, int(fullclb[2])) message = await app.get_messages(clb.from_user.id, int(fullclb[2]))
await welcome_pass(app, message, once_again=True) await welcome_pass(app, message, once_again=True)
logWrite(f"User {clb.from_user.id} restarted the application due to typo in it") logWrite(f"User {clb.from_user.id} restarted the application due to typo in it")
await clb.message.edit(locale("reapply_restarted", "message"), reply_markup=ReplyKeyboardRemove()) await clb.message.edit(locale("reapply_restarted", "message", locale=holo_user), reply_markup=ReplyKeyboardRemove())
# ============================================================================================================================== # ==============================================================================================================================

View File

@ -3,7 +3,7 @@ from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from pyrogram.errors import bad_request_400 from pyrogram.errors import bad_request_400
from pyrogram import filters from pyrogram import filters
from modules.utils import locale, logWrite from modules.utils import locale, logWrite
from modules.commands.rules import default_rules_markup from modules.commands.rules import DefaultRulesMarkup
# Callback rule ================================================================================================================ # Callback rule ================================================================================================================
@app.on_callback_query(filters.regex("rule_[\s\S]*")) @app.on_callback_query(filters.regex("rule_[\s\S]*"))
@ -17,24 +17,24 @@ async def callback_query_rule(app, clb):
if rule_num == len(locale("rules")): if rule_num == len(locale("rules")):
lower_buttons = [ lower_buttons = [
InlineKeyboardButton(locale("rules_prev", "button"), callback_data=f"rule_{rule_num-1}") InlineKeyboardButton(locale("rules_prev", "button", locale=clb.from_user), callback_data=f"rule_{rule_num-1}")
] ]
elif rule_num == 1: elif rule_num == 1:
lower_buttons = [ lower_buttons = [
InlineKeyboardButton(locale("rules_next", "button"), callback_data=f"rule_{rule_num+1}") InlineKeyboardButton(locale("rules_next", "button", locale=clb.from_user), callback_data=f"rule_{rule_num+1}")
] ]
else: else:
lower_buttons = [ lower_buttons = [
InlineKeyboardButton(locale("rules_prev", "button"), callback_data=f"rule_{rule_num-1}"), InlineKeyboardButton(locale("rules_prev", "button", locale=clb.from_user), callback_data=f"rule_{rule_num-1}"),
InlineKeyboardButton(locale("rules_next", "button"), callback_data=f"rule_{rule_num+1}") InlineKeyboardButton(locale("rules_next", "button", locale=clb.from_user), callback_data=f"rule_{rule_num+1}")
] ]
try: try:
await clb.message.edit(text=locale("rules")[rule_num-1], disable_web_page_preview=True, reply_markup=InlineKeyboardMarkup( await clb.message.edit(text=locale("rules", locale=clb.from_user)[rule_num-1], disable_web_page_preview=True, reply_markup=InlineKeyboardMarkup(
[ [
[ [
InlineKeyboardButton(locale("rules_home", "button"), callback_data="rules_home"), InlineKeyboardButton(locale("rules_home", "button", locale=clb.from_user), callback_data="rules_home"),
InlineKeyboardButton(locale("rules_additional", "button"), callback_data="rules_additional") InlineKeyboardButton(locale("rules_additional", "button", locale=clb.from_user), callback_data="rules_additional")
], ],
lower_buttons lower_buttons
] ]
@ -43,7 +43,7 @@ async def callback_query_rule(app, clb):
except bad_request_400.MessageNotModified: except bad_request_400.MessageNotModified:
pass pass
await clb.answer(text=locale("rules_page", "callback").format(fullclb[1])) await clb.answer(text=locale("rules_page", "callback", locale=clb.from_user).format(fullclb[1]))
@app.on_callback_query(filters.regex("rules_home")) @app.on_callback_query(filters.regex("rules_home"))
async def callback_query_rules_home(app, clb): async def callback_query_rules_home(app, clb):
@ -51,11 +51,11 @@ async def callback_query_rules_home(app, clb):
logWrite(f"User {clb.from_user.id} requested to check out homepage rules") logWrite(f"User {clb.from_user.id} requested to check out homepage rules")
try: try:
await clb.message.edit(text=locale("rules_msg"), disable_web_page_preview=True, reply_markup=default_rules_markup) await clb.message.edit(text=locale("rules_msg", locale=clb.from_user), disable_web_page_preview=True, reply_markup=DefaultRulesMarkup(clb.from_user).keyboard)
except bad_request_400.MessageNotModified: except bad_request_400.MessageNotModified:
pass pass
await clb.answer(text=locale("rules_home", "callback")) await clb.answer(text=locale("rules_home", "callback", locale=clb.from_user))
@app.on_callback_query(filters.regex("rules_additional")) @app.on_callback_query(filters.regex("rules_additional"))
async def callback_query_rules_additional(app, clb): async def callback_query_rules_additional(app, clb):
@ -63,9 +63,9 @@ async def callback_query_rules_additional(app, clb):
logWrite(f"User {clb.from_user.id} requested to check out additional rules") logWrite(f"User {clb.from_user.id} requested to check out additional rules")
try: try:
await clb.message.edit(text=locale("rules_additional"), disable_web_page_preview=True, reply_markup=default_rules_markup) await clb.message.edit(text=locale("rules_additional", locale=clb.from_user), disable_web_page_preview=True, reply_markup=DefaultRulesMarkup(clb.from_user).keyboard)
except bad_request_400.MessageNotModified: except bad_request_400.MessageNotModified:
pass pass
await clb.answer(text=locale("rules_additional", "callback")) await clb.answer(text=locale("rules_additional", "callback", locale=clb.from_user))
# ============================================================================================================================== # ==============================================================================================================================

View File

@ -5,7 +5,7 @@ from pyrogram import filters
from classes.holo_user import HoloUser from classes.holo_user import HoloUser
from modules.utils import configGet, locale, logWrite from modules.utils import configGet, locale, logWrite
from modules.database import col_tmp, col_applications from modules.database import col_tmp, col_applications
from modules.commands.rules import default_rules_markup from modules.commands.rules import DefaultRulesMarkup
# Callbacks application ======================================================================================================== # Callbacks application ========================================================================================================
@app.on_callback_query(filters.regex("sub_yes_[\s\S]*")) @app.on_callback_query(filters.regex("sub_yes_[\s\S]*"))
@ -26,13 +26,13 @@ async def callback_query_accept(app, clb):
if need_link: if need_link:
link = await app.create_chat_invite_link(configGet("destination_group"), name=f"Invite for {holo_user.id}", member_limit=1) #, expire_date=datetime.now()+timedelta(days=1)) link = await app.create_chat_invite_link(configGet("destination_group"), name=f"Invite for {holo_user.id}", member_limit=1) #, expire_date=datetime.now()+timedelta(days=1))
await app.send_message(holo_user.id, locale("read_rules", "message")) await app.send_message(holo_user.id, locale("read_rules", "message", locale=holo_user))
await app.send_message(holo_user.id, locale("rules_msg"), disable_web_page_preview=True, reply_markup=default_rules_markup) await app.send_message(holo_user.id, locale("rules_msg", locale=holo_user), disable_web_page_preview=True, reply_markup=DefaultRulesMarkup(holo_user).keyboard)
await app.send_message(holo_user.id, locale("approved", "message"), reply_markup=InlineKeyboardMarkup( await app.send_message(holo_user.id, locale("approved", "message", locale=holo_user), reply_markup=InlineKeyboardMarkup(
[[ [[
InlineKeyboardButton(str(locale("join", "button")), url=link.invite_link) InlineKeyboardButton(str(locale("join", "button", locale=holo_user)), url=link.invite_link)
]] ]]
)) ))
@ -40,7 +40,7 @@ async def callback_query_accept(app, clb):
logWrite(f"User {holo_user.id} got an invite link {link.invite_link}") logWrite(f"User {holo_user.id} got an invite link {link.invite_link}")
else: else:
await app.send_message(holo_user.id, locale("approved_joined", "message")) await app.send_message(holo_user.id, locale("approved_joined", "message", locale=holo_user))
col_applications.insert_one({"user": holo_user.id, "date": datetime.now(), "admin": clb.from_user.id, "application": col_tmp.find_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}})["application"]}) col_applications.insert_one({"user": holo_user.id, "date": datetime.now(), "admin": clb.from_user.id, "application": col_tmp.find_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}})["application"]})
col_tmp.update_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}}, {"$set": {"state": "approved", "sent": False}}) col_tmp.update_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}}, {"$set": {"state": "approved", "sent": False}})
@ -48,7 +48,7 @@ async def callback_query_accept(app, clb):
edited_markup = [[InlineKeyboardButton(text=str(locale("accepted", "button")), callback_data="nothing")]] edited_markup = [[InlineKeyboardButton(text=str(locale("accepted", "button")), callback_data="nothing")]]
await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup)) await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup))
await clb.answer(text=locale("sub_accepted", "callback").format(holo_user.id), show_alert=True) await clb.answer(text=locale("sub_accepted", "callback", locale=clb.from_user).format(holo_user.id), show_alert=True)
@app.on_callback_query(filters.regex("sub_no_[\s\S]*")) @app.on_callback_query(filters.regex("sub_no_[\s\S]*"))
async def callback_query_reject(app, clb): async def callback_query_reject(app, clb):
@ -57,7 +57,7 @@ async def callback_query_reject(app, clb):
holo_user = HoloUser(int(fullclb[2])) holo_user = HoloUser(int(fullclb[2]))
await app.send_message(configGet("admin_group"), locale("rejected_by", "message").format(clb.from_user.first_name, holo_user.id), disable_notification=True) await app.send_message(configGet("admin_group"), locale("rejected_by", "message").format(clb.from_user.first_name, holo_user.id), disable_notification=True)
await app.send_message(holo_user.id, locale("rejected", "message")) await app.send_message(holo_user.id, locale("rejected", "message", locale=holo_user))
logWrite(f"User {holo_user.id} got rejected by {clb.from_user.id}") logWrite(f"User {holo_user.id} got rejected by {clb.from_user.id}")
col_tmp.update_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}}, {"$set": {"state": "rejected", "sent": False}}) col_tmp.update_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}}, {"$set": {"state": "rejected", "sent": False}})
@ -65,7 +65,7 @@ async def callback_query_reject(app, clb):
edited_markup = [[InlineKeyboardButton(text=str(locale("declined", "button")), callback_data="nothing")]] edited_markup = [[InlineKeyboardButton(text=str(locale("declined", "button")), callback_data="nothing")]]
await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup)) await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup))
await clb.answer(text=locale("sub_rejected", "callback").format(holo_user.id), show_alert=True) await clb.answer(text=locale("sub_rejected", "callback", locale=clb.from_user).format(holo_user.id), show_alert=True)
@app.on_callback_query(filters.regex("sub_aggressive_[\s\S]*")) @app.on_callback_query(filters.regex("sub_aggressive_[\s\S]*"))
async def callback_query_reject_aggressive(app, clb): async def callback_query_reject_aggressive(app, clb):
@ -74,7 +74,7 @@ async def callback_query_reject_aggressive(app, clb):
holo_user = HoloUser(int(fullclb[2])) holo_user = HoloUser(int(fullclb[2]))
await app.send_message(configGet("admin_group"), locale("rejected_by_agr", "message").format(clb.from_user.first_name, holo_user.id), disable_notification=True) await app.send_message(configGet("admin_group"), locale("rejected_by_agr", "message").format(clb.from_user.first_name, holo_user.id), disable_notification=True)
await app.send_message(holo_user.id, locale("rejected_aggressive", "message")) await app.send_message(holo_user.id, locale("rejected_aggressive", "message", locale=holo_user))
logWrite(f"User {holo_user.id} got rejected by {clb.from_user.id} due to being aggressive") logWrite(f"User {holo_user.id} got rejected by {clb.from_user.id} due to being aggressive")
col_tmp.update_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}}, {"$set": {"state": "rejected", "sent": False}}) col_tmp.update_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}}, {"$set": {"state": "rejected", "sent": False}})
@ -82,7 +82,7 @@ async def callback_query_reject_aggressive(app, clb):
edited_markup = [[InlineKeyboardButton(text=str(locale("declined", "button")), callback_data="nothing")]] edited_markup = [[InlineKeyboardButton(text=str(locale("declined", "button")), callback_data="nothing")]]
await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup)) await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup))
await clb.answer(text=locale("sub_aggressive", "callback").format(holo_user.id), show_alert=True) await clb.answer(text=locale("sub_aggressive", "callback", locale=clb.from_user).format(holo_user.id), show_alert=True)
@app.on_callback_query(filters.regex("sub_russian_[\s\S]*")) @app.on_callback_query(filters.regex("sub_russian_[\s\S]*"))
async def callback_query_reject_russian(app, clb): async def callback_query_reject_russian(app, clb):
@ -91,7 +91,7 @@ async def callback_query_reject_russian(app, clb):
holo_user = HoloUser(int(fullclb[2])) holo_user = HoloUser(int(fullclb[2]))
await app.send_message(configGet("admin_group"), locale("rejected_by_rus", "message").format(clb.from_user.first_name, holo_user.id), disable_notification=True) await app.send_message(configGet("admin_group"), locale("rejected_by_rus", "message").format(clb.from_user.first_name, holo_user.id), disable_notification=True)
await app.send_message(holo_user.id, locale("rejected_russian", "message")) await app.send_message(holo_user.id, locale("rejected_russian", "message", locale=holo_user))
logWrite(f"User {holo_user.id} got rejected by {clb.from_user.id} due to being russian") logWrite(f"User {holo_user.id} got rejected by {clb.from_user.id} due to being russian")
col_tmp.update_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}}, {"$set": {"state": "rejected", "sent": False}}) col_tmp.update_one({"user": {"$eq": holo_user.id}, "type": {"$eq": "application"}}, {"$set": {"state": "rejected", "sent": False}})
@ -99,5 +99,5 @@ async def callback_query_reject_russian(app, clb):
edited_markup = [[InlineKeyboardButton(text=str(locale("declined", "button")), callback_data="nothing")]] edited_markup = [[InlineKeyboardButton(text=str(locale("declined", "button")), callback_data="nothing")]]
await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup)) await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup))
await clb.answer(text=locale("sub_russian", "callback").format(holo_user.id), show_alert=True) await clb.answer(text=locale("sub_russian", "callback", locale=clb.from_user).format(holo_user.id), show_alert=True)
# ============================================================================================================================== # ==============================================================================================================================

View File

@ -18,7 +18,7 @@ async def callback_query_sus_allow(app, clb):
edited_markup = [[InlineKeyboardButton(text=str(locale("sus_allowed", "button")), callback_data="nothing")]] edited_markup = [[InlineKeyboardButton(text=str(locale("sus_allowed", "button")), callback_data="nothing")]]
await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup)) await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup))
await clb.answer(text=locale("sus_allowed", "callback").format(holo_user.id), show_alert=True) await clb.answer(text=locale("sus_allowed", "callback", locale=clb.from_user).format(holo_user.id), show_alert=True)
await app.restrict_chat_member(configGet("destination_group"), holo_user.id, permissions=ChatPermissions( await app.restrict_chat_member(configGet("destination_group"), holo_user.id, permissions=ChatPermissions(
can_send_messages=True, can_send_messages=True,
@ -40,7 +40,7 @@ async def callback_query_sus_reject(app, clb):
edited_markup = [[InlineKeyboardButton(text=str(locale("sus_rejected", "button")), callback_data="nothing")]] edited_markup = [[InlineKeyboardButton(text=str(locale("sus_rejected", "button")), callback_data="nothing")]]
await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup)) await clb.message.edit(text=clb.message.text, reply_markup=InlineKeyboardMarkup(edited_markup))
await clb.answer(text=locale("sus_rejected", "callback").format(holo_user.id), show_alert=True) await clb.answer(text=locale("sus_rejected", "callback", locale=clb.from_user).format(holo_user.id), show_alert=True)
await app.ban_chat_member(configGet("destination_group"), holo_user.id) await app.ban_chat_member(configGet("destination_group"), holo_user.id)

View File

@ -22,14 +22,14 @@ async def cmd_application(app, msg):
try: try:
holo_user = HoloUser((await app.get_users(msg.command[1])).id) holo_user = HoloUser((await app.get_users(msg.command[1])).id)
except (bad_request_400.UsernameInvalid, bad_request_400.PeerIdInvalid): except (bad_request_400.UsernameInvalid, bad_request_400.PeerIdInvalid):
await msg.reply_text(locale("no_user_application", "message").format(msg.command[1]), quote=should_quote(msg)) await msg.reply_text(locale("no_user_application", "message", locale=msg.from_user).format(msg.command[1]), quote=should_quote(msg))
return return
application = col_applications.find_one({"user": holo_user.id}) application = col_applications.find_one({"user": holo_user.id})
if application is None: if application is None:
logWrite(f"User {msg.from_user.id} requested application of {holo_user.id} but user does not exists") logWrite(f"User {msg.from_user.id} requested application of {holo_user.id} but user does not exists")
await msg.reply_text(locale("user_invalid", "message"), quote=should_quote(msg)) await msg.reply_text(locale("user_invalid", "message", locale=msg.from_user), quote=should_quote(msg))
return return
application_content = [] application_content = []
@ -39,21 +39,21 @@ async def cmd_application(app, msg):
if i == 2: if i == 2:
age = relativedelta(datetime.now(), application['application']['2']) age = relativedelta(datetime.now(), application['application']['2'])
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application']['2'].strftime('%d.%m.%Y')} ({age.years} р.)") application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=msg.from_user)} {application['application']['2'].strftime('%d.%m.%Y')} ({age.years} р.)")
elif i == 3: elif i == 3:
if application['application']['3']['countryCode'] == "UA": if application['application']['3']['countryCode'] == "UA":
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application']['3']['name']}") application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=msg.from_user)} {application['application']['3']['name']}")
else: else:
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application']['3']['name']} ({application['application']['3']['adminName1']}, {application['application']['3']['countryName']})") application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=msg.from_user)} {application['application']['3']['name']} ({application['application']['3']['adminName1']}, {application['application']['3']['countryName']})")
else: else:
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application'][question]}") application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=msg.from_user)} {application['application'][question]}")
i += 1 i += 1
application_status = locale("application_status_accepted", "message").format((await app.get_users(application["admin"])).first_name, application["date"].strftime("%d.%m.%Y, %H:%M")) application_status = locale("application_status_accepted", "message", locale=msg.from_user).format((await app.get_users(application["admin"])).first_name, application["date"].strftime("%d.%m.%Y, %H:%M"))
logWrite(f"User {msg.from_user.id} requested application of {holo_user.id}") logWrite(f"User {msg.from_user.id} requested application of {holo_user.id}")
await msg.reply_text(locale("contact", "message").format(holo_user.id, "\n".join(application_content), application_status), parse_mode=ParseMode.MARKDOWN, quote=should_quote(msg)) await msg.reply_text(locale("contact", "message", locale=msg.from_user).format(holo_user.id, "\n".join(application_content), application_status), parse_mode=ParseMode.MARKDOWN, quote=should_quote(msg))
# if (path.exists(f"{configGet('data', 'locations')}{sep}users{sep}{msg.command[1]}.json") and jsonLoad(f"{configGet('data', 'locations')}{sep}users{sep}{msg.command[1]}.json")["approved"]): # if (path.exists(f"{configGet('data', 'locations')}{sep}users{sep}{msg.command[1]}.json") and jsonLoad(f"{configGet('data', 'locations')}{sep}users{sep}{msg.command[1]}.json")["approved"]):
# user_id = int(msg.command[1]) # user_id = int(msg.command[1])
@ -92,5 +92,5 @@ async def cmd_application(app, msg):
# await msg.reply_text(locale("contact", "message").format(str(user_id), "\n".join(application_content), application_status), quote=should_quote(msg)) # await msg.reply_text(locale("contact", "message").format(str(user_id), "\n".join(application_content), application_status), quote=should_quote(msg))
except IndexError: except IndexError:
await msg.reply_text(locale("application_invalid_syntax", "message"), quote=should_quote(msg)) await msg.reply_text(locale("application_invalid_syntax", "message", locale=msg.from_user), quote=should_quote(msg))
# ============================================================================================================================== # ==============================================================================================================================

View File

@ -24,9 +24,9 @@ async def cmd_message(app, msg):
await destination.message(context=msg, text=None, caption=None, photo=msg.photo, video=msg.video, file=msg.document, adm_context=True) await destination.message(context=msg, text=None, caption=None, photo=msg.photo, video=msg.video, file=msg.document, adm_context=True)
except IndexError: except IndexError:
await msg.reply_text(locale("message_invalid_syntax", "message"), quote=should_quote(msg)) await msg.reply_text(locale("message_invalid_syntax", "message", locale=msg.from_user), quote=should_quote(msg))
logWrite(f"Admin {msg.from_user.id} tried to send message but 'IndexError'") logWrite(f"Admin {msg.from_user.id} tried to send message but 'IndexError'")
except ValueError: except ValueError:
await msg.reply_text(locale("message_invalid_syntax", "message"), quote=should_quote(msg)) await msg.reply_text(locale("message_invalid_syntax", "message", locale=msg.from_user), quote=should_quote(msg))
logWrite(f"Admin {msg.from_user.id} tried to send message but 'ValueError'") logWrite(f"Admin {msg.from_user.id} tried to send message but 'ValueError'")
# ============================================================================================================================== # ==============================================================================================================================

View File

@ -22,27 +22,27 @@ async def cmd_reapply(app, msg):
holo_user.application_restart() holo_user.application_restart()
await welcome_pass(app, msg, once_again=True) await welcome_pass(app, msg, once_again=True)
else: else:
await msg.reply_text(locale("reapply_left_chat", "message"), reply_markup=InlineKeyboardMarkup([ await msg.reply_text(locale("reapply_left_chat", "message", locale=holo_user), reply_markup=InlineKeyboardMarkup([
[ [
InlineKeyboardButton(locale("reapply_old_one", "button"), f"reapply_old_{msg.id}") InlineKeyboardButton(locale("reapply_old_one", "button", locale=holo_user), f"reapply_old_{msg.id}")
], ],
[ [
InlineKeyboardButton(locale("reapply_new_one", "button"), f"reapply_new_{msg.id}") InlineKeyboardButton(locale("reapply_new_one", "button", locale=holo_user), f"reapply_new_{msg.id}")
] ]
])) ]))
else: else:
await msg.reply_text(locale("reapply_in_progress", "message").format(locale("confirm", "keyboard")[1][0]), reply_markup=InlineKeyboardMarkup([ await msg.reply_text(locale("reapply_in_progress", "message", locale=holo_user).format(locale("confirm", "keyboard", locale=holo_user)[1][0]), reply_markup=InlineKeyboardMarkup([
[ [
InlineKeyboardButton(locale("applying_stop", "button"), f"reapply_stop_{msg.id}") InlineKeyboardButton(locale("applying_stop", "button", locale=holo_user), f"reapply_stop_{msg.id}")
] ]
])) ]))
else: else:
if (holo_user.application_state()[0] == "fill") and (col_tmp.find_one({"user": holo_user.id, "type": "application"})["sent"] is True): if (holo_user.application_state()[0] == "fill") and (col_tmp.find_one({"user": holo_user.id, "type": "application"})["sent"] is True):
await msg.reply_text(locale("reapply_forbidden", "message")) await msg.reply_text(locale("reapply_forbidden", "message", locale=holo_user))
else: else:
await msg.reply_text(locale("reapply_in_progress", "message").format(locale("confirm", "keyboard")[1][0]), reply_markup=InlineKeyboardMarkup([ await msg.reply_text(locale("reapply_in_progress", "message", locale=holo_user).format(locale("confirm", "keyboard", locale=holo_user)[1][0]), reply_markup=InlineKeyboardMarkup([
[ [
InlineKeyboardButton(locale("applying_stop", "button"), f"reapply_stop_{msg.id}") InlineKeyboardButton(locale("applying_stop", "button", locale=holo_user), f"reapply_stop_{msg.id}")
] ]
])) ]))
# ============================================================================================================================== # ==============================================================================================================================

View File

@ -2,7 +2,7 @@ from app import app, isAnAdmin
from os import getpid from os import getpid
from sys import exit from sys import exit
from pyrogram import filters from pyrogram import filters
from modules.utils import logWrite, should_quote from modules.utils import locale, logWrite, should_quote
from modules.scheduled import scheduler from modules.scheduled import scheduler
pid = getpid() pid = getpid()
@ -13,7 +13,7 @@ async def cmd_kill(app, msg):
if await isAnAdmin(msg.from_user.id) is True: if await isAnAdmin(msg.from_user.id) is True:
logWrite(f"Shutting down bot with pid {pid}") logWrite(f"Shutting down bot with pid {pid}")
await msg.reply_text(f"Вимкнення бота з підом `{pid}`", quote=should_quote(msg)) await msg.reply_text(locale("shutdown", "message", locale=msg.from_user).format(pid), quote=should_quote(msg))
scheduler.shutdown() scheduler.shutdown()
exit() exit()
# ============================================================================================================================== # ==============================================================================================================================

View File

@ -1,34 +1,40 @@
from typing import Union
from app import app from app import app
from pyrogram import filters from pyrogram import filters
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, User
from modules.utils import locale from modules.utils import locale
from classes.holo_user import HoloUser
class DefaultRulesMarkup(list):
def __init__(self, language_code: Union[str, HoloUser, User, None]):
super().__init__([])
self.keyboard = InlineKeyboardMarkup(
[
[
InlineKeyboardButton(locale("rules_home", "button", locale=language_code), callback_data="rules_home"),
InlineKeyboardButton(locale("rules_additional", "button", locale=language_code), callback_data="rules_additional")
],
[
InlineKeyboardButton("1", callback_data="rule_1"),
InlineKeyboardButton("2", callback_data="rule_2"),
InlineKeyboardButton("3", callback_data="rule_3")
],
[
InlineKeyboardButton("4", callback_data="rule_4"),
InlineKeyboardButton("5", callback_data="rule_5"),
InlineKeyboardButton("6", callback_data="rule_6")
],
[
InlineKeyboardButton("7", callback_data="rule_7"),
InlineKeyboardButton("8", callback_data="rule_8"),
InlineKeyboardButton("9", callback_data="rule_9")
]
]
)
# Rules command ============================================================================================================= # Rules command =============================================================================================================
default_rules_markup = InlineKeyboardMarkup(
[
[
InlineKeyboardButton(locale("rules_home", "button"), callback_data="rules_home"),
InlineKeyboardButton(locale("rules_additional", "button"), callback_data="rules_additional")
],
[
InlineKeyboardButton("1", callback_data="rule_1"),
InlineKeyboardButton("2", callback_data="rule_2"),
InlineKeyboardButton("3", callback_data="rule_3")
],
[
InlineKeyboardButton("4", callback_data="rule_4"),
InlineKeyboardButton("5", callback_data="rule_5"),
InlineKeyboardButton("6", callback_data="rule_6")
],
[
InlineKeyboardButton("7", callback_data="rule_7"),
InlineKeyboardButton("8", callback_data="rule_8"),
InlineKeyboardButton("9", callback_data="rule_9")
]
]
)
@app.on_message(~ filters.scheduled & filters.private & filters.command(["rules"], prefixes=["/"])) @app.on_message(~ filters.scheduled & filters.private & filters.command(["rules"], prefixes=["/"]))
async def cmd_rules(app, msg): async def cmd_rules(app, msg):
await msg.reply_text(locale("rules_msg"), disable_web_page_preview=True, reply_markup=default_rules_markup) await msg.reply_text(locale("rules_msg", locale=msg.from_user), disable_web_page_preview=True, reply_markup=DefaultRulesMarkup(msg.from_user).keyboard)
# ============================================================================================================================== # ==============================================================================================================================

View File

@ -23,5 +23,5 @@ async def cmd_start(app, msg):
}) })
logWrite(f"User {msg.from_user.id} started bot interaction") logWrite(f"User {msg.from_user.id} started bot interaction")
await msg.reply_text(locale("start", "message"), reply_markup=ReplyKeyboardMarkup(locale("welcome", "keyboard"), resize_keyboard=True)) await msg.reply_text(locale("start", "message", locale=msg.from_user), reply_markup=ReplyKeyboardMarkup(locale("welcome", "keyboard", locale=msg.from_user), resize_keyboard=True))
# ============================================================================================================================== # ==============================================================================================================================

View File

@ -11,7 +11,8 @@ async def cmd_warnings(app, msg):
if await isAnAdmin(msg.from_user.id) is True: if await isAnAdmin(msg.from_user.id) is True:
if len(msg.command) <= 1: if len(msg.command) <= 1:
await msg.reply_text(locale("syntax_warnings", "message"), quote=should_quote(msg)) await msg.reply_text(locale("syntax_warnings", "message", locale=msg.from_user), quote=should_quote(msg))
return
try: try:
user_db = col_users.find_one({"user": int(msg.command[1])}) user_db = col_users.find_one({"user": int(msg.command[1])})
@ -27,16 +28,16 @@ async def cmd_warnings(app, msg):
target_name = target.first_name target_name = target.first_name
target_id = str(target.id) target_id = str(target.id)
else: else:
await msg.reply_text(locale("no_user_warnings", "message").format(msg.command[1])) await msg.reply_text(locale("no_user_warnings", "message", locale=msg.from_user).format(msg.command[1]))
return return
warns = len(list(col_warnings.find({"user": target_id}))) warns = len(list(col_warnings.find({"user": target_id})))
if warns == 0: if warns == 0:
await msg.reply_text(locale("no_warnings", "message").format(target_name, target_id), quote=should_quote(msg)) await msg.reply_text(locale("no_warnings", "message", locale=msg.from_user).format(target_name, target_id), quote=should_quote(msg))
else: else:
if warns <= 5: if warns <= 5:
await msg.reply_text(locale("warnings_1", "message").format(target_name, target_id, warns), quote=should_quote(msg)) await msg.reply_text(locale("warnings_1", "message", locale=msg.from_user).format(target_name, target_id, warns), quote=should_quote(msg))
else: else:
await msg.reply_text(locale("warnings_2", "message").format(target_name, target_id, warns), quote=should_quote(msg)) await msg.reply_text(locale("warnings_2", "message", locale=msg.from_user).format(target_name, target_id, warns), quote=should_quote(msg))
# ============================================================================================================================== # ==============================================================================================================================

View File

@ -1,23 +1,36 @@
from os import listdir
from modules.logging import logWrite from modules.logging import logWrite
from modules.utils import configGet from modules.utils import configGet, locale
from pyrogram.types import BotCommand, BotCommandScopeChat from pyrogram.types import BotCommand, BotCommandScopeChat
from pyrogram.errors import bad_request_400 from pyrogram.errors import bad_request_400
def commands_register(app): def commands_register(app):
valid_locales = []
files_locales = listdir(f'{configGet("locale", "locations")}')
for entry in files_locales:
valid_locales.append(".".join(entry.split(".")[:-1]))
# Registering user commands # Registering user commands
commands_list = [] commands_list = []
for command in configGet("commands"): for command in locale("commands"):
commands_list.append(BotCommand(command, configGet("commands")[command])) commands_list.append(BotCommand(command, locale("commands")[command]))
app.set_bot_commands(commands_list) app.set_bot_commands(commands_list)
# Registering user commands for each locale
for lc in valid_locales:
commands_list = []
for command in locale("commands", locale=lc):
commands_list.append(BotCommand(command, locale("commands",locale=lc)[command]))
app.set_bot_commands(commands_list, language_code=lc)
# Registering admin commands # Registering admin commands
commands_admin_list = [] commands_admin_list = []
for command in configGet("commands"): for command in locale("commands"):
commands_admin_list.append(BotCommand(command, configGet("commands")[command])) commands_admin_list.append(BotCommand(command, locale("commands")[command]))
for command in configGet("commands_admin"): for command in locale("commands_admin"):
commands_admin_list.append(BotCommand(command, configGet("commands_admin")[command])) commands_admin_list.append(BotCommand(command, locale("commands_admin")[command]))
for admin in configGet("admins"): for admin in configGet("admins"):
try: try:
@ -32,8 +45,8 @@ def commands_register(app):
# Registering admin group commands # Registering admin group commands
commands_group_admin_list = [] commands_group_admin_list = []
for command in configGet("commands_group_admin"): for command in locale("commands_group_admin"):
commands_group_admin_list.append(BotCommand(command, configGet("commands_group_admin")[command])) commands_group_admin_list.append(BotCommand(command, locale("commands_group_admin")[command]))
try: try:
app.set_bot_commands(commands_group_admin_list, scope=BotCommandScopeChat(chat_id=configGet("admin_group"))) app.set_bot_commands(commands_group_admin_list, scope=BotCommandScopeChat(chat_id=configGet("admin_group")))
except bad_request_400.ChannelInvalid: except bad_request_400.ChannelInvalid:
@ -41,8 +54,8 @@ def commands_register(app):
# Registering destination group commands # Registering destination group commands
commands_group_destination_list = [] commands_group_destination_list = []
for command in configGet("commands_group_destination"): for command in locale("commands_group_destination"):
commands_group_destination_list.append(BotCommand(command, configGet("commands_group_destination")[command])) commands_group_destination_list.append(BotCommand(command, locale("commands_group_destination")[command]))
try: try:
app.set_bot_commands(commands_group_destination_list, scope=BotCommandScopeChat(chat_id=configGet("destination_group"))) app.set_bot_commands(commands_group_destination_list, scope=BotCommandScopeChat(chat_id=configGet("destination_group")))
except bad_request_400.ChannelInvalid: except bad_request_400.ChannelInvalid:

View File

@ -5,12 +5,15 @@ from pyrogram import filters
from pyrogram.types import ReplyKeyboardRemove, InlineKeyboardMarkup, InlineKeyboardButton from pyrogram.types import ReplyKeyboardRemove, InlineKeyboardMarkup, InlineKeyboardButton
from pyrogram.enums.parse_mode import ParseMode from pyrogram.enums.parse_mode import ParseMode
from classes.holo_user import HoloUser from classes.holo_user import HoloUser
from modules.utils import configGet, locale, logWrite from modules.utils import all_locales, configGet, locale, logWrite
from modules.handlers.welcome import welcome_pass from modules.handlers.welcome import welcome_pass
from modules.database import col_tmp from modules.database import col_tmp
# Confirmation ================================================================================================================= # Confirmation =================================================================================================================
@app.on_message(~ filters.scheduled & filters.private & (filters.regex(locale("confirm", "keyboard")[0][0]))) confirmation_1 = []
for pattern in all_locales("confirm", "keyboard"):
confirmation_1.append(pattern[0][0])
@app.on_message(~ filters.scheduled & filters.private & filters.command(confirmation_1, prefixes=[""]))
async def confirm_yes(app, msg): async def confirm_yes(app, msg):
holo_user = HoloUser(msg.from_user) holo_user = HoloUser(msg.from_user)
@ -81,7 +84,10 @@ async def confirm_yes(app, msg):
# configSet(["sent"], True, file=str(holo_user.id)) # configSet(["sent"], True, file=str(holo_user.id))
# configSet(["confirmed"], True, file=str(holo_user.id)) # configSet(["confirmed"], True, file=str(holo_user.id))
@app.on_message(~ filters.scheduled & filters.private & (filters.regex(locale("confirm", "keyboard")[1][0]))) confirmation_2 = []
for pattern in all_locales("confirm", "keyboard"):
confirmation_2.append(pattern[1][0])
@app.on_message(~ filters.scheduled & filters.private & filters.command(confirmation_2, prefixes=[""]))
async def confirm_no(app, msg): async def confirm_no(app, msg):
holo_user = HoloUser(msg.from_user) holo_user = HoloUser(msg.from_user)

View File

@ -20,7 +20,7 @@ async def get_contact(app, msg):
if application is None: if application is None:
logWrite(f"User {holo_user.id} requested application of {msg.contact.user_id} but user does not exists") logWrite(f"User {holo_user.id} requested application of {msg.contact.user_id} but user does not exists")
await msg.reply_text(locale("contact_invalid", "message")) await msg.reply_text(locale("contact_invalid", "message", locale=holo_user.locale))
return return
application_content = [] application_content = []
@ -30,24 +30,24 @@ async def get_contact(app, msg):
if i == 2: if i == 2:
age = relativedelta(datetime.now(), application['application']['2']) age = relativedelta(datetime.now(), application['application']['2'])
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application']['2'].strftime('%d.%m.%Y')} ({age.years} р.)") application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=holo_user.locale)} {application['application']['2'].strftime('%d.%m.%Y')} ({age.years} р.)")
elif i == 3: elif i == 3:
if application['application']['3']['countryCode'] == "UA": if application['application']['3']['countryCode'] == "UA":
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application']['3']['name']}") application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=holo_user.locale)} {application['application']['3']['name']}")
else: else:
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application']['3']['name']} ({application['application']['3']['adminName1']}, {application['application']['3']['countryName']})") application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=holo_user.locale)} {application['application']['3']['name']} ({application['application']['3']['adminName1']}, {application['application']['3']['countryName']})")
else: else:
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application'][question]}") application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=holo_user.locale)} {application['application'][question]}")
i += 1 i += 1
application_status = locale("application_status_accepted", "message").format((await app.get_users(application["admin"])).first_name, application["date"].strftime("%d.%m.%Y, %H:%M")) application_status = locale("application_status_accepted", "message", locale=holo_user.locale).format((await app.get_users(application["admin"])).first_name, application["date"].strftime("%d.%m.%Y, %H:%M"))
logWrite(f"User {holo_user.id} requested application of {msg.contact.user_id}") logWrite(f"User {holo_user.id} requested application of {msg.contact.user_id}")
await msg.reply_text(locale("contact", "message").format(str(msg.contact.user_id), "\n".join(application_content), application_status)) await msg.reply_text(locale("contact", "message", locale=holo_user.locale).format(str(msg.contact.user_id), "\n".join(application_content), application_status))
else: else:
logWrite(f"User {holo_user.id} requested application of someone but user is not telegram user") logWrite(f"User {holo_user.id} requested application of someone but user is not telegram user")
await msg.reply_text(locale("contact_not_member", "message")) await msg.reply_text(locale("contact_not_member", "message", locale=holo_user.locale))
# ============================================================================================================================== # ==============================================================================================================================

View File

@ -1,10 +1,15 @@
from app import app from app import app
from pyrogram import filters from pyrogram import filters
from pyrogram.types import ForceReply, ReplyKeyboardMarkup from pyrogram.types import ForceReply, ReplyKeyboardMarkup
from modules.utils import locale, logWrite from modules.utils import all_locales, locale, logWrite
# Welcome check ================================================================================================================ # Welcome check ================================================================================================================
@app.on_message(~ filters.scheduled & filters.private & (filters.regex(locale("welcome", "keyboard")[0][0]) | filters.regex(locale("return", "keyboard")[0][0]))) welcome_1 = []
for pattern in all_locales("welcome", "keyboard"):
welcome_1.append(pattern[0][0])
for pattern in all_locales("return", "keyboard"):
welcome_1.append(pattern[0][0])
@app.on_message(~ filters.scheduled & filters.private & filters.command(welcome_1, prefixes=[""]))
async def welcome_pass(app, msg, once_again: bool = True) -> None: async def welcome_pass(app, msg, once_again: bool = True) -> None:
"""Set user's stage to 1 and start a fresh application """Set user's stage to 1 and start a fresh application
@ -18,13 +23,16 @@ async def welcome_pass(app, msg, once_again: bool = True) -> None:
await msg.reply_text(locale("privacy_notice", "message")) await msg.reply_text(locale("privacy_notice", "message"))
logWrite(f"User {msg.from_user.id} confirmed starting the application") logWrite(f"User {msg.from_user.id} confirmed starting the application")
await msg.reply_text(locale("question1", "message"), reply_markup=ForceReply(placeholder=locale("question1", "force_reply"))) await msg.reply_text(locale("question1", "message", locale=msg.from_user), reply_markup=ForceReply(placeholder=locale("question1", "force_reply", locale=msg.from_user)))
# configSet(["stage"], 1, file=str(msg.from_user.id)) # configSet(["stage"], 1, file=str(msg.from_user.id))
# configSet(["sent"], False, file=str(msg.from_user.id)) # configSet(["sent"], False, file=str(msg.from_user.id))
@app.on_message(~ filters.scheduled & filters.private & (filters.regex(locale("welcome", "keyboard")[1][0]))) welcome_2 = []
for pattern in all_locales("welcome", "keyboard"):
welcome_2.append(pattern[1][0])
@app.on_message(~ filters.scheduled & filters.private & filters.command(welcome_2, prefixes=[""]))
async def welcome_reject(app, msg): async def welcome_reject(app, msg):
logWrite(f"User {msg.from_user.id} rejected to start the application") logWrite(f"User {msg.from_user.id} rejected to start the application")
await msg.reply_text(locale("goodbye", "message"), reply_markup=ReplyKeyboardMarkup(locale("return", "keyboard"), resize_keyboard=True)) await msg.reply_text(locale("goodbye", "message", locale=msg.from_user), reply_markup=ReplyKeyboardMarkup(locale("return", "keyboard", locale=msg.from_user), resize_keyboard=True))
# ============================================================================================================================== # ==============================================================================================================================

View File

@ -16,11 +16,11 @@ async def inline_answer(client, inline_query):
await inline_query.answer( await inline_query.answer(
results=[ results=[
InlineQueryResultArticle( InlineQueryResultArticle(
title=locale("title", "inline", "not_pm"), title=locale("title", "inline", "not_pm", locale=inline_query.from_user),
input_message_content=InputTextMessageContent( input_message_content=InputTextMessageContent(
locale("message_content", "inline", "not_pm") locale("message_content", "inline", "not_pm", locale=inline_query.from_user)
), ),
description=locale("description", "inline", "not_pm") description=locale("description", "inline", "not_pm", locale=inline_query.from_user)
) )
] ]
) )
@ -32,11 +32,11 @@ async def inline_answer(client, inline_query):
await inline_query.answer( await inline_query.answer(
results=[ results=[
InlineQueryResultArticle( InlineQueryResultArticle(
title=locale("title", "inline", "forbidden"), title=locale("title", "inline", "forbidden", locale=inline_query.from_user),
input_message_content=InputTextMessageContent( input_message_content=InputTextMessageContent(
locale("message_content", "inline", "forbidden") locale("message_content", "inline", "forbidden", locale=inline_query.from_user)
), ),
description=locale("description", "inline", "forbidden") description=locale("description", "inline", "forbidden", locale=inline_query.from_user)
) )
] ]
) )
@ -64,14 +64,14 @@ async def inline_answer(client, inline_query):
if i == 2: if i == 2:
age = relativedelta(datetime.now(), application['application']['2']) age = relativedelta(datetime.now(), application['application']['2'])
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application']['2'].strftime('%d.%m.%Y')} ({age.years} р.)") application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=inline_query.from_user)} {application['application']['2'].strftime('%d.%m.%Y')} ({age.years} р.)")
elif i == 3: elif i == 3:
if application['application']['3']['countryCode'] == "UA": if application['application']['3']['countryCode'] == "UA":
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application']['3']['name']}") application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=inline_query.from_user)} {application['application']['3']['name']}")
else: else:
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application']['3']['name']} ({application['application']['3']['adminName1']}, {application['application']['3']['countryName']})") application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=inline_query.from_user)} {application['application']['3']['name']} ({application['application']['3']['adminName1']}, {application['application']['3']['countryName']})")
else: else:
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles')} {application['application'][question]}") application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=inline_query.from_user)} {application['application'][question]}")
i += 1 i += 1
@ -84,9 +84,9 @@ async def inline_answer(client, inline_query):
InlineQueryResultArticle( InlineQueryResultArticle(
title=str(match.user.first_name), title=str(match.user.first_name),
input_message_content=InputTextMessageContent( input_message_content=InputTextMessageContent(
locale("message_content", "inline", "user").format(match.user.first_name, match.user.username, "\n".join(application_content)) locale("message_content", "inline", "user", locale=inline_query.from_user).format(match.user.first_name, match.user.username, "\n".join(application_content))
), ),
description=locale("description", "inline", "user").format(match.user.first_name, match.user.username), description=locale("description", "inline", "user", locale=inline_query.from_user).format(match.user.first_name, match.user.username),
thumb_url=f'{configGet("api")}/?avatar_id={match.user.photo.big_file_id}' thumb_url=f'{configGet("api")}/?avatar_id={match.user.photo.big_file_id}'
) )
) )
@ -95,9 +95,9 @@ async def inline_answer(client, inline_query):
InlineQueryResultArticle( InlineQueryResultArticle(
title=str(match.user.first_name), title=str(match.user.first_name),
input_message_content=InputTextMessageContent( input_message_content=InputTextMessageContent(
locale("message_content", "inline", "user").format(match.user.first_name, match.user.username, "\n".join(application_content)) locale("message_content", "inline", "user", locale=inline_query.from_user).format(match.user.first_name, match.user.username, "\n".join(application_content))
), ),
description=locale("description", "inline", "user").format(match.user.first_name, match.user.username) description=locale("description", "inline", "user", locale=inline_query.from_user).format(match.user.first_name, match.user.username)
) )
) )
except FileNotFoundError: except FileNotFoundError:
@ -105,9 +105,9 @@ async def inline_answer(client, inline_query):
InlineQueryResultArticle( InlineQueryResultArticle(
title=str(match.user.first_name), title=str(match.user.first_name),
input_message_content=InputTextMessageContent( input_message_content=InputTextMessageContent(
locale("message_content", "inline", "user").format(match.user.first_name, match.user.username, "\n".join(application_content)) locale("message_content", "inline", "user", locale=inline_query.from_user).format(match.user.first_name, match.user.username, "\n".join(application_content))
), ),
description=locale("description", "inline", "user").format(match.user.first_name, match.user.username) description=locale("description", "inline", "user", locale=inline_query.from_user).format(match.user.first_name, match.user.username)
) )
) )
else: else:
@ -115,9 +115,9 @@ async def inline_answer(client, inline_query):
InlineQueryResultArticle( InlineQueryResultArticle(
title=str(match.user.first_name), title=str(match.user.first_name),
input_message_content=InputTextMessageContent( input_message_content=InputTextMessageContent(
locale("message_content", "inline", "user").format(match.user.first_name, match.user.username, "\n".join(application_content)) locale("message_content", "inline", "user", locale=inline_query.from_user).format(match.user.first_name, match.user.username, "\n".join(application_content))
), ),
description=locale("description", "inline", "user").format(match.user.first_name, match.user.username) description=locale("description", "inline", "user", locale=inline_query.from_user).format(match.user.first_name, match.user.username)
) )
) )

View File

@ -7,10 +7,9 @@ from ujson import JSONDecodeError as JSONDecodeError
from ujson import loads, dumps from ujson import loads, dumps
from sys import exit from sys import exit
from os import kill, sep from os import kill, listdir, sep
from os import name as osname from os import name as osname
from traceback import print_exc from traceback import print_exc
from classes.holo_user import HoloUser
from modules.logging import logWrite from modules.logging import logWrite
@ -103,7 +102,7 @@ def configGet(key: str, *args: str, file: str = "config"):
this_key = this_key[dict_key] this_key = this_key[dict_key]
return this_key[key] return this_key[key]
def locale(key: str, *args: str, locale: Union[str, User, HoloUser] = configGet("locale")) -> Any: def locale(key: str, *args: str, locale: Union[str, User] = configGet("locale")) -> Any:
"""Get value of locale string """Get value of locale string
### Args: ### Args:
* key (`str`): The last key of the locale's keys path. * key (`str`): The last key of the locale's keys path.
@ -114,7 +113,7 @@ def locale(key: str, *args: str, locale: Union[str, User, HoloUser] = configGet(
""" """
if isinstance(locale, User): if isinstance(locale, User):
locale = locale.language_code locale = locale.language_code
elif isinstance(locale, HoloUser): elif hasattr(locale, "locale"):
locale = locale.locale locale = locale.locale
if locale is None: if locale is None:
@ -137,6 +136,41 @@ def locale(key: str, *args: str, locale: Union[str, User, HoloUser] = configGet(
except KeyError: except KeyError:
return f'⚠️ Locale in config is invalid: could not get "{key}" in {str(args)} from locale "{locale}"' return f'⚠️ Locale in config is invalid: could not get "{key}" in {str(args)} from locale "{locale}"'
def all_locales(key: str, *args: str) -> list:
"""Get value of the provided key and path in all available locales
### Args:
* key (`str`): The last key of the locale's keys path.
* *args (`list`): Path to key like: dict[args][key].
### Returns:
* `list`: List of all values in all locales
"""
output = []
valid_locales = []
files_locales = listdir(f'{configGet("locale", "locations")}')
for entry in files_locales:
valid_locales.append(".".join(entry.split(".")[:-1]))
for lc in valid_locales:
try:
this_dict = jsonLoad(f'{configGet("locale", "locations")}{sep}{lc}.json')
except FileNotFoundError:
continue
this_key = this_dict
for dict_key in args:
this_key = this_key[dict_key]
try:
output.append(this_key[key])
except KeyError:
continue
return output
try: try:
from psutil import Process from psutil import Process
except ModuleNotFoundError: except ModuleNotFoundError: