Compare commits
5 Commits
85112dc653
...
e59aa98fd5
Author | SHA1 | Date | |
---|---|---|---|
|
e59aa98fd5 | ||
|
082acc85cf | ||
|
87d9afe74a | ||
|
5e06859b56 | ||
|
47896faf06 |
@ -254,11 +254,11 @@ class HoloUser():
|
||||
elif animation is not None:
|
||||
if isinstance(animation, Animation):
|
||||
animation = animation.file_id
|
||||
new_message = await app.send_animation(animation, caption=caption, quote=True)
|
||||
new_message = await app.send_animation(self.id, animation, caption=caption)
|
||||
elif voice is not None:
|
||||
if isinstance(voice, Voice):
|
||||
voice = voice.file_id
|
||||
new_message = await app.send_voice(voice, caption=caption, quote=True)
|
||||
new_message = await app.send_voice(self.id, voice, caption=caption)
|
||||
else:
|
||||
new_message = await app.send_message(self.id, text)
|
||||
|
||||
@ -351,6 +351,10 @@ class HoloUser():
|
||||
|
||||
progress = col_tmp.find_one({"user": self.id, "type": "application"})
|
||||
stage = progress["stage"]
|
||||
|
||||
if self.sponsorship_state()[0] == "fill":
|
||||
await msg.reply_text(locale("finish_sponsorship", "message"), quote=should_quote(msg))
|
||||
return
|
||||
|
||||
if progress["state"] == "fill" and progress["sent"] is False:
|
||||
|
||||
|
@ -90,6 +90,8 @@
|
||||
"sponsorships_expires": "⚠️ **Нагадування**\nНадана платна підписка припинить діяти **за {0} д**. Будь ласка, оновіть дані про неї командою /sponsorship інакше роль буде втрачено!",
|
||||
"sponsorships_expired": "⚠️ **Нагадування**\nТермін дії вказаної підписки сплив. Для повторного отримання ролі користуйся командою /sponsorship.",
|
||||
"label_too_long": "Довжина назви ролі не повинна перевищувати 16 символів",
|
||||
"finish_sponsorship": "❌ **Дія неможлива**\nПерш ніж заповнювати анкету, треба завершити заповнення форми спонсора.",
|
||||
"finish_application": "❌ **Дія неможлива**\nПерш ніж заповнювати форму спонсора, треба завершити заповнення анкети.",
|
||||
"voice_message": [
|
||||
"why are u gae",
|
||||
"руки відірвало? пиши як людина",
|
||||
|
@ -1,9 +1,11 @@
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import CallbackQuery
|
||||
from pyrogram.client import Client
|
||||
from modules.utils import locale
|
||||
|
||||
# Callback empty ===============================================================================================================
|
||||
@app.on_callback_query(filters.regex("nothing"))
|
||||
async def callback_query_nothing(app, clb):
|
||||
async def callback_query_nothing(app: Client, clb: CallbackQuery):
|
||||
await clb.answer(text=locale("nothing", "callback", locale=clb.from_user))
|
||||
# ==============================================================================================================================
|
@ -1,16 +1,17 @@
|
||||
from datetime import datetime
|
||||
from app import app
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ReplyKeyboardRemove
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ReplyKeyboardRemove, CallbackQuery
|
||||
from pyrogram.client import Client
|
||||
from pyrogram import filters
|
||||
from classes.holo_user import HoloUser
|
||||
from modules.utils import configGet, locale, logWrite
|
||||
from modules.utils import configGet, locale, logWrite, should_quote
|
||||
from modules.handlers.confirmation import confirm_yes
|
||||
from modules.handlers.welcome import welcome_pass
|
||||
from modules.database import col_tmp, col_applications
|
||||
|
||||
# Callbacks reapply ============================================================================================================
|
||||
@app.on_callback_query(filters.regex("reapply_yes_[\s\S]*"))
|
||||
async def callback_reapply_query_accept(app, clb):
|
||||
async def callback_reapply_query_accept(app: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
holo_user = HoloUser(int(fullclb[2]))
|
||||
@ -56,7 +57,7 @@ async def callback_reapply_query_accept(app, clb):
|
||||
await app.send_message(holo_user.id, locale("approved_joined", "message", locale=holo_user))
|
||||
|
||||
@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: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
holo_user = HoloUser(int(fullclb[2]))
|
||||
@ -74,18 +75,27 @@ async def callback_query_reapply_reject(app, clb):
|
||||
|
||||
# Use old application when user reapplies after leaving the chat
|
||||
@app.on_callback_query(filters.regex("reapply_old_[\s\S]*"))
|
||||
async def callback_query_reapply_old(app, clb):
|
||||
async def callback_query_reapply_old(app: Client, clb: CallbackQuery):
|
||||
fullclb = clb.data.split("_")
|
||||
|
||||
if HoloUser(clb.from_user).sponsorship_state()[0] == "fill":
|
||||
await clb.message.reply_text(locale("finish_sponsorship", "message"), quote=False)
|
||||
return
|
||||
|
||||
message = await app.get_messages(clb.from_user.id, int(fullclb[2]))
|
||||
await confirm_yes(app, message, kind="application")
|
||||
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
|
||||
@app.on_callback_query(filters.regex("reapply_new_[\s\S]*"))
|
||||
async def callback_query_reapply_new(app, clb):
|
||||
async def callback_query_reapply_new(app: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
|
||||
if HoloUser(clb.from_user).sponsorship_state()[0] == "fill":
|
||||
await clb.message.reply_text(locale("finish_sponsorship", "message"), quote=False)
|
||||
return
|
||||
|
||||
await clb.answer(locale("reapply_stopped", "callback", locale=clb.from_user))
|
||||
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}})
|
||||
@ -95,7 +105,7 @@ async def callback_query_reapply_new(app, clb):
|
||||
|
||||
# Abort application fill in progress and restart it
|
||||
@app.on_callback_query(filters.regex("reapply_stop_[\s\S]*"))
|
||||
async def callback_query_reapply_stop(app, clb):
|
||||
async def callback_query_reapply_stop(app: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
holo_user = HoloUser(clb.from_user)
|
||||
|
@ -1,5 +1,6 @@
|
||||
from app import app
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery
|
||||
from pyrogram.client import Client
|
||||
from pyrogram.errors import bad_request_400
|
||||
from pyrogram import filters
|
||||
from modules.utils import locale, logWrite
|
||||
@ -7,7 +8,7 @@ from modules.commands.rules import DefaultRulesMarkup
|
||||
|
||||
# Callback rule ================================================================================================================
|
||||
@app.on_callback_query(filters.regex("rule_[\s\S]*"))
|
||||
async def callback_query_rule(app, clb):
|
||||
async def callback_query_rule(app: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
|
||||
@ -46,7 +47,7 @@ async def callback_query_rule(app, clb):
|
||||
await clb.answer(text=locale("rules_page", "callback", locale=clb.from_user).format(fullclb[1]))
|
||||
|
||||
@app.on_callback_query(filters.regex("rules_home"))
|
||||
async def callback_query_rules_home(app, clb):
|
||||
async def callback_query_rules_home(app: Client, clb: CallbackQuery):
|
||||
|
||||
logWrite(f"User {clb.from_user.id} requested to check out homepage rules")
|
||||
|
||||
@ -58,7 +59,7 @@ async def callback_query_rules_home(app, clb):
|
||||
await clb.answer(text=locale("rules_home", "callback", locale=clb.from_user))
|
||||
|
||||
@app.on_callback_query(filters.regex("rules_additional"))
|
||||
async def callback_query_rules_additional(app, clb):
|
||||
async def callback_query_rules_additional(app: Client, clb: CallbackQuery):
|
||||
|
||||
logWrite(f"User {clb.from_user.id} requested to check out additional rules")
|
||||
|
||||
|
@ -1,18 +1,23 @@
|
||||
from datetime import datetime
|
||||
from app import app
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ForceReply
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ForceReply, CallbackQuery
|
||||
from pyrogram.client import Client
|
||||
from pyrogram import filters
|
||||
from classes.holo_user import HoloUser
|
||||
from modules.utils import configGet, locale, logWrite
|
||||
from modules.utils import configGet, locale, logWrite, should_quote
|
||||
from modules.database import col_tmp, col_sponsorships
|
||||
|
||||
# Callbacks sponsorship ========================================================================================================
|
||||
@app.on_callback_query(filters.regex("sponsor_apply_[\s\S]*"))
|
||||
async def callback_query_sponsor_apply(app, clb):
|
||||
async def callback_query_sponsor_apply(app: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
holo_user = HoloUser(int(fullclb[2]))
|
||||
|
||||
if holo_user.application_state()[0] == "fill":
|
||||
await clb.message.reply_text(locale("finish_application", "message"), quote=should_quote(clb.message))
|
||||
return
|
||||
|
||||
logWrite(f"User {holo_user.id} applied for sponsorship")
|
||||
|
||||
holo_user.sponsorship_restart()
|
||||
@ -24,7 +29,7 @@ async def callback_query_sponsor_apply(app, clb):
|
||||
await clb.answer(text=locale("sponsor_started", "callback").format(holo_user.id), show_alert=False)
|
||||
|
||||
@app.on_callback_query(filters.regex("sponsor_yes_[\s\S]*"))
|
||||
async def callback_query_sponsor_yes(app, clb):
|
||||
async def callback_query_sponsor_yes(app: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
holo_user = HoloUser(int(fullclb[2]))
|
||||
@ -70,7 +75,7 @@ async def callback_query_sponsor_yes(app, clb):
|
||||
await clb.answer(text=locale("sponsor_accepted", "callback").format(fullclb[2]), show_alert=False)
|
||||
|
||||
@app.on_callback_query(filters.regex("sponsor_no_[\s\S]*"))
|
||||
async def callback_query_sponsor_no(app, clb):
|
||||
async def callback_query_sponsor_no(app: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
holo_user = HoloUser(int(fullclb[2]))
|
||||
|
@ -1,7 +1,8 @@
|
||||
from datetime import datetime
|
||||
from app import app
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery
|
||||
from pyrogram import filters
|
||||
from pyrogram.client import Client
|
||||
from classes.holo_user import HoloUser
|
||||
from modules.utils import configGet, locale, logWrite
|
||||
from modules.database import col_tmp, col_applications
|
||||
@ -9,7 +10,7 @@ from modules.commands.rules import DefaultRulesMarkup
|
||||
|
||||
# Callbacks application ========================================================================================================
|
||||
@app.on_callback_query(filters.regex("sub_yes_[\s\S]*"))
|
||||
async def callback_query_accept(app, clb):
|
||||
async def callback_query_accept(app: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
holo_user = HoloUser(int(fullclb[2]))
|
||||
@ -51,7 +52,7 @@ async def callback_query_accept(app, clb):
|
||||
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]*"))
|
||||
async def callback_query_reject(app, clb):
|
||||
async def callback_query_reject(app: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
holo_user = HoloUser(int(fullclb[2]))
|
||||
@ -68,7 +69,7 @@ async def callback_query_reject(app, clb):
|
||||
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]*"))
|
||||
async def callback_query_reject_aggressive(app, clb):
|
||||
async def callback_query_reject_aggressive(app: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
holo_user = HoloUser(int(fullclb[2]))
|
||||
@ -85,7 +86,7 @@ async def callback_query_reject_aggressive(app, clb):
|
||||
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]*"))
|
||||
async def callback_query_reject_russian(app, clb):
|
||||
async def callback_query_reject_russian(app: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
holo_user = HoloUser(int(fullclb[2]))
|
||||
|
@ -1,5 +1,6 @@
|
||||
from app import app
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ChatPermissions
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ChatPermissions, CallbackQuery
|
||||
from pyrogram.client import Client
|
||||
from pyrogram import filters
|
||||
from classes.holo_user import HoloUser
|
||||
from modules.utils import configGet, locale, logWrite
|
||||
@ -7,7 +8,7 @@ from modules.database import col_tmp
|
||||
|
||||
# Callbacks sus users ==========================================================================================================
|
||||
@app.on_callback_query(filters.regex("sus_allow_[\s\S]*"))
|
||||
async def callback_query_sus_allow(app, clb):
|
||||
async def callback_query_sus_allow(app: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
holo_user = HoloUser(int(fullclb[2]))
|
||||
@ -29,7 +30,7 @@ async def callback_query_sus_allow(app, clb):
|
||||
)
|
||||
|
||||
@app.on_callback_query(filters.regex("sus_reject_[\s\S]*"))
|
||||
async def callback_query_sus_reject(app, clb):
|
||||
async def callback_query_sus_reject(app: Client, clb: CallbackQuery):
|
||||
|
||||
fullclb = clb.data.split("_")
|
||||
holo_user = HoloUser(int(fullclb[2]))
|
||||
|
@ -1,96 +1,97 @@
|
||||
from datetime import datetime
|
||||
from app import app, isAnAdmin
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.enums.parse_mode import ParseMode
|
||||
from pyrogram.types import Message
|
||||
from pyrogram.errors import bad_request_400
|
||||
from pyrogram.client import Client
|
||||
from classes.holo_user import HoloUser, UserNotFoundError
|
||||
from modules.utils import logWrite, locale, should_quote
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from modules.database import col_applications
|
||||
from modules import custom_filters
|
||||
|
||||
# Applications command =========================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.command(["application"], prefixes=["/"]))
|
||||
async def cmd_application(app, msg):
|
||||
@app.on_message(~ filters.scheduled & custom_filters.admin & filters.command(["application"], prefixes=["/"]))
|
||||
async def cmd_application(app: Client, msg: Message):
|
||||
|
||||
if await isAnAdmin(msg.from_user.id) is True:
|
||||
try:
|
||||
|
||||
try:
|
||||
|
||||
holo_user = HoloUser(int(msg.command[1]))
|
||||
except (ValueError, UserNotFoundError):
|
||||
try:
|
||||
holo_user = HoloUser(int(msg.command[1]))
|
||||
except (ValueError, UserNotFoundError):
|
||||
try:
|
||||
holo_user = HoloUser((await app.get_users(msg.command[1])).id)
|
||||
except (bad_request_400.UsernameInvalid, bad_request_400.PeerIdInvalid):
|
||||
await msg.reply_text(locale("no_user_application", "message", locale=msg.from_user).format(msg.command[1]), quote=should_quote(msg))
|
||||
return
|
||||
|
||||
application = col_applications.find_one({"user": holo_user.id})
|
||||
|
||||
if application is None:
|
||||
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", locale=msg.from_user), quote=should_quote(msg))
|
||||
holo_user = HoloUser((await app.get_users(msg.command[1])).id)
|
||||
except (bad_request_400.UsernameInvalid, bad_request_400.PeerIdInvalid):
|
||||
await msg.reply_text(locale("no_user_application", "message", locale=msg.from_user).format(msg.command[1]), quote=should_quote(msg))
|
||||
return
|
||||
|
||||
application_content = []
|
||||
i = 1
|
||||
application = col_applications.find_one({"user": holo_user.id})
|
||||
|
||||
for question in application['application']:
|
||||
if application is None:
|
||||
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", locale=msg.from_user), quote=should_quote(msg))
|
||||
return
|
||||
|
||||
if i == 2:
|
||||
age = relativedelta(datetime.now(), application['application']['2'])
|
||||
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:
|
||||
if application['application']['3']['countryCode'] == "UA":
|
||||
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=msg.from_user)} {application['application']['3']['name']}")
|
||||
else:
|
||||
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']})")
|
||||
application_content = []
|
||||
i = 1
|
||||
|
||||
for question in application['application']:
|
||||
|
||||
if i == 2:
|
||||
age = relativedelta(datetime.now(), application['application']['2'])
|
||||
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:
|
||||
if application['application']['3']['countryCode'] == "UA":
|
||||
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=msg.from_user)} {application['application']['3']['name']}")
|
||||
else:
|
||||
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=msg.from_user)} {application['application'][question]}")
|
||||
|
||||
i += 1
|
||||
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:
|
||||
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=msg.from_user)} {application['application'][question]}")
|
||||
|
||||
i += 1
|
||||
|
||||
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"))
|
||||
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}")
|
||||
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))
|
||||
logWrite(f"User {msg.from_user.id} requested application of {holo_user.id}")
|
||||
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"]):
|
||||
# user_id = int(msg.command[1])
|
||||
# else:
|
||||
# list_of_users = []
|
||||
# async for m in app.get_chat_members(configGet("destination_group"), filter=ChatMembersFilter.SEARCH, query=msg.command[1]):
|
||||
# list_of_users.append(m)
|
||||
# user_id = list_of_users[0].user.id
|
||||
# try:
|
||||
# user_data = jsonLoad(f"{configGet('data', 'locations')}{sep}users{sep}{user_id}.json")
|
||||
# application = jsonLoad(f"{configGet('data', 'locations')}{sep}applications.json")[str(user_id)]
|
||||
# application_content = []
|
||||
# i = 1
|
||||
# for question in configGet("application", file=str(msg.from_user.id)):
|
||||
# if i == 2:
|
||||
# age = relativedelta(datetime.now(), datetime.strptime(application['application']['2'], '%d.%m.%Y'))
|
||||
# application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {application['application']['2']} ({age.years} р.)")
|
||||
# else:
|
||||
# application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {application['application'][question]}")
|
||||
# i += 1
|
||||
# if user_data["sent"]:
|
||||
# if user_data["approved"]:
|
||||
# application_status = locale("application_status_accepted", "message").format((await app.get_users(application["approved_by"])).first_name, datetime.fromtimestamp(application["approval_date"]).strftime("%d.%m.%Y, %H:%M"))
|
||||
# elif application["rejected"]:
|
||||
# application_status = locale("application_status_rejected", "message").format((await app.get_users(application["rejected_by"])).first_name, datetime.fromtimestamp(application["refusal_date"]).strftime("%d.%m.%Y, %H:%M"))
|
||||
# else:
|
||||
# application_status = locale("application_status_on_hold", "message")
|
||||
# else:
|
||||
# if user_data["approved"]:
|
||||
# application_status = locale("application_status_accepted", "message").format((await app.get_users(application["approved_by"])).first_name, datetime.fromtimestamp(application["approval_date"]).strftime("%d.%m.%Y, %H:%M"))
|
||||
# elif application["rejected"]:
|
||||
# application_status = locale("application_status_rejected", "message").format((await app.get_users(application["rejected_by"])).first_name, datetime.fromtimestamp(application["refusal_date"]).strftime("%d.%m.%Y, %H:%M"))
|
||||
# else:
|
||||
# application_status = locale("application_status_not_send", "message")
|
||||
# logWrite(f"User {msg.from_user.id} requested application of {user_id}")
|
||||
# await msg.reply_text(locale("contact", "message").format(str(user_id), "\n".join(application_content), application_status), quote=should_quote(msg))
|
||||
|
||||
except IndexError:
|
||||
await msg.reply_text(locale("application_invalid_syntax", "message", locale=msg.from_user), 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"]):
|
||||
# user_id = int(msg.command[1])
|
||||
# else:
|
||||
# list_of_users = []
|
||||
# async for m in app.get_chat_members(configGet("destination_group"), filter=ChatMembersFilter.SEARCH, query=msg.command[1]):
|
||||
# list_of_users.append(m)
|
||||
# user_id = list_of_users[0].user.id
|
||||
# try:
|
||||
# user_data = jsonLoad(f"{configGet('data', 'locations')}{sep}users{sep}{user_id}.json")
|
||||
# application = jsonLoad(f"{configGet('data', 'locations')}{sep}applications.json")[str(user_id)]
|
||||
# application_content = []
|
||||
# i = 1
|
||||
# for question in configGet("application", file=str(msg.from_user.id)):
|
||||
# if i == 2:
|
||||
# age = relativedelta(datetime.now(), datetime.strptime(application['application']['2'], '%d.%m.%Y'))
|
||||
# application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {application['application']['2']} ({age.years} р.)")
|
||||
# else:
|
||||
# application_content.append(f"{locale('question'+str(i), 'message', 'question_titles')} {application['application'][question]}")
|
||||
# i += 1
|
||||
# if user_data["sent"]:
|
||||
# if user_data["approved"]:
|
||||
# application_status = locale("application_status_accepted", "message").format((await app.get_users(application["approved_by"])).first_name, datetime.fromtimestamp(application["approval_date"]).strftime("%d.%m.%Y, %H:%M"))
|
||||
# elif application["rejected"]:
|
||||
# application_status = locale("application_status_rejected", "message").format((await app.get_users(application["rejected_by"])).first_name, datetime.fromtimestamp(application["refusal_date"]).strftime("%d.%m.%Y, %H:%M"))
|
||||
# else:
|
||||
# application_status = locale("application_status_on_hold", "message")
|
||||
# else:
|
||||
# if user_data["approved"]:
|
||||
# application_status = locale("application_status_accepted", "message").format((await app.get_users(application["approved_by"])).first_name, datetime.fromtimestamp(application["approval_date"]).strftime("%d.%m.%Y, %H:%M"))
|
||||
# elif application["rejected"]:
|
||||
# application_status = locale("application_status_rejected", "message").format((await app.get_users(application["rejected_by"])).first_name, datetime.fromtimestamp(application["refusal_date"]).strftime("%d.%m.%Y, %H:%M"))
|
||||
# else:
|
||||
# application_status = locale("application_status_not_send", "message")
|
||||
# logWrite(f"User {msg.from_user.id} requested application of {user_id}")
|
||||
# await msg.reply_text(locale("contact", "message").format(str(user_id), "\n".join(application_content), application_status), quote=should_quote(msg))
|
||||
|
||||
except IndexError:
|
||||
await msg.reply_text(locale("application_invalid_syntax", "message", locale=msg.from_user), quote=should_quote(msg))
|
||||
# ==============================================================================================================================
|
@ -1,28 +1,30 @@
|
||||
from os import sep, makedirs, remove
|
||||
from uuid import uuid1
|
||||
from app import app, isAnAdmin
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message
|
||||
from pyrogram.client import Client
|
||||
from pyrogram.enums.chat_action import ChatAction
|
||||
from modules.logging import logWrite
|
||||
from modules.utils import should_quote, jsonSave
|
||||
from modules.database import col_applications
|
||||
from modules import custom_filters
|
||||
|
||||
# Applications command =========================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.command(["applications"], prefixes=["/"]))
|
||||
async def cmd_applications(app, msg):
|
||||
@app.on_message(~ filters.scheduled & custom_filters.admin & filters.command(["applications"], prefixes=["/"]))
|
||||
async def cmd_applications(app: Client, msg: Message):
|
||||
|
||||
if await isAnAdmin(msg.from_user.id) is True:
|
||||
logWrite(f"Admin {msg.from_user.id} requested export of a database")
|
||||
await app.send_chat_action(msg.chat.id, ChatAction.UPLOAD_DOCUMENT)
|
||||
filename = uuid1()
|
||||
output = []
|
||||
for entry in col_applications.find():
|
||||
del entry["_id"]
|
||||
entry["date"] = entry["date"].strftime("%d.%m.%Y, %H:%M")
|
||||
entry["application"]["2"] = entry["application"]["2"].strftime("%d.%m.%Y, %H:%M")
|
||||
output.append(entry)
|
||||
makedirs("tmp", exist_ok=True)
|
||||
jsonSave(output, f"tmp{sep}{filename}.json")
|
||||
await msg.reply_document(document=f"tmp{sep}{filename}.json", file_name="applications", quote=should_quote(msg))
|
||||
remove(f"tmp{sep}{filename}.json")
|
||||
logWrite(f"Admin {msg.from_user.id} requested export of a database")
|
||||
await app.send_chat_action(msg.chat.id, ChatAction.UPLOAD_DOCUMENT)
|
||||
filename = uuid1()
|
||||
output = []
|
||||
for entry in col_applications.find():
|
||||
del entry["_id"]
|
||||
entry["date"] = entry["date"].strftime("%d.%m.%Y, %H:%M")
|
||||
entry["application"]["2"] = entry["application"]["2"].strftime("%d.%m.%Y, %H:%M")
|
||||
output.append(entry)
|
||||
makedirs("tmp", exist_ok=True)
|
||||
jsonSave(output, f"tmp{sep}{filename}.json")
|
||||
await msg.reply_document(document=f"tmp{sep}{filename}.json", file_name="applications", quote=should_quote(msg))
|
||||
remove(f"tmp{sep}{filename}.json")
|
||||
# ==============================================================================================================================
|
@ -1,7 +1,9 @@
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message
|
||||
from pyrogram.client import Client
|
||||
from modules.utils import should_quote
|
||||
|
||||
@app.on_message(~ filters.scheduled & filters.command("cancel", prefixes=["/"]))
|
||||
async def command_cancel(app, msg):
|
||||
async def command_cancel(app: Client, msg: Message):
|
||||
await msg.reply_text("Command exists.", quote=should_quote(msg))
|
@ -1,36 +1,37 @@
|
||||
from app import app, isAnAdmin
|
||||
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 import custom_filters
|
||||
|
||||
@app.on_message(~ filters.scheduled & filters.private & filters.command(["label"], prefixes=["/"]))
|
||||
async def cmd_label(app, msg):
|
||||
@app.on_message(~ filters.scheduled & custom_filters.admin & filters.private & filters.command(["label"], prefixes=["/"]))
|
||||
async def cmd_label(app: Client, msg: Message):
|
||||
|
||||
if await isAnAdmin(msg.from_user.id) is True:
|
||||
if len(msg.command) < 3:
|
||||
await msg.reply_text("Invalid syntax:\n`/label USER LABEL`")
|
||||
return
|
||||
|
||||
if len(msg.command) < 3:
|
||||
await msg.reply_text("Invalid syntax:\n`/label USER LABEL`")
|
||||
return
|
||||
target = await find_user(app, msg.command[1])
|
||||
|
||||
target = await find_user(app, msg.command[1])
|
||||
if target is not None:
|
||||
|
||||
target = HoloUser(target)
|
||||
|
||||
if target is not None:
|
||||
label = " ".join(msg.command[2:])
|
||||
|
||||
if label.lower() == "reset":
|
||||
await target.label_reset(msg.chat)
|
||||
await msg.reply_text(f"Resetting **{target.id}**'s label...", quote=should_quote(msg))
|
||||
|
||||
target = HoloUser(target)
|
||||
|
||||
label = " ".join(msg.command[2:])
|
||||
|
||||
if label.lower() == "reset":
|
||||
await target.label_reset(msg.chat)
|
||||
await msg.reply_text(f"Resetting **{target.id}**'s label...", quote=should_quote(msg))
|
||||
|
||||
else:
|
||||
try:
|
||||
await target.label_set(msg.chat, label)
|
||||
except LabelTooLongError:
|
||||
await msg.reply_text(locale("label_too_long", "message"))
|
||||
return
|
||||
await msg.reply_text(f"Setting **{target.id}**'s label to **{label}**...", quote=should_quote(msg))
|
||||
|
||||
else:
|
||||
await msg.reply_text(f"User not found")
|
||||
try:
|
||||
await target.label_set(msg.chat, label)
|
||||
except LabelTooLongError:
|
||||
await msg.reply_text(locale("label_too_long", "message"))
|
||||
return
|
||||
await msg.reply_text(f"Setting **{target.id}**'s label to **{label}**...", quote=should_quote(msg))
|
||||
|
||||
else:
|
||||
await msg.reply_text(f"User not found")
|
@ -1,32 +1,33 @@
|
||||
from app import app, isAnAdmin
|
||||
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 modules import custom_filters
|
||||
|
||||
# Message command ==============================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.command(["message"], prefixes=["/"]))
|
||||
async def cmd_message(app, msg):
|
||||
@app.on_message(~ filters.scheduled & custom_filters.admin & filters.command(["message"], prefixes=["/"]))
|
||||
async def cmd_message(app: Client, msg: Message):
|
||||
|
||||
if await isAnAdmin(msg.from_user.id) is True:
|
||||
try:
|
||||
|
||||
try:
|
||||
|
||||
try:
|
||||
destination = HoloUser(int(msg.command[1]))
|
||||
except ValueError:
|
||||
destination = HoloUser(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)
|
||||
elif ((msg.caption is not None) and (len(msg.caption.split()) > 2)):
|
||||
await destination.message(context=msg, text=msg.text, caption=" ".join(msg.caption.split()[2:]), photo=msg.photo, video=msg.video, file=msg.document, adm_context=True)
|
||||
else:
|
||||
await destination.message(context=msg, text=None, caption=None, photo=msg.photo, video=msg.video, file=msg.document, adm_context=True)
|
||||
|
||||
except IndexError:
|
||||
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'")
|
||||
destination = HoloUser(int(msg.command[1]))
|
||||
except ValueError:
|
||||
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'")
|
||||
destination = HoloUser(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)
|
||||
elif ((msg.caption is not None) and (len(msg.caption.split()) > 2)):
|
||||
await destination.message(context=msg, text=msg.text, caption=" ".join(msg.caption.split()[2:]), photo=msg.photo, video=msg.video, file=msg.document, adm_context=True)
|
||||
else:
|
||||
await destination.message(context=msg, text=None, caption=None, photo=msg.photo, video=msg.video, file=msg.document, adm_context=True)
|
||||
|
||||
except IndexError:
|
||||
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'")
|
||||
except ValueError:
|
||||
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'")
|
||||
# ==============================================================================================================================
|
@ -1,13 +1,34 @@
|
||||
from app import app, isAnAdmin
|
||||
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
|
||||
from modules.utils import configGet, should_quote
|
||||
from modules.database import col_applications
|
||||
|
||||
# Nearby command ===============================================================================================================
|
||||
@app.on_message(~ filters.scheduled & (filters.private | (filters.chat(configGet("admin_group")) | filters.chat(configGet("destination_group")))) & filters.command(["nearby"], prefixes=["/"]))
|
||||
async def cmd_nearby(app, msg):
|
||||
if (await isAnAdmin(msg) is True) or (col_applications.find_one({"user": msg.from_user.id}) is not None):
|
||||
await msg.reply_text("Yes, I exist.", quote=should_quote(msg))
|
||||
@app.on_message(~ filters.scheduled & (custom_filters.allowed | custom_filters.admin) & (filters.private | (filters.chat(configGet("admin_group")) | filters.chat(configGet("destination_group")))) & filters.command(["nearby"], prefixes=["/"]))
|
||||
async def cmd_nearby(app: Client, msg: Message):
|
||||
|
||||
if len(msg.command) < 1:
|
||||
application = col_applications.find_one({"user": msg.from_user})
|
||||
if application is None:
|
||||
await msg.reply_text("You have no application")
|
||||
return
|
||||
location = application["application"]["3"]["loc"][0], application["application"]["3"]["loc"][1]
|
||||
else:
|
||||
# find location
|
||||
location = "result"
|
||||
|
||||
output = []
|
||||
users_nearby = col_applications.find( {"application": {"loc": { "$within": { "$center": [[location], 5] } }}} )
|
||||
|
||||
for user in users_nearby:
|
||||
output.append(user)
|
||||
|
||||
await msg.reply_text("Yes, I exist.", quote=should_quote(msg))
|
||||
|
||||
# if not path.exists(f"{configGet('data', 'locations')}{sep}sponsors{sep}{msg.from_user.id}.json"):
|
||||
# jsonSave(jsonLoad(f"{configGet('data', 'locations')}{sep}sponsor_default.json"), f"{configGet('data', 'locations')}{sep}sponsors{sep}{msg.from_user.id}.json")
|
||||
# sponsor = jsonLoad(f"{configGet('data', 'locations')}{sep}sponsors{sep}{msg.from_user.id}.json")
|
||||
|
@ -1,14 +1,15 @@
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, Message
|
||||
from pyrogram.client import Client
|
||||
from classes.holo_user import HoloUser
|
||||
from modules.utils import configGet, locale
|
||||
from modules.utils import configGet, locale, should_quote
|
||||
from modules.handlers.welcome import welcome_pass
|
||||
from modules.database import col_tmp
|
||||
|
||||
# Reapply command ==============================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.private & filters.command(["reapply"], prefixes=["/"]))
|
||||
async def cmd_reapply(app, msg):
|
||||
async def cmd_reapply(app: Client, msg: Message):
|
||||
|
||||
holo_user = HoloUser(msg.from_user)
|
||||
|
||||
@ -19,6 +20,9 @@ async def cmd_reapply(app, msg):
|
||||
if member.user.id == msg.from_user.id:
|
||||
left_chat = False
|
||||
if not left_chat:
|
||||
if holo_user.sponsorship_state()[0] == "fill":
|
||||
await msg.reply_text(locale("finish_sponsorship", "message"), quote=should_quote(msg))
|
||||
return
|
||||
holo_user.application_restart(reapply=True)
|
||||
await welcome_pass(app, msg, once_again=True)
|
||||
else:
|
||||
|
@ -1,19 +1,21 @@
|
||||
from app import app, isAnAdmin
|
||||
from app import app
|
||||
from os import getpid
|
||||
from sys import exit
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message
|
||||
from pyrogram.client import Client
|
||||
from modules.utils import locale, logWrite, should_quote
|
||||
from modules.scheduled import scheduler
|
||||
from modules import custom_filters
|
||||
|
||||
pid = getpid()
|
||||
|
||||
# Shutdown command =============================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.private & filters.command(["kill", "die", "reboot"], prefixes=["/"]))
|
||||
async def cmd_kill(app, msg):
|
||||
@app.on_message(~ filters.scheduled & custom_filters.admin & filters.private & filters.command(["kill", "die", "reboot"], prefixes=["/"]))
|
||||
async def cmd_kill(app: Client, msg: Message):
|
||||
|
||||
if await isAnAdmin(msg.from_user.id) is True:
|
||||
logWrite(f"Shutting down bot with pid {pid}")
|
||||
await msg.reply_text(locale("shutdown", "message", locale=msg.from_user).format(pid), quote=should_quote(msg))
|
||||
scheduler.shutdown()
|
||||
exit()
|
||||
logWrite(f"Shutting down bot with pid {pid}")
|
||||
await msg.reply_text(locale("shutdown", "message", locale=msg.from_user).format(pid), quote=should_quote(msg))
|
||||
scheduler.shutdown()
|
||||
exit()
|
||||
# ==============================================================================================================================
|
@ -1,7 +1,8 @@
|
||||
from typing import Union
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, User
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, User, Message
|
||||
from pyrogram.client import Client
|
||||
from modules.utils import locale
|
||||
from classes.holo_user import HoloUser
|
||||
|
||||
@ -35,6 +36,6 @@ class DefaultRulesMarkup(list):
|
||||
|
||||
# Rules command =============================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.private & filters.command(["rules"], prefixes=["/"]))
|
||||
async def cmd_rules(app, msg):
|
||||
async def cmd_rules(app: Client, msg: Message):
|
||||
await msg.reply_text(locale("rules_msg", locale=msg.from_user), disable_web_page_preview=True, reply_markup=DefaultRulesMarkup(msg.from_user).keyboard)
|
||||
# ==============================================================================================================================
|
@ -1,14 +1,19 @@
|
||||
from app import app, isAnAdmin
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
||||
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, Message
|
||||
from pyrogram.client import Client
|
||||
from classes.holo_user import HoloUser
|
||||
from modules import custom_filters
|
||||
from modules.utils import locale, should_quote
|
||||
from modules.database import col_applications
|
||||
|
||||
# Sponsorship command ==========================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.command(["sponsorship"], prefixes=["/"]))
|
||||
async def cmd_sponsorship(app, msg):
|
||||
if (await isAnAdmin(msg) is True) or (col_applications.find_one({"user": msg.from_user.id}) is not None):
|
||||
await msg.reply_text(locale("sponsorship_apply", "message"), reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text=str(locale("sponsor_apply", "button")), callback_data=f"sponsor_apply_{msg.from_user.id}")]]), quote=should_quote(msg))
|
||||
else:
|
||||
await msg.reply_text(locale("sponsorship_application_empty", "message"))
|
||||
@app.on_message(~ filters.scheduled & (custom_filters.allowed | custom_filters.admin) & filters.command(["sponsorship"], prefixes=["/"]))
|
||||
async def cmd_sponsorship(app: Client, msg: Message):
|
||||
if HoloUser(msg.from_user).application_state()[0] == "fill":
|
||||
await msg.reply_text(locale("finish_application", "message"), quote=should_quote(msg))
|
||||
return
|
||||
await msg.reply_text(locale("sponsorship_apply", "message"), reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text=str(locale("sponsor_apply", "button")), callback_data=f"sponsor_apply_{msg.from_user.id}")]]), quote=should_quote(msg))
|
||||
# else:
|
||||
# await msg.reply_text(locale("sponsorship_application_empty", "message"))
|
||||
# ==============================================================================================================================
|
@ -1,12 +1,13 @@
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import ReplyKeyboardMarkup
|
||||
from pyrogram.types import ReplyKeyboardMarkup, Message
|
||||
from pyrogram.client import Client
|
||||
from modules.utils import locale, logWrite
|
||||
from modules.database import col_users
|
||||
|
||||
# Start command ================================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.private & filters.command(["start"], prefixes=["/"]))
|
||||
async def cmd_start(app, msg):
|
||||
async def cmd_start(app: Client, msg: Message):
|
||||
|
||||
user = col_users.find_one({"user": msg.from_user.id})
|
||||
|
||||
|
@ -1,20 +1,22 @@
|
||||
from datetime import datetime
|
||||
from app import app, isAnAdmin
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message
|
||||
from pyrogram.client import Client
|
||||
from modules.utils import configGet, locale
|
||||
from modules.database import col_warnings
|
||||
from modules import custom_filters
|
||||
|
||||
# Warn command =================================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.command(["warn"], prefixes=["/"]))
|
||||
async def cmd_warn(app, msg):
|
||||
@app.on_message(~ filters.scheduled & custom_filters.admin & filters.command(["warn"], prefixes=["/"]))
|
||||
async def cmd_warn(app: Client, msg: Message):
|
||||
|
||||
if msg.chat.id == configGet("destination_group"):
|
||||
if msg.reply_to_message_id != None:
|
||||
if await isAnAdmin(msg.from_user.id) is True:
|
||||
message = " ".join(msg.command[1:]) if len(msg.command) > 1 else ""
|
||||
col_warnings.insert_one({"user": msg.reply_to_message.from_user.id, "admin": msg.from_user.id, "date": datetime.now(), "reason": message})
|
||||
if message == "":
|
||||
await msg.reply_text(locale("warned", "message").format(msg.reply_to_message.from_user.first_name, msg.reply_to_message.from_user.id))
|
||||
else:
|
||||
await msg.reply_text(locale("warned_reason", "message").format(msg.reply_to_message.from_user.first_name, msg.reply_to_message.from_user.id, message))
|
||||
message = " ".join(msg.command[1:]) if len(msg.command) > 1 else ""
|
||||
col_warnings.insert_one({"user": msg.reply_to_message.from_user.id, "admin": msg.from_user.id, "date": datetime.now(), "reason": message})
|
||||
if message == "":
|
||||
await msg.reply_text(locale("warned", "message").format(msg.reply_to_message.from_user.first_name, msg.reply_to_message.from_user.id))
|
||||
else:
|
||||
await msg.reply_text(locale("warned_reason", "message").format(msg.reply_to_message.from_user.first_name, msg.reply_to_message.from_user.id, message))
|
||||
# ==============================================================================================================================
|
@ -1,43 +1,44 @@
|
||||
from app import app, isAnAdmin
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message
|
||||
from pyrogram.client import Client
|
||||
from pyrogram.enums.chat_members_filter import ChatMembersFilter
|
||||
from modules.utils import configGet, locale, should_quote
|
||||
from modules.database import col_users, col_warnings
|
||||
from modules import custom_filters
|
||||
|
||||
# Warnings command =============================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.command(["warnings"], prefixes=["/"]))
|
||||
async def cmd_warnings(app, msg):
|
||||
@app.on_message(~ filters.scheduled & custom_filters.admin & filters.command(["warnings"], prefixes=["/"]))
|
||||
async def cmd_warnings(app: Client, msg: Message):
|
||||
|
||||
if await isAnAdmin(msg.from_user.id) is True:
|
||||
if len(msg.command) <= 1:
|
||||
await msg.reply_text(locale("syntax_warnings", "message", locale=msg.from_user), quote=should_quote(msg))
|
||||
return
|
||||
|
||||
if len(msg.command) <= 1:
|
||||
await msg.reply_text(locale("syntax_warnings", "message", locale=msg.from_user), quote=should_quote(msg))
|
||||
try:
|
||||
user_db = col_users.find_one({"user": int(msg.command[1])})
|
||||
target_id = user_db["user"]
|
||||
target_name = user_db["tg_name"]
|
||||
except:
|
||||
list_of_users = []
|
||||
async for m in app.get_chat_members(configGet("destination_group"), filter=ChatMembersFilter.SEARCH, query=msg.command[1]):
|
||||
list_of_users.append(m)
|
||||
|
||||
if len(list_of_users) != 0:
|
||||
target = list_of_users[0].user
|
||||
target_name = target.first_name
|
||||
target_id = str(target.id)
|
||||
else:
|
||||
await msg.reply_text(locale("no_user_warnings", "message", locale=msg.from_user).format(msg.command[1]))
|
||||
return
|
||||
|
||||
try:
|
||||
user_db = col_users.find_one({"user": int(msg.command[1])})
|
||||
target_id = user_db["user"]
|
||||
target_name = user_db["tg_name"]
|
||||
except:
|
||||
list_of_users = []
|
||||
async for m in app.get_chat_members(configGet("destination_group"), filter=ChatMembersFilter.SEARCH, query=msg.command[1]):
|
||||
list_of_users.append(m)
|
||||
warns = len(list(col_warnings.find({"user": target_id})))
|
||||
|
||||
if len(list_of_users) != 0:
|
||||
target = list_of_users[0].user
|
||||
target_name = target.first_name
|
||||
target_id = str(target.id)
|
||||
else:
|
||||
await msg.reply_text(locale("no_user_warnings", "message", locale=msg.from_user).format(msg.command[1]))
|
||||
return
|
||||
|
||||
warns = len(list(col_warnings.find({"user": target_id})))
|
||||
|
||||
if warns == 0:
|
||||
await msg.reply_text(locale("no_warnings", "message", locale=msg.from_user).format(target_name, target_id), quote=should_quote(msg))
|
||||
if warns == 0:
|
||||
await msg.reply_text(locale("no_warnings", "message", locale=msg.from_user).format(target_name, target_id), quote=should_quote(msg))
|
||||
else:
|
||||
if warns <= 5:
|
||||
await msg.reply_text(locale("warnings_1", "message", locale=msg.from_user).format(target_name, target_id, warns), quote=should_quote(msg))
|
||||
else:
|
||||
if warns <= 5:
|
||||
await msg.reply_text(locale("warnings_1", "message", locale=msg.from_user).format(target_name, target_id, warns), quote=should_quote(msg))
|
||||
else:
|
||||
await msg.reply_text(locale("warnings_2", "message", locale=msg.from_user).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))
|
||||
# ==============================================================================================================================
|
12
modules/custom_filters.py
Normal file
12
modules/custom_filters.py
Normal file
@ -0,0 +1,12 @@
|
||||
from app import isAnAdmin
|
||||
from modules.database import col_applications
|
||||
from pyrogram import filters
|
||||
|
||||
async def admin_func(_, __, msg):
|
||||
return await isAnAdmin(msg)
|
||||
|
||||
async def allowed_func(_, __, msg):
|
||||
return True if (col_applications.find_one({"user": msg.from_user.id}) is not None) else False
|
||||
|
||||
admin = filters.create(admin_func)
|
||||
allowed = filters.create(allowed_func)
|
@ -5,7 +5,8 @@ from dateutil.relativedelta import relativedelta
|
||||
from datetime import datetime
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import ReplyKeyboardRemove, InlineKeyboardMarkup, InlineKeyboardButton, ForceReply
|
||||
from pyrogram.types import ReplyKeyboardRemove, InlineKeyboardMarkup, InlineKeyboardButton, ForceReply, Message
|
||||
from pyrogram.client import Client
|
||||
from pyrogram.enums.parse_mode import ParseMode
|
||||
from classes.holo_user import HoloUser
|
||||
from modules.utils import all_locales, configGet, locale, logWrite
|
||||
@ -17,7 +18,7 @@ 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, kind: Literal["application", "sponsorship"] = "unknown"):
|
||||
async def confirm_yes(app: Client, msg: Message, kind: Literal["application", "sponsorship"] = "unknown"):
|
||||
|
||||
holo_user = HoloUser(msg.from_user)
|
||||
|
||||
@ -142,7 +143,7 @@ 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, kind: Literal["application", "sponsorship"] = "unknown"):
|
||||
async def confirm_no(app: Client, msg: Message, kind: Literal["application", "sponsorship"] = "unknown"):
|
||||
|
||||
holo_user = HoloUser(msg.from_user)
|
||||
|
||||
|
@ -1,53 +1,54 @@
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from datetime import datetime
|
||||
from app import app, isAnAdmin
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message
|
||||
from pyrogram.client import Client
|
||||
from modules.utils import locale, logWrite
|
||||
from modules.database import col_applications
|
||||
from classes.holo_user import HoloUser
|
||||
from modules import custom_filters
|
||||
|
||||
# Contact getting ==============================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.contact & filters.private)
|
||||
async def get_contact(app, msg):
|
||||
@app.on_message(~ filters.scheduled & (custom_filters.allowed | custom_filters.admin) & filters.contact & filters.private)
|
||||
async def get_contact(app: Client, msg: Message):
|
||||
|
||||
holo_user = HoloUser(msg.from_user)
|
||||
|
||||
if holo_user.application_approved() or (await isAnAdmin(holo_user.id) is True):
|
||||
if msg.contact.user_id != None:
|
||||
|
||||
if msg.contact.user_id != None:
|
||||
application = col_applications.find_one({"user": msg.contact.user_id})
|
||||
|
||||
application = col_applications.find_one({"user": msg.contact.user_id})
|
||||
if application is None:
|
||||
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", locale=holo_user.locale))
|
||||
return
|
||||
|
||||
if application is None:
|
||||
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", locale=holo_user.locale))
|
||||
return
|
||||
application_content = []
|
||||
i = 1
|
||||
|
||||
application_content = []
|
||||
i = 1
|
||||
for question in application['application']:
|
||||
|
||||
for question in application['application']:
|
||||
|
||||
if i == 2:
|
||||
age = relativedelta(datetime.now(), application['application']['2'])
|
||||
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:
|
||||
if application['application']['3']['countryCode'] == "UA":
|
||||
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=holo_user.locale)} {application['application']['3']['name']}")
|
||||
else:
|
||||
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']})")
|
||||
if i == 2:
|
||||
age = relativedelta(datetime.now(), application['application']['2'])
|
||||
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:
|
||||
if application['application']['3']['countryCode'] == "UA":
|
||||
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=holo_user.locale)} {application['application']['3']['name']}")
|
||||
else:
|
||||
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=holo_user.locale)} {application['application'][question]}")
|
||||
|
||||
i += 1
|
||||
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:
|
||||
application_content.append(f"{locale(f'question{i}', 'message', 'question_titles', locale=holo_user.locale)} {application['application'][question]}")
|
||||
|
||||
i += 1
|
||||
|
||||
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"))
|
||||
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}")
|
||||
await msg.reply_text(locale("contact", "message", locale=holo_user.locale).format(str(msg.contact.user_id), "\n".join(application_content), application_status))
|
||||
|
||||
logWrite(f"User {holo_user.id} requested application of {msg.contact.user_id}")
|
||||
await msg.reply_text(locale("contact", "message", locale=holo_user.locale).format(str(msg.contact.user_id), "\n".join(application_content), application_status))
|
||||
|
||||
|
||||
else:
|
||||
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", locale=holo_user.locale))
|
||||
else:
|
||||
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", locale=holo_user.locale))
|
||||
# ==============================================================================================================================
|
@ -2,6 +2,7 @@ from app import app, isAnAdmin
|
||||
import asyncio
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message
|
||||
from pyrogram.client import Client
|
||||
from classes.holo_user import HoloUser
|
||||
from modules.utils import configGet, logWrite
|
||||
from modules.database import col_messages
|
||||
@ -20,7 +21,7 @@ async def message_context(msg: Message) -> tuple:
|
||||
|
||||
# Any other input ==============================================================================================================
|
||||
@app.on_message(~ filters.scheduled & filters.private)
|
||||
async def any_stage(app, msg):
|
||||
async def any_stage(app: Client, msg: Message):
|
||||
|
||||
if msg.via_bot is None:
|
||||
|
||||
@ -113,7 +114,7 @@ async def any_stage(app, msg):
|
||||
# await msg.reply_text(locale("already_sent", "message"))
|
||||
|
||||
@app.on_message(~ filters.scheduled & filters.group)
|
||||
async def message_in_group(app, msg):
|
||||
async def message_in_group(app: Client, msg: Message):
|
||||
if (msg.chat is not None) and (msg.via_bot is not None):
|
||||
if (msg.via_bot.id == configGet("bot_id")) and (msg.chat.id == configGet("destination_group")):
|
||||
if configGet("remove_application_time") > 0:
|
||||
|
@ -1,5 +1,6 @@
|
||||
from app import app, isAnAdmin
|
||||
from pyrogram.types import ChatPermissions, InlineKeyboardMarkup, InlineKeyboardButton
|
||||
from pyrogram.types import ChatPermissions, InlineKeyboardMarkup, InlineKeyboardButton, ChatMemberUpdated
|
||||
from pyrogram.client import Client
|
||||
from modules.utils import configGet, locale
|
||||
from modules.logging import logWrite
|
||||
from classes.holo_user import HoloUser
|
||||
@ -7,7 +8,7 @@ from classes.holo_user import HoloUser
|
||||
# Filter users on join =========================================================================================================
|
||||
@app.on_chat_member_updated(group=configGet("destination_group"))
|
||||
#@app.on_message(filters.new_chat_members, group=configGet("destination_group"))
|
||||
async def filter_join(app, member):
|
||||
async def filter_join(app: Client, member: ChatMemberUpdated):
|
||||
|
||||
if member.invite_link != None:
|
||||
|
||||
|
@ -1,10 +1,12 @@
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message
|
||||
from pyrogram.client import Client
|
||||
|
||||
from classes.holo_user import HoloUser
|
||||
|
||||
@app.on_message(~ filters.scheduled & filters.photo & filters.private)
|
||||
async def sponsor_proof(app, msg):
|
||||
async def sponsor_proof(app: Client, msg: Message):
|
||||
|
||||
if msg.via_bot is None:
|
||||
|
||||
|
@ -1,10 +1,12 @@
|
||||
from random import choice
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message
|
||||
from pyrogram.client import Client
|
||||
from modules.logging import logWrite
|
||||
from modules.utils import configGet, locale
|
||||
|
||||
@app.on_message(~ filters.scheduled & filters.voice & filters.chat(configGet("destination_group")))
|
||||
async def voice_message(app, msg):
|
||||
async def voice_message(app: Client, msg: Message):
|
||||
logWrite(f"User {msg.from_user.id} sent voice message in destination group")
|
||||
await msg.reply_text(choice(locale("voice_message", "message")))
|
@ -1,6 +1,7 @@
|
||||
from app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import ForceReply, ReplyKeyboardMarkup
|
||||
from pyrogram.types import ForceReply, ReplyKeyboardMarkup, Message
|
||||
from pyrogram.client import Client
|
||||
from modules.utils import all_locales, locale, logWrite
|
||||
|
||||
# Welcome check ================================================================================================================
|
||||
@ -31,7 +32,7 @@ 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: Client, msg: Message):
|
||||
|
||||
logWrite(f"User {msg.from_user.id} rejected to start the application")
|
||||
await msg.reply_text(locale("goodbye", "message", locale=msg.from_user), reply_markup=ReplyKeyboardMarkup(locale("return", "keyboard", locale=msg.from_user), resize_keyboard=True))
|
||||
|
@ -1,7 +1,8 @@
|
||||
from datetime import datetime
|
||||
from os import path, sep
|
||||
from app import app, isAnAdmin
|
||||
from pyrogram.types import InlineQueryResultArticle, InputTextMessageContent
|
||||
from pyrogram.types import InlineQueryResultArticle, InputTextMessageContent, InlineQuery
|
||||
from pyrogram.client import Client
|
||||
from pyrogram.enums.chat_type import ChatType
|
||||
from pyrogram.enums.chat_members_filter import ChatMembersFilter
|
||||
from dateutil.relativedelta import relativedelta
|
||||
@ -10,7 +11,7 @@ from modules.utils import configGet, locale
|
||||
from modules.database import col_applications
|
||||
|
||||
@app.on_inline_query()
|
||||
async def inline_answer(client, inline_query):
|
||||
async def inline_answer(client: Client, inline_query: InlineQuery):
|
||||
|
||||
if inline_query.chat_type in [ChatType.CHANNEL]:
|
||||
await inline_query.answer(
|
||||
|
Reference in New Issue
Block a user