Для установки двух фильтров одновременно в aiogram можно использовать комбинатор фильтров `Filters`. Вот пример кода:
```python
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters import Filters
bot_token = "YOUR_BOT_TOKEN"
bot = Bot(token=bot_token)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
# Определим два фильтра
filter1 = Filters.Regexp("pattern1")
filter2 = Filters.Regexp("pattern2")
@dp.callback_query_handler(filter1 & filter2)
async def callback_handler(callback_query: types.CallbackQuery):
# Обработка события
if __name__ == "__main__":
import asyncio
loop = asyncio.get_event_loop()
loop.create_task(dp.start_polling())
loop.run_forever()
```
В этом примере мы создаем два фильтра `filter1` и `filter2`, используя `Filters.Regexp`, чтобы фильтровать callback queries. Затем мы объединяем эти два фильтра с помощью оператора `&` (логическое И). Затем мы регистрируем хэндлер с помощью декоратора `dp.callback_query_handler` и передаем объединенный фильтр как аргумент.
Чтобы избежать логической ошибки при использовании `dp.callback_query.register`, вы можете указать поле `state` вместо логического значения `Filters`, чтобы фильтровать callback queries на основе состояния. Вот пример кода:
```python
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
bot_token = "YOUR_BOT_TOKEN"
bot = Bot(token=bot_token)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
class MyStates:
STATE1 = "state1"
STATE2 = "state2"
@dp.callback_query_handler(state=MyStates.STATE1)
async def callback_handler1(callback_query: types.CallbackQuery, state: FSMContext):
# Обработка события
@dp.callback_query_handler(state=MyStates.STATE2)
async def callback_handler2(callback_query: types.CallbackQuery, state: FSMContext):
# Обработка события
if __name__ == "__main__":
import asyncio
loop = asyncio.get_event_loop()
loop.create_task(dp.start_polling())
loop.run_forever()
```
В этом примере мы определили два состояния `MyStates.STATE1` и `MyStates.STATE2`. Затем мы зарегистрировали два хэндлера с помощью `dp.callback_query_handler` и указали необходимое состояние для каждого хэндлера. Это позволит нам использовать состояние вместо логических значений для фильтрации callback queries.