#python #telegram #telegram-bot #py-telegram-bot-api
#python #telegram #telegram-бот #py-telegram-bot-api
Вопрос:
import telebot
import config
from telebot import types
bot = telebot.TeleBot(config.TOKEN)
language = "kazakh"
keyboard1 = types.ReplyKeyboardMarkup()
item_kaz = types.ReplyKeyboardMarkup(text = "Қазақ тілі", callback_data = "kazakh")
item_rus = types.ReplyKeyboardMarkup(text = "Русский язык", callback_data = "russian")
keyboard1.add(item_kaz, item_rus)
keyboard2 = types.ReplyKeyboardMarkup(True, True)
item_7 = types.ReplyKeyboardMarkup(text = "7", callback_data = "7")
item_8 = types.ReplyKeyboardMarkup(text = "8", callback_data = "8")
item_9 = types.ReplyKeyboardMarkup(text = "9", callback_data = "9")
item_10 = types.ReplyKeyboardMarkup(text = "10", callback_data = "10")
item_11 = types.ReplyKeyboardMarkup(text = "11", callback_data = "11")
item_12 = types.ReplyKeyboardMarkup(text = "12", callback_data = "12")
keyboard2.add(item_7, item_8, item_9, item_10, item_11, item_12)
keyboard3 = telebot.types.ReplyKeyboardMarkup(True, True)
item_1 = types.ReplyKeyboardMarkup(text = "1", callback_data = "1")
item_2 = types.ReplyKeyboardMarkup(text = "2", callback_data = "2")
item_3 = types.ReplyKeyboardMarkup(text = "3", callback_data = "3")
item_4 = types.ReplyKeyboardMarkup(text = "4", callback_data = "4")
keyboard3.add(item_1, item_2, item_3, item_4)
@bot.message_handler(commands=['start'])
def welcome(message):
sti = open('static/welcome.webp', 'rb')
bot.send_sticker(message.chat.id, sti)
bot.send_message(message.chat.id, " Қош келдіңіз / Добро пожаловать, {0.first_name}!nМенің атым / Я - <b>{1.first_name}</b>.Тілді таңдаңыз / Выберите язык.".format(message.from_user, bot.get_me()), parse_mode='html', reply_markup=keyboard1)
def synyptar(message):
bot.send_message(message.chat.id, 'Сыныпты таңдаңыз / Выберите класс', reply_markup=keyboard2)
def toqsandar(message):
bot.send_message(message.chat.id, 'Тоқсанды таңдаңыз / Выберите четверть', reply_markup=keyboard3)
@bot.message_handler(content_types=['text'])
def lalala(message):
bot.send_message(message.chat.id, message.text)
#RUN
bot.polling(none_stop=True)
Привет, ребята, недавно я столкнулся с неприятной проблемой, связанной с телеграммой. Я хотел бы добавить кнопки с помощью ReplyKeyboardMarkup, но python не дает мне такой возможности. Пожалуйста, если вы понимаете, помогите решить эту проблему.
item_kaz = types.InlineKeyboardMarkup(text = "Қазақ тілі", callback_data = "kazakh")
TypeError: __init__() got an unexpected keyword argument 'text'
Комментарии:
1. Какой из них вы хотите, чтобы ваш бот отправил? эти (встроенные) или эти (клавиатура ответа) — в более поздних (клавиатуры ответа) вы не можете использовать
callback_data
Ответ №1:
В python-telegram-bot
:
-
KeyboardButton
— класс button для описания простой кнопки ответа, вместо этого можно использовать просто строку. Пример:KeyboardButton(text='ABC')
-
ReplyKeyboardMarkup
— класс контейнера для KeyboardButtons принимает их список или только один (строка или объект). Пример:ReplyKeyboardMarkup([ 'ABC', KeyboardButton(text='DEF'), KeyboardButton(text='GHI'), ]) ReplyKeyboardMarkup('ABC') ReplyKeyboardMarkup(KeyboardButton(text='DEF'))
-
InlineKeyboardButton
— класс button для описания встроенной кнопки, может использоваться только с помощью class,callback_data
не требуется. Пример:InlineKeyboardButton(text='ABC', callback_data="button_abc")
-
InlineKeyboardMarkup
— класс контейнера для InlineKeyboardButton содержит их список. Пример:InlineKeyboardMarkup([ InlineKeyboardButton(text='ABC', callback_data="button_abc"), InlineKeyboardButton(text='DEF', callback_data="button_def"), InlineKeyboardButton(text='GHI', callback_data="button_ghi"), ])
В вашем случае вы неправильно InlineKeyboardMarkup
использовали вместо InlineKeyboardButton
. Поэтому вам нужно изменить:
keyboard1 = types.InlineKeyboardMarkup(
types.InlineKeyboardButton(text="Қазақ тілі", callback_data="kazakh"),
types.InlineKeyboardButton(text="Русский язык", callback_data="russian"),
)