Инструменты пользователя

Инструменты сайта


develop:pyton:telegram

Telegram

pyTelegramBotAPI

Модуль для работы с «TelegramBotAPI» используя python
Вот точно дока
Дока
Еще дока

pip install pyTelegramBotAPI 

Обработка событий

Для обработки действий пользователя, используются декораторы функций 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):

Reply Keyboard Markup

Простой пример с ботом и кнопки в т.ч.
Статья по кнопкам\\ Этот тип кнопок добавляется один раз на постоянку, справа в поле ввода, по аналогии с меню командами
В аргументах есть так же помимо «callback_data» еще пару вариантов, url в т.ч., используется что то одно, в основном там фигня

:!: Минимальный пример с кнопками

При старте задаем кнопки меню, и обрабатываем их нажатие

#!/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"))
 
        # Для удаления
        # markup = types.ReplyKeyboardRemove()
 
	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()

Есть параметр отвечающий за кол-во столбцов, «row_width», работает при добавлении кнопок методом «add()», метод «row()» так же добавляет кнопки но на размер ему побоку

Inline Keyboard Markup

Эти кнопки прикрепляются к сообщению, можно как отправлять с новым сообщением так и изменять их при редактировании, благодаря этому можно сделать динамическое меню
При обработке необходимо вызвать метод «answerCallbackQuery»
Дока

:!: Грубый пример
#!/usr/bin/python3.8
 
import telebot
from telebot import types
from telebot.types import InlineKeyboardButton, InlineKeyboardMarkup
 
 
token = '55555555:AAффффффф'
bot = telebot.TeleBot(token)
 
@bot.message_handler(commands = ['start'])
def start_message(message):
	inline_btn1 = InlineKeyboardButton('Первая кнопка', callback_data = 'button_1')
	inline_btn2 = InlineKeyboardButton('Вторая кнопка', callback_data = 'button_2')
 
	inline_menu = InlineKeyboardMarkup().add(inline_btn1, inline_btn2)
 
	answer = bot.send_message(message.chat.id, "--=Приветствие=--", reply_markup = inline_menu)
	print(str(answer))
 
@bot.callback_query_handler(func = lambda c: c.data == 'button_1')
def press_button1(callback_query: types.CallbackQuery):
	bot.answer_callback_query(callback_query.id)
	bot.send_message(callback_query.from_user.id, 'Выбрана первая кнопка')
 
 
@bot.callback_query_handler(func = lambda c: c.data == 'button_2')
def press_button2(callback_query: types.CallbackQuery):
	bot.answer_callback_query(callback_query.id)
	bot.send_message(callback_query.from_user.id, 'Выбрана вторая кнопка')
 
bot.infinity_polling()
:!: Еще пример
#!/usr/bin/python3.8
 
import telebot
from telebot import types
from telebot.types import InlineKeyboardButton, InlineKeyboardMarkup
 
token = '50222222222:AAыыыыыыыыы'
bot = telebot.TeleBot(token)
 
@bot.message_handler(commands = ['start'])
def start_message(message):
 
	inline_btn1 = InlineKeyboardButton('Первая кнопка', callback_data = 'button_1')
	inline_btn2 = InlineKeyboardButton('Вторая кнопка', callback_data = 'button_2')
	inline_btn3 = InlineKeyboardButton('Вторая кнопка', callback_data = 'button_3')
 
	inline_menu = InlineKeyboardMarkup(row_width = 2)
	inline_menu.add(inline_btn1, inline_btn2, inline_btn3) # В два столбца
	inline_menu.row(inline_btn1, inline_btn2, inline_btn3) # В три столбца
 
	answer = bot.send_message(message.chat.id, "--=Приветствие=--", reply_markup = inline_menu)
	print(str(answer))
 
 
@bot.callback_query_handler(func = lambda c: c.data and c.data.startswith('button_'))
def press_buttons(callback_query: types.CallbackQuery):	
	code = callback_query.data[-1]
	if code == '1':								# Текст покажется на экране оповещением
		bot.answer_callback_query(callback_query.id, text = 'Выбрана первая кнопка')
	elif code == '2':
		bot.answer_callback_query(callback_query.id, text = 'Выбрана вторая кнопка')
	elif code == '3':
		bot.answer_callback_query(callback_query.id, text = 'Выбрана третья кнопка')
	else:
		bot.answer_callback_query(callback_query.id)
 
	  # Это сообщение отправится в чат т.е. ответное действие
	bot.send_message(callback_query.from_user.id, f"Нажата кнопка №{code}")
 
bot.infinity_polling()

Overall

Дока

В поле «chat_id» пишется ID чата/канала/пользователя. Минусом предваряется ИД канала, простой чат без минуса. Личка пользователя доступна по его ИД (это не имя пользователя, можно узнать через бота «@userinfobot»)

Inline bot

Дока
Есть понятие инлайн-бота, это специфика самого бота

:!: Минимальный бот
#!/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"
develop/pyton/telegram.txt · Последнее изменение: 2023/08/05 04:50 — admin