Не работает callback в inlineKeyboardMarkup из aiogram
Написал код для продажи доступа в приват в тг, но никак не могу заставить работать callback адекватно, помогите разобраться, пожалуйста
import logging
from aiogram import Bot, Dispatcher, types, executor
import config
from config import API_TOKEN
logging.basicConfig(level=logging.INFO)
bot = Bot(token=config.API_TOKEN)
dp = Dispatcher(bot)
#Каталог
mainkey = types.InlineKeyboardMarkup()
key = types.InlineKeyboardButton(text="Приват ", callback_data='vip')
mainkey.row(key)
#вернуться в каталог, покупка
startkey = types.InlineKeyboardMarkup()
back1 = types.InlineKeyboardButton(text="Вернуться назад", callback_data="back")
buy1 = types.InlineKeyboardButton(text="Приобрести доступ ?", callback_data="buy")
startkey.row(back1,buy1)
@dp.message_handler(commands=['start'])
async def starting(message:types.Message):
await bot.send_message(message.from_user.id, f"Приветствую тебя, {message.from_user.username}")
await bot.send_message(message.from_user.id, "Чтобы ознакомиться с тарифами, выбери необходимый, нажав на соотвествующую кнопку", reply_markup=mainkey)
@dp.callback_query_handler(lambda c: c.data == 'vip')
async callback(call: types.CallbackQuery):
await bot.edit_message_text("Приватка - это канал с частыми обновлениями и тд ",
chat_id=call.message.chat.id, message_id=call.message.message_id,
reply_markup="startkey")
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Ответы (1 шт):
Автор решения: Dystopia
→ Ссылка
import logging
from aiogram import Bot, Dispatcher, types, executor
logging.basicConfig(level=logging.INFO)
bot = Bot(token="Ваш токен")
dp = Dispatcher(bot)
# Каталог
mainkey = types.InlineKeyboardMarkup()
key = types.InlineKeyboardButton(text="Приват ", callback_data='vip')
mainkey.row(key)
# вернуться в каталог, покупка
startkey = types.InlineKeyboardMarkup()
back1 = types.InlineKeyboardButton(text="Вернуться назад", callback_data="back")
buy1 = types.InlineKeyboardButton(text="Приобрести доступ ?", callback_data="buy")
startkey.row(back1, buy1)
@dp.message_handler(commands=['start'])
async def starting(message: types.Message):
await message.answer(f"Приветствую тебя, {message.from_user.username}")
await message.answer("Чтобы ознакомиться с тарифами, выбери необходимый, нажав на соотвествующую кнопку",
reply_markup=mainkey)
@dp.callback_query_handler(lambda c: c.data == 'vip')
async def call_back(call: types.CallbackQuery):
await call.message.edit_text("Приватка - это канал с частыми обновлениями и тд ", reply_markup=startkey)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Во первых, вы в обработке инлайн-клавиатуры пропустили def. Во вторых, reply_markup="startkey" определяйте без кавычек. Отправку сообщений пользователем можете реализовать как в моем коде выше. В функции Вы определили call: types.CallbackQuery но для изменений сообщений Вы его не использовали.
Советую прочтите документацию, пройдите уроки по азам.