В библиотеке `aiogram` вы можете использовать метод `get_users` или `get_chat_member`, чтобы получить информацию о пользователе по его юзернейму. Однако, поскольку Telegram API не предоставляет прямого метода для получения `user_id` по юзернейму, вам нужно будет использовать метод `search_chat_members` или `get_chat_administrators` в случае, если ваш бот является администратором этого чата.
Обратите внимание, что поиск пользователей по юзернейму возможен только для пользователей, которые находятся в одной группе или канале, где находится ваш бот.
Вот пример того, как можно реализовать вашу функцию разблокировки пользователя по его юзернейму:
```python
from aiogram import types
from aiogram.dispatcher.filters import Command
from aiogram.utils.exceptions import TelegramBadRequest, Unauthorized
@group_actions_router.message(Command("aunban", prefix="/!"))
async def cmd_unban(message: types.Message):
if not message.reply_to_message:
msg = message.text.split()
if len(msg) < 2:
await message.reply("Укажите юзернейм пользователя для разблокировки.")
return
username = msg[1].lstrip('@') # Убираем '@' перед ником, если он есть
# Получаем список участников чата
try:
members = await message.chat.get_members_count() # Получаем общее кол-во участников
async for member in message.chat.iter_members(): # Итерация по участникам
if member.user.username == username:
user_id = member.user.id
break
else:
await message.reply("Пользователь не найден в чате.")
return
except Exception as e:
await message.reply(f"Ошибка при получении участников: {str(e)}")
return
else:
user_id = message.reply_to_message.from_user.id
if user_id == message.from_user.id:
await message.reply("Вы не можете разбанить самого себя")
return
try:
await message.bot.unban_chat_member(chat_id=message.chat.id, user_id=user_id, only_if_banned=True)
await message.reply(f"✔️ Пользователь <b>{username}</b> разбанен", parse_mode='HTML')
print(f"[INFO] {message.from_user.id} разбанил {user_id}")
except TelegramBadRequest:
await message.reply("Ошибка при разблокировке пользователя.")
except Unauthorized:
await message.reply("У бота нет прав для разблокировки пользователя.")
```
Здесь мы используем метод `message.chat.iter_members()`, чтобы пройтись по всем членам чата и найти того, у кого совпадает никнейм.
Учтите, что этот код может занять некоторое время при большом количестве участников, но он работает без сторонних библиотек.