Это старая версия документа!
Для обработки действий пользователя, используются декораторы функций python «@bot.message_handler», указывается перед функцией обработчиком, агрументом указаны параметры, можно указать конкретные команды, или тип данных типа «текст/кнопки/лямбда и т.д.»
В обрабатываемой функции непременно есть аргумент «message», содержащий само сообщение
# Конкретные команды @bot.message_handler(commands=['start', 'help']) def start_message(message): # Любой текст (внутри уже IF'ами) @bot.message_handler(content_types=['text']) def text_message(message):
Простой пример с ботом и кнопки в т.ч.
Этот тип кнопок добавляется справа в поле ввода, по аналогии с меню командами
При старте задаем кнопки меню, и обрабатываем их нажатие
#!/usr/bin/python3.8 import telebot from telebot import types token = '50555555:AAaaaaaaaaaaa' bot = telebot.TeleBot(token) @bot.message_handler(commands = ['start']) def start_message(message): #inline_menu = InlineKeyboardMarkup([[ InlineKeyboardButton('Кнопка 1', callback_data = 'first_button') ]]) markup=types.ReplyKeyboardMarkup(resize_keyboard=True) markup.add(types.KeyboardButton("action 1")) markup.add(types.KeyboardButton("action 2")) answer = bot.send_message(message.chat.id, "--=Приветствие=--", reply_markup = markup) print(str(answer)) @bot.message_handler(content_types = 'text') def message_reply(message): if message.text == "action 1": answer = bot.send_message(message.chat.id, "Выбрано действие 1") print(str(answer)) elif message.text == "action 2": answer = bot.send_message(message.chat.id, "Выбрано действие 2") print(str(answer)) bot.infinity_polling()
Кнопки «Обратного вызова», под сообщением, прикрепляются к сообщению отдельным объектом, можно как отправлять с новым сообщением так и изменять их при редактировании, благодаря этому можно сделать динамическое меню
После того как пользователь выбирает такую кнопку, висит ожидание, в коде нужно вызвать метод «answerCallbackQuery» для продолжения
# Класс кнопки InlineKeyboardButton( text, url = NULL, callback_data = NULL, switch_inline_query = NULL, switch_inline_query_current_chat = NULL )
В поле «chat_id» пишется ID чата/канала/пользователя. Минусом предваряется ИД канала, простой чат без минуса. Личка пользователя доступна по его ИД (это не имя пользователя, можно узнать через бота «@userinfobot»)
#!/usr/bin/python3.8 import requests token ='123456789:aaaaaaaaaaaa' url = f'https://api.telegram.org/bot{token}/sendMessage' data = {'chat_id': '123321', 'text': 'this is message'} answer = requests.post(url, data).json() print(str(answer))
# Простая отправка сообщения: curl -s -X POST https://api.telegram.org/bot1074186011:AAAAAAAAA/sendMessage -d chat_id="-7511111" -d text="Hallo Warld" # Изменить сообщение: curl -s -X POST https://api.telegram.org/bot1074186011:AAAAAAAAA/editMessageText -d chat_id="-7511111" -d message_id="100921" -d text="Hello World"