@Alexandr_Golubkin

Aiogram 3 бот не реагирует на изменение условий фильтрации. В чем может быть проблема?

Пишу бота: Python 3.9, Aiogram 3.4.1. Тестирую и планирую запускать в окружении docker compose. (Кастомный python image и базовый mysql:latest)
В боте подразумевается 3 уровня доступа: админ, кастомер и юзер. Я написал фильтры для кастомера и для админа, а запросы от юзеров обрабатываются без фильтра.
Юзер может зарегистрироваться и стать кастомером: для этого я вношу тг id в базу данных mysql. Из админки видно сразу что есть новая запись в таблице. Но когда я отправляю команду /start (после удачного прохождения регистрации) бот все еще видит меня как юзера, а должен как кастомера. Но если я останавливаю docker-compose, потом делаю docker-compose up --build, то бот уже видит меня как кастомера.

Логи после docker-compose up --build
bot            | 2024-03-21 04:12:32.750 | INFO     | utils.db_utils:get_customers_id_list:71 - get_customers_id_list: [<my_tg_id>]
bot            | 2024-03-21 04:12:32.755 | INFO     | utils.db_utils:get_customers_id_list:71 - get_customers_id_list: [<my_tg_id>]
bot            | 2024-03-21 04:12:32.756 | INFO     | utils.db_utils:get_customers_id_list:71 - get_customers_id_list: [<my_tg_id>]
bot            | 2024-03-21 04:12:32.757 | INFO     | utils.db_utils:get_customers_id_list:71 - get_customers_id_list: [<my_tg_id>]
bot            | 2024-03-21 04:12:32.758 | INFO     | utils.db_utils:get_customers_id_list:71 - get_customers_id_list: [<my_tg_id>]
bot            | 2024-03-21 04:12:32.759 | INFO     | utils.db_utils:get_customers_id_list:71 - get_customers_id_list: [<my_tg_id>]
bot            | 2024-03-21 04:12:32.760 | INFO     | utils.db_utils:get_customers_id_list:71 - get_customers_id_list: [<my_tg_id>]


вот именно в таком количестве он сразу при старте выдает логи но при этом каких-то сообщений в чат не приходит.

class IsCustomer(Filter):
    def __init__(self) -> None:
        # get_customers_id_list() - возвращает список с интами: list[int]
        self.customers = get_customers_id_list()

    async def __call__(self, message: Union[Message, CallbackQuery]) -> bool:
        return message.from_user.id in self.customers


Пример функции с фильтром:
@customers.message(IsCustomer(), F.text == run)
async def get_items_processing(message: Message, state: FSMContext):
    await state.set_state(TaskReservation.choose_item)
    ....


Что можно сделать чтобы бот сразу видел что теперь зарегистрированный айдишник это кастомер?
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Everything_is_bad
ну так разберись когда отрабатывает __init__ и когда у тебя появляется юзер
Ответ написан
@Alexandr_Golubkin Автор вопроса
Перенести вызов функции со списком id из бд в фильтре в блока из __init__ в __call__
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы