flameyolo
@flameyolo

Как сделать вайтлист для телеграм бота на python aiogram?

Требуется сделать вайтлист для пользователей моего телеграм бота, чтобы без моего добавления юзера в разрешенный список бот отвечал ему, что он не находится в вайтлисте.

whitelist = []

@dp.message_handler(func=lambda message: message.chat.id not in whitelist)
def checker(message):
   bot.send_message(message.chat.id, "Вы не находитесь в Whitelist!")


Пытался что-то сделать на коленке, ничего не работает, выдает ошибку на моменте запуска бота.
  • Вопрос задан
  • 1253 просмотра
Решения вопроса 1
lxstvayne
@lxstvayne
Люблю Python
Во-первых декорированная функция должна быть помечена как async. Во-вторых aiogram это асинхронная библиотека, значит все её сетевые функции должны быть await . Код работает, если всё это исправить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
lunat1k1
@lunat1k1
Начинающий разработчик Python
Для этого лучше создать бд, с колонной username(это будет message.from_user.username), и создать декоратор на команду какую ты захочешь(пример: /add).И чтобы добавить человека в Вайт лист нужно добавить его в бд.Ты делаешь переменную допустим user_add_in_db присваиваешь и в функции, где декоратор делаешь срез [4:] когда ты вводишь в боте /add {юзернейм чела}, ты добавляешь его в бд. И при отправке человеком команды, делаешь проверку если есть в бд то он в Вайт листе иначе его нет там. Если что-то непонятно, отпиши.
Ответ написан
Dee3
@Dee3
Вариант получше
from aiogram import types
from aiogram.dispatcher.middlewares import BaseMiddleware

class AccessMiddleware(BaseMiddleware):
    def __init__(self, allowed_users):
        super().__init__()
        self.allowed_users = allowed_users

    async def on_process_message(self, message: types.Message, data: dict):
        user_id = message.from_user.id
        if user_id not in self.allowed_users:
            await message.answer("У вас нет доступа к этому боту.")
            raise CancelHandler()  # Остановка дальнейшей обработки

# Добавьте это в bot.py
allowed_users = [123456789, 987654321]  # Замените на ваш список разрешённых ID
dp.middleware.setup(AccessMiddleware(allowed_users))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы