Как добавить функцию бана пользователя в Telegram бота?
Как добавить функцию бана юзера по id в Telegram бота?
Т.е чтобы я мог ввести /ban {userid} и этот юзер больше не мог писать боту.
aiogram
Ответы (2 шт):
Автор решения: Alexandr Kiselev
→ Ссылка
Как вариант добавить хендлер для /ban, который будет реагировать только на твой id (как админа), и добавить хендлер первым в очереди, который будет отлавливать заблокированных пользователей.
Я знаю два возможных варианта.
Приведу наиболее простой.
Я предполагаю, что ты используешь БД для хранения id пользователей
Добавить функцию, которая достает всех забаненных пользователей и хендлер, который будет сопоставлять id пользователя, совершившего действие и id, которые лежат в забаненных, можно такой:
@dp.message_handler(content_types=ContentType.TEXT)
async def check_ban(message: types.Message):
ban_ids = # ban_ids - Забаненные пользователи, в моем случае список
if message.from_user.id in ban_ids:
pass # Тут любое действие при совпадении
Автор решения: Oleg
→ Ссылка
- Создай хранилище нарушителей. Для примера буду использовать обычный сет.
banned_users = set()
- Создай хэндлер для нарушителей
@dp.message_handler(user_id=banned_users)
async def handle_banned(msg: Message):
print(f"{msg.from_user.full_name} пишет, но мы ему не ответим!")
return True
- Создай хэндлер для нормальных пользователей
@dp.message_handler()
async def handle_all(msg: Message):
await msg.reply(f"Добрый день, {msg.from_user.full_name} :)")
- Создай хэндлер для блокировки
@dp.message_handler(commands=['ban'], user_id=12312312312312) # здесь укажи свой ID
async def handle_ban_command(msg: Message):
# проверяем, что ID передан правильно
try:
abuser_id = int(msg.get_args())
except (ValueError, TypeError):
return await msg.reply("Укажи ID пользователя.")
banned_users.add(abuser_id)
await msg.reply(f"Пользователь {abuser_id} заблокирован.")
- Не забудь соблюдать правильный порядок хэндлеров, т.к. если поменять пп. 2 и 3, то работать код не будет.
Итого
...
banned_users = set()
@dp.message_handler(user_id=banned_users)
async def handle_banned(msg: Message):
print(f"{msg.from_user.full_name} пишет, но мы ему не ответим!")
return True
@dp.message_handler()
async def handle_all(msg: Message):
await msg.reply(f"Добрый день, {msg.from_user.full_name} :)")
@dp.message_handler(commands=['ban'], user_id=12312312312312) # здесь укажи свой ID
async def handle_ban_command(msg: Message):
# проверяем, что ID передан правильно
try:
abuser_id = int(msg.get_args())
except (ValueError, TypeError):
return await msg.reply("Укажи ID пользователя.")
banned_users.add(abuser_id)
await msg.reply(f"Пользователь {abuser_id} заблокирован.")