Untitled
unknown
plain_text
a year ago
4.4 kB
4
Indexable
from aiogram import Router, types from aiogram.filters import Command from aiogram.exceptions import TelegramAPIError from utils.misc import delete_messages, format_mute_time, prefix, parse_time, parse_command_arguments from utils.decorators import bot_permissions_required, cannot_manage_bot, admin_owner_only, not_admin_owner_target from data.locales.localization import get_string from filters import GroupChatFilter router = Router() async def ban_user(message: types.Message, user_id: int, user_full_name: str, duration: str = None, reason: str = None, silent: bool = False): user_link = f'<a href="tg://user?id={user_id}"><b>{user_full_name}</b></a>' id = f"[<code>{user_id}</code>]" if duration: parsed_time = parse_time(duration) if parsed_time: readable_time = format_mute_time(duration) ban_key = "temporary_ban" locale_kwargs = {"user_link": user_link, "user_id": id, "readable_time": readable_time} await message.chat.ban(user_id=user_id, until_date=parsed_time) else: ban_key = "ban_forever" locale_kwargs = {"user_link": user_link, "user_id": id} await message.chat.ban(user_id=user_id) locale = get_string(ban_key, "resolved.bans", **locale_kwargs) if reason: reason_str = get_string("with_reason", "resolved.bans", reason=reason) locale += reason_str response_message = await message.answer(locale) if silent: await delete_messages(message, response_message) async def handle_ban_command(message: types.Message, silent: bool): arguments = parse_command_arguments(message.text) if message.reply_to_message: user = message.reply_to_message.from_user user_id = user.id user_full_name = user.full_name if len(arguments) > 1: parsed_time = parse_time(arguments[1]) if parsed_time: duration = arguments[1] reason = ' '.join(arguments[2:]) if len(arguments) > 2 else None else: duration = None reason = ' '.join(arguments[1:]) else: duration = None reason = None await ban_user(message, user_id, user_full_name, duration, reason, silent) else: if len(arguments) < 2: locale = get_string("missing_target_user", "errors.bans") response_message = await message.answer(locale) if silent: await delete_messages(message, response_message) return if not arguments[1].isdigit(): locale = get_string("invalid_user_id_format", "errors") response_message = await message.answer(locale) if silent: await delete_messages(message, response_message) return user_id = int(arguments[1]) try: user = await message.bot.get_chat(user_id) user_full_name = user.full_name except TelegramAPIError: locale = get_string("user_not_found", "errors") response_message = await message.answer(locale) if silent: await delete_messages(message, response_message) return if len(arguments) > 2: parsed_time = parse_time(arguments[2]) if parsed_time: duration = arguments[2] reason = ' '.join(arguments[3:]) if len(arguments) > 3 else None else: duration = None reason = ' '.join(arguments[2:]) else: duration = None reason = None await ban_user(message, user_id, user_full_name, duration, reason, silent) @router.message(GroupChatFilter(), Command("ban", prefix=prefix)) @admin_owner_only @bot_permissions_required @cannot_manage_bot @not_admin_owner_target async def ban_handler(message: types.Message): await handle_ban_command(message, silent=False) @router.message(GroupChatFilter(), Command("sban", prefix=prefix)) @admin_owner_only @bot_permissions_required @cannot_manage_bot @not_admin_owner_target async def sban_handler(message: types.Message): await handle_ban_command(message, silent=True)
Editor is loading...
Leave a Comment