Untitled
unknown
plain_text
a year ago
4.4 kB
7
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