Пишу бота: 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)
....
Что можно сделать чтобы бот сразу видел что теперь зарегистрированный айдишник это кастомер?