Проблема с циклом в телеграм-боте на aiogram
По команде "Лиги" должен появиться список из лиг, которые хранятся в "leagues". Но я так понимаю что совершил какую-то простую ошибку, поэтому ничего и не работает.
import aiogram
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
TOKEN = "мой токен"
bot = Bot(TOKEN)
dp = Dispatcher(bot)
leagues = ["Премьер-лига", "Бундеслига", "Чемпионшип"]
for league in leagues:
urlkb = InlineKeyboardMarkup(row_width=1)
urlbut = InlineKeyboardButton(league)
urlkb.add(urlbut)
@dp.message_handler(commands=["Лиги"])
async def process_leagues(message: types.Message):
await message.answer("Лиги:", reply_markup=urlkb)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Ответы (1 шт):
Автор решения: oleksandrigo
→ Ссылка
Пробуй
@dp.message_handler(commands=["Лиги"])
async def process_leagues(message: types.Message):
leagues = [("Премьер-лига", "premier_league"), ("Бундеслига", "bundesliga"), ("Чемпионшип", "championship")]
markup = InlineKeyboardMarkup(row_width=1)
for league, league_cd in leagues:
# для инлайн кнопок нужно два параметра это text(позиционный) и callback_data
# ловишь нажатие по callback_data
# если ты ловиш их группой и думаешь обрабатывать в одном хендлере, то добавь префикс
markup.add(InlineKeyboardButton(league, callback_data="prefix:league_cd"))
await message.answer("Лиги", reply_markup=markup)
@dp.callback_query_handler(text_startswith="prefix")
async def call_leagues(call: types.CallbackQuery):
# это будет premier_league, bundesliga или championship
data = call.data.split(":")[1]
...