У меня проблема, если поможете решить, буду благодарен.
Пишу бота для тг, ему нужна инлайн клава, пайчарм выдаёт ошибку на строчки : markup.add(item1, item2, item3, item4)
@bot.callback_query_handlers(func = lambda call: True ) пишет 'list' object is not callable, в чём проблема не знаю, ещё раз спасибо если поможете
вот весь код: import telebot
import config
from telebot import types
bot = telebot.TeleBot(config.Token)
@bot.message_handler(commands=['start'])
def wel(message):
bot.send_message(message.chat.id, "Добро пожаловать, {0.first_name}!\nКакой тип подписки желаете приобрести?".format(message.from_user, bot.get_me() ),
parse_mode='html', reply_markup= markup)
#keyboerd
markup = types.InlineKeyboardMarkup(row_width=4)
item1 = types.InlineKeyboardMarkup("3 месяца - 299 руб", callback_data = '1'
item2 = types.InlineKeyboardMarkup("6 месяцев - 499 руб", callback_data = '2'
item3 = types.InlineKeyboardMarkup("12 месяцев - 899 руб", callback_data = '3'
Точно не скажу, пишу с другой библиотекой, но InlineKeyboardMarkup это вроде как указывает на создание клавиатуры и там уже ее характеристики, в переменных item1, item2, item3, item3 у тебя должно быть InlineKeyboardButton
Я вижу несколько проблем в вашем коде. Давайте их исправим:
1. Вы создаете `markup` после того, как пытаетесь его использовать в `bot.send_message()`
2. Используете `InlineKeyboardMarkup` вместо `InlineKeyboardButton` для создания кнопок
3. Есть опечатка в названии декоратора (`callback_query_handlers` вместо `callback_query_handler`)
Вот исправленный код:
import telebot
import config
from telebot import types
bot = telebot.TeleBot(config.Token)
@bot.message_handler(commands=['start'])
def wel(message):
# Создаем клавиатуру до использования
markup = types.InlineKeyboardMarkup(row_width=4)
# Создаем кнопки используя InlineKeyboardButton вместо InlineKeyboardMarkup
item1 = types.InlineKeyboardButton("3 месяца - 299 руб", callback_data='1'
item2 = types.InlineKeyboardButton("6 месяцев - 499 руб", callback_data='2'
item3 = types.InlineKeyboardButton("12 месяцев - 899 руб", callback_data='3'
item4 = types.InlineKeyboardButton("Тех.поддержка", callback_data='4'
# Добавляем кнопки в клавиатуру
markup.add(item1, item2, item3, item4)
# Обновляем сообщение с кнопками
bot.edit_message_text(
chat_id=call.message.chat.id,
message_id=call.message.message_id,
text="Выбран вариант: " + call.data,
reply_markup=None
)
except Exception as e:
print(repr(e))
#run
bot.polling(none_stop=True)
Основные изменения:
1. Перенес создание клавиатуры (`markup`) перед её использованием
2. Заменил `InlineKeyboardMarkup` на `InlineKeyboardButton` для создания кнопок
3. Исправил декоратор `callback_query_handlers` на `callback_query_handler`
4. Упростил логику обновления сообщения после нажатия кнопки
5. Убрал лишние вызовы `edit_message_text`
Теперь код должен работать корректно. После нажатия на кнопку бот будет отправлять соответствующую ссылку и обновлять сообщение с кнопками.