Ваша ситуация может быть связана с тем, что декораторы Aiogram регистрируют фильтры на момент инициализации бота. Если вы изменяете содержание `tb.posts` во время работы бота, эти изменения не отражаются на уже зарегистрированных фильтрах. Проблема здесь в том, что фильтры работают с данными, которые были на момент регистрации.
Чтобы обновить контекст фильтров в Aiogram, можно реализовать один из следующих подходов:
### 1. Использовать функцию для обновления фильтров
Вместо использования статического фильтра в декораторе, создайте свой собственный фильтр, который будет проверять текущее состояние `tb.posts` динамически. Например:
```python
from aiogram import filters
class DynamicPostFilter(filters.Filter):
async def check(self, message: types.Message):
return message.text in tb.posts
@router.message(DynamicPostFilter())
async def handle_post(message: types.Message):
# Ваш код обработки сообщения, соответствующего посту
```
С помощью этого подхода, каждый раз при обработке сообщения будет выполняться проверка наличия текста в `tb.posts`.
### 2. Динамическое обновление декораторов
Если вам нужно перерегистрировать обработчик после изменения списка постов, вы можете самостоятельно перерегистрировать фильтр:
```python
router.message(F.text.in_(tb.posts), StateFilter(None))(your_handler)
# После изменения списка постов
router.message(F.text.in_(tb.posts), StateFilter(None))(your_handler)
```
### 3. Создание отдельного хэндлера для переименования постов
Если функционал переименования постов может занимать много времени или затрагивать другие части кода, возможно, стоит создать отдельный обработчик, который будет обновлять состояние и очищать кэш, или же перезагружать нужные фильтры.
### 4. Использовать состояния
Если у вас есть возможность использовать состояния, вы можете временно хранить новое имя поста и затем выполнять проверку на этом уровне.
### Заключение
Выбор между этими подходами зависит от вашей архитектуры и структуры кода. Наиболее предпочтительным методом в вашем случае кажется использование динамического фильтра, так как это позволит избежать необходимости перерегистрировать обработчики каждый раз после изменения данных.