Для создания обработчика для динамически изменяющихся кнопок в aiogram, можно воспользоваться использованием InlineKeyboardMarkup и InlineKeyboardButton. Например, можно создать функцию, которая будет генерировать кнопки на основе полученных данных:
```python
from aiogram import types
async def generate_buttons(selsovets):
keyboard = types.InlineKeyboardMarkup()
for selsovet in selsovets:
button = types.InlineKeyboardButton(text=selsovet, callback_data=f"selsovet_{selsovet}")
keyboard.add(button)
return keyboard
```
Далее, можно использовать эту функцию в обработчике сообщения, чтобы отправить пользователю кнопки выбора сельсовета:
```python
from aiogram import Bot, Dispatcher, types
from aiogram.types import Message
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.utils import executor
bot = Bot(token='TOKEN')
dp = Dispatcher(bot)
dp.middleware.setup(LoggingMiddleware())
# Отправка сообщения с кнопками выбора сельсовета
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
selsovets = ['Сельсовет 1', 'Сельсовет 2', 'Сельсовет 3']
keyboard = await generate_buttons(selsovets)
await message.answer('Выберите сельсовет:', reply_markup=keyboard)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
```
Таким образом, можно избежать дублирования одной и той же функции для каждого сельсовета, и создать обработчик, который будет генерировать кнопки на основе переданных данных.