Improved locales, added /language
This commit is contained in:
@@ -4,22 +4,30 @@ from pyrogram import filters
|
||||
from pyrogram.enums.chat_member_status import ChatMemberStatus
|
||||
from pyrogram.types import CallbackQuery, Message
|
||||
|
||||
from classes.callbacks import CallbackBan
|
||||
from classes.pyroclient import PyroClient
|
||||
from classes.pyrogroup import PyroGroup
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@PyroClient.on_callback_query(filters.regex(r"ban;[\s\S]*"))
|
||||
async def callback_ban(app: PyroClient, callback: CallbackQuery):
|
||||
if (
|
||||
await app.get_chat_member(callback.message.chat.id, callback.from_user.id)
|
||||
).status not in [ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER]:
|
||||
await callback.answer(app._("wrong_user", "callbacks"), show_alert=True)
|
||||
group = await PyroGroup.create_if_not_exists(callback.message.chat.id, None, True)
|
||||
locale = group.select_locale(app, callback.message.from_user)
|
||||
|
||||
if (await app.get_chat_member(group.id, callback.from_user.id)).status not in [
|
||||
ChatMemberStatus.ADMINISTRATOR,
|
||||
ChatMemberStatus.OWNER,
|
||||
]:
|
||||
await callback.answer(
|
||||
app._("wrong_user", "callbacks", locale=locale), show_alert=True
|
||||
)
|
||||
return
|
||||
|
||||
user = await app.find_user(
|
||||
int(str(callback.data).split(";")[1]), callback.message.chat.id
|
||||
)
|
||||
parsed = CallbackBan.from_callback(callback)
|
||||
|
||||
user = await app.find_user(parsed.user_id, group.id)
|
||||
|
||||
logger.info(
|
||||
"User %s has been marked as failed the captcha by %s",
|
||||
@@ -27,14 +35,16 @@ async def callback_ban(app: PyroClient, callback: CallbackQuery):
|
||||
callback.from_user.id,
|
||||
)
|
||||
|
||||
user.set_mistakes(3)
|
||||
user.set_failed(True)
|
||||
await user.set_mistakes(3)
|
||||
await user.set_failed(True)
|
||||
await callback.answer(
|
||||
app._("captcha_failed_force", "callbacks").format(user_id=user.id),
|
||||
app._("captcha_failed_force", "callbacks", locale=locale).format(
|
||||
user_id=user.id
|
||||
),
|
||||
show_alert=True,
|
||||
)
|
||||
|
||||
banned = await app.ban_chat_member(callback.message.chat.id, user.id)
|
||||
banned = await app.ban_chat_member(group.id, user.id)
|
||||
|
||||
if isinstance(banned, Message):
|
||||
await banned.delete()
|
||||
|
@@ -9,52 +9,58 @@ from pyrogram.types import (
|
||||
Message,
|
||||
)
|
||||
|
||||
from classes.callbacks import CallbackEmoji
|
||||
from classes.pyroclient import PyroClient
|
||||
from classes.pyrogroup import PyroGroup
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@PyroClient.on_callback_query(filters.regex(r"emoji;[\s\S]*"))
|
||||
async def callback_emoji_button(app: PyroClient, callback: CallbackQuery):
|
||||
user_id = int(str(callback.data).split(";")[1])
|
||||
emoji = str(callback.data).split(";")[2]
|
||||
parsed = CallbackEmoji.from_callback(callback)
|
||||
group = await PyroGroup.create_if_not_exists(callback.message.chat.id, None, True)
|
||||
locale = group.select_locale(app, callback.message.from_user)
|
||||
|
||||
if callback.from_user.id != user_id:
|
||||
await callback.answer(app._("wrong_user", "callbacks"), show_alert=True)
|
||||
if callback.from_user.id != parsed.user_id:
|
||||
await callback.answer(
|
||||
app._("wrong_user", "callbacks", locale=locale), show_alert=True
|
||||
)
|
||||
return
|
||||
|
||||
user = await app.find_user(callback.from_user, callback.message.chat.id)
|
||||
user = await app.find_user(callback.from_user, group.id)
|
||||
|
||||
logger.debug(
|
||||
"User %s has pressed the %s emoji '%s'",
|
||||
user.id,
|
||||
"correct" if emoji in user.emojis else "wrong",
|
||||
emoji,
|
||||
"correct" if parsed.emoji in user.emojis else "wrong",
|
||||
parsed.emoji,
|
||||
)
|
||||
|
||||
if emoji in user.selected:
|
||||
if parsed.emoji in user.selected:
|
||||
await callback.answer()
|
||||
return
|
||||
|
||||
user.update_selected(emoji)
|
||||
await user.update_selected(parsed.emoji)
|
||||
|
||||
if emoji in user.emojis:
|
||||
user.update_score(1)
|
||||
if parsed.emoji in user.emojis:
|
||||
await user.update_score(1)
|
||||
|
||||
if user.score >= 5:
|
||||
logger.info("User %s has passed the captcha", user.id)
|
||||
|
||||
await callback.message.delete()
|
||||
await callback.answer(app._("captcha_passed", "callbacks"), show_alert=True)
|
||||
await callback.answer(
|
||||
app._("captcha_passed", "callbacks", locale=locale), show_alert=True
|
||||
)
|
||||
await app.send_message(
|
||||
callback.message.chat.id,
|
||||
app._(
|
||||
"welcome",
|
||||
"messages",
|
||||
).format(mention=callback.from_user.mention),
|
||||
group.id,
|
||||
app._("welcome", "messages", locale=locale).format(
|
||||
mention=callback.from_user.mention
|
||||
),
|
||||
)
|
||||
await app.restrict_chat_member(
|
||||
chat_id=callback.message.chat.id,
|
||||
chat_id=group.id,
|
||||
user_id=callback.from_user.id,
|
||||
permissions=ChatPermissions(can_send_messages=True),
|
||||
)
|
||||
@@ -71,20 +77,20 @@ async def callback_emoji_button(app: PyroClient, callback: CallbackQuery):
|
||||
if user.mistakes >= 2:
|
||||
logger.info("User %s has failed the captcha", user.id)
|
||||
|
||||
user.set_failed(True)
|
||||
await callback.answer(app._("captcha_failed", "callbacks"), show_alert=True)
|
||||
|
||||
banned = await app.ban_chat_member(
|
||||
callback.message.chat.id, callback.from_user.id
|
||||
await user.set_failed(True)
|
||||
await callback.answer(
|
||||
app._("captcha_failed", "callbacks", locale=locale), show_alert=True
|
||||
)
|
||||
|
||||
banned = await app.ban_chat_member(group.id, callback.from_user.id)
|
||||
|
||||
if isinstance(banned, Message):
|
||||
await banned.delete()
|
||||
|
||||
await callback.message.delete()
|
||||
return
|
||||
|
||||
user.update_mistakes(1)
|
||||
await user.update_mistakes(1)
|
||||
logger.info(
|
||||
"User %s has made a mistake and has %s attempt(s) left",
|
||||
user.id,
|
||||
@@ -92,7 +98,9 @@ async def callback_emoji_button(app: PyroClient, callback: CallbackQuery):
|
||||
)
|
||||
|
||||
await callback.answer(
|
||||
app._("captcha_mistake", "callbacks").format(remaining=2 - user.mistakes),
|
||||
app._("captcha_mistake", "callbacks", locale=locale).format(
|
||||
remaining=2 - user.mistakes
|
||||
),
|
||||
show_alert=True,
|
||||
)
|
||||
|
||||
@@ -102,7 +110,7 @@ async def callback_emoji_button(app: PyroClient, callback: CallbackQuery):
|
||||
|
||||
for row_index, row in enumerate(callback.message.reply_markup.inline_keyboard):
|
||||
for button_index, button in enumerate(row):
|
||||
if button.text == emoji:
|
||||
if button.text == parsed.emoji:
|
||||
button_replace = (row_index, button_index)
|
||||
|
||||
new_keyboard = callback.message.reply_markup.inline_keyboard
|
||||
|
@@ -2,8 +2,12 @@ from pyrogram import filters
|
||||
from pyrogram.types import CallbackQuery
|
||||
|
||||
from classes.pyroclient import PyroClient
|
||||
from classes.pyrogroup import PyroGroup
|
||||
|
||||
|
||||
@PyroClient.on_callback_query(filters.regex(r"nothing"))
|
||||
async def callback_nothing(app: PyroClient, callback: CallbackQuery):
|
||||
await callback.answer(app._("nothing", "callbacks"))
|
||||
group = await PyroGroup.create_if_not_exists(callback.message.chat.id, None, True)
|
||||
locale = group.select_locale(app, callback.message.from_user)
|
||||
|
||||
await callback.answer(app._("nothing", "callbacks", locale=locale))
|
||||
|
@@ -7,7 +7,9 @@ from pykeyboard import InlineButton, InlineKeyboard
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import CallbackQuery
|
||||
|
||||
from classes.callbacks import CallbackVerify
|
||||
from classes.pyroclient import PyroClient
|
||||
from classes.pyrogroup import PyroGroup
|
||||
from modules.database import col_schedule
|
||||
from modules.kicker import kick_unverified
|
||||
from modules.utils import get_captcha_image
|
||||
@@ -17,13 +19,17 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
@PyroClient.on_callback_query(filters.regex(r"verify;[\s\S]*"))
|
||||
async def callback_verify(app: PyroClient, callback: CallbackQuery):
|
||||
user_id = int(str(callback.data).split(";")[1])
|
||||
parsed = CallbackVerify.from_callback(callback)
|
||||
group = await PyroGroup.create_if_not_exists(callback.message.chat.id, None, True)
|
||||
locale = group.select_locale(app, callback.message.from_user)
|
||||
|
||||
if callback.from_user.id != user_id:
|
||||
await callback.answer(app._("wrong_user", "callbacks"), show_alert=True)
|
||||
if callback.from_user.id != parsed.user_id:
|
||||
await callback.answer(
|
||||
app._("wrong_user", "callbacks", locale=locale), show_alert=True
|
||||
)
|
||||
return
|
||||
|
||||
user = await app.find_user(callback.from_user, callback.message.chat.id)
|
||||
user = await app.find_user(callback.from_user, group.id)
|
||||
captcha = get_captcha_image(app.config["emojis"])
|
||||
|
||||
logger.info(
|
||||
@@ -33,15 +39,15 @@ async def callback_verify(app: PyroClient, callback: CallbackQuery):
|
||||
captcha.emojis_correct,
|
||||
)
|
||||
|
||||
scheduled_job = col_schedule.find_one_and_delete(
|
||||
{"user": user_id, "group": callback.message.chat.id}
|
||||
scheduled_job = await col_schedule.find_one_and_delete(
|
||||
{"user": parsed.user_id, "group": group.id}
|
||||
)
|
||||
|
||||
if scheduled_job is not None and app.scheduler is not None:
|
||||
with contextlib.suppress(JobLookupError):
|
||||
app.scheduler.remove_job(scheduled_job["job_id"])
|
||||
|
||||
user.set_emojis(captcha.emojis_correct)
|
||||
await user.set_emojis(captcha.emojis_correct)
|
||||
|
||||
buttons = [
|
||||
InlineButton(emoji, f"emoji;{user.id};{emoji}") for emoji in captcha.emojis_all
|
||||
@@ -53,9 +59,9 @@ async def callback_verify(app: PyroClient, callback: CallbackQuery):
|
||||
await callback.message.delete()
|
||||
|
||||
captcha_message = await app.send_photo(
|
||||
callback.message.chat.id,
|
||||
group.id,
|
||||
captcha.image,
|
||||
caption=app._("verify", "messages"),
|
||||
caption=app._("verify", "messages", locale=locale),
|
||||
reply_markup=keyboard,
|
||||
)
|
||||
|
||||
@@ -65,7 +71,7 @@ async def callback_verify(app: PyroClient, callback: CallbackQuery):
|
||||
app.scheduler.add_job(
|
||||
kick_unverified,
|
||||
"date",
|
||||
[app, user.id, callback.message.chat.id, captcha_message.id],
|
||||
[app, user.id, group.id, captcha_message.id],
|
||||
run_date=datetime.now()
|
||||
+ timedelta(seconds=app.config["timeouts"]["verify"]),
|
||||
)
|
||||
|
Reference in New Issue
Block a user