telebot (pyTelegramBotAPI) хорошая и лёгкая библиотека для создания бота на python для телеграмма.
Установка
Если у вас windows, тогда вам надо найти cmd на своём пк, а если у вас macOS, тогда вам надо открыть терминал.
Для установки telebot (pyTelegramBotAPI) на windows вам надо написать в cmd
pip install pyTelegramBotAPI
Для установки на macOS нам надо написать в терминале
pip3 install pyTelegramBotAPI
Написание кода
Сначала надо получить токен. Для этого зайдём к боту botfather,чтобы получить токен (botfather)
Теперь можно начать писать код.Сначала мы импортируем библиотеку.
import telebot
token="наш токен"
Теперь создаём переменную под названием token, в ней мы будем хранить наш токен.
Теперь мы можем создать приветствие бота:
import telebot
token='наш токен'
bot=telebot.Telebot(token)
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id,"Привет ✌️ ")
bot.infinity_poling()
Нам надо создать переменную bot, в ней мы пишем telebot.Telebot (наша переменная с токеном).
Пишем @bot.message_handler(commands=['start'])
Создаём функцию под названием "start_message"
В скобках указываем "message".
Пишем внутри функции bot.send_message(message.chat.id,"Привет")
и вне функции пишем bot.infinity_poling()
и запускаем программу.
Теперь наш бот может приветствовать
вот пример:
Приветствие мы сделали, теперь давайте сделаем кнопку.
Надо написать from telebot import types там же, где мы импортировали библиотеку telebot
import telebot
from telebot import types
token='наш токен'
bot=telebot.TeleBot(token)
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id,'Привет')
@bot.message_handler(commands=['button'])
def button_message(message):
markup=types.ReplyKeyboardMarkup(resize_keyboard=True)
item1=types.KeyboardButton("Кнопка")
markup.add(item1) bot.send_message(message.chat.id,'Выберите что вам надо',reply_markup=markup)
bot.infinity_polling()
Теперь пишем @bot.message_handler(commands=['button']). Дальше мы создаём функцию под названием button_message, в скобках указываем message.
Дальше надо создать клавиатуру в переменной под названием markup, в переменной пишем types.ReplyKeyboardMarkup(resize_keyboard=True).
Потом создаём переменную item1, в ней будет хранится сама кнопка и пишем что item1=types.KeyboardButton("текст на кнопке").
Дальше к клавиатуре добавим нашу кнопку
markup.add(item1)
Далее надо отправить сообщение "Выберите что вам надо" и после текста написать reply_markup=markup и закрываем скобки.
Теперь у нас есть кнопка. Вот пример:
Но если мы на неё нажмём, то ничего не произойдёт. Сейчас мы сделаем так, чтобы при нажатии на кнопку выдавало ссылку на мою страницу в Хабре.
import telebot
from telebot import types
token='наш токен'
bot=telebot.TeleBot(token)
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id,'Привет')
@bot.message_handler(commands=['button'])
def button_message(message):
markup=types.ReplyKeyboardMarkup(resize_keyboard=True)
item1=types.KeyboardButton("Кнопка")
markup.add(item1)
bot.send_message(message.chat.id,'Выберите что вам надо',reply_markup=markup)
@bot.message_handler(content_types='text')
def message_reply(message):
if message.text=="Кнопка":
bot.send_message(message.chat.id,"https://habr.com/ru/users/lubaznatel/")
bot.infinity_polling()
Для начала мы напишем @bot.message_handler(content_types='text')
Дальше нам надо создать функцию по названием message_reply, а в скобках указать message.
Внутри функции надо указать условие "if message.text=="Кнопка:", а внутри условия отправить нам нужное сообщение.
Вот пример:
Смена кнопок
Это последняя часть статьи.В следующей статье мы разберём с вами добавление в группу или канал.
Это можно считать самая лёгкая часть статьи.
Мы разберём сейчас с вами замену кнопок.
import telebot
from telebot import types
token='наш токен'
bot=telebot.TeleBot(token)
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id,'Привет')
@bot.message_handler(commands=['button'])
def button_message(message):
markup=types.ReplyKeyboardMarkup(resize_keyboard=True)
item1=types.KeyboardButton("Кнопка")
markup.add(item1)
bot.send_message(message.chat.id,'Выберите что вам надо',reply_markup=markup)
@bot.message_handler(content_types='text')
def message_reply(message):
if message.text=="Кнопка":
markup=types.ReplyKeyboardMarkup(resize_keyboard=True)
item1=types.KeyboardButton("Кнопка 2")
markup.add(item1)
bot.send_message(message.chat.id,'Выберите что вам надо',reply_markup=markup)
elif message.text=="Кнопка 2":
bot.send_message(message.chat.id,'Спасибо за прочтение статьи!')
bot.infinity_polling()
Теперь нам просто надо создать клавиатуру с кнопками и добавить к клавиатуре кнопку как в прошлой части в тоже самое условие.Дальше в той же функции написать:
elif message.text=="Кнопка 2":
bot.send_message(message.chat.id,'Спасибо за прочтение статьи!')
Теперь при нажатии на Кнопку 1 она у нас сменяется на кнопку 2 и при нажатии на кнопку 2 у нас присылает сообщение "Спасибо за прочтение статьи!".
Вот пример:
Комментарии (7)
shadson
28.09.2021 14:48У меня такой больше года шлет фотки парковки около дома. Где-то раз в недельку зависает - bot.infinity_polling() никогда не вызывает хэндлер. Решается docker start/stop на его контейнер.
Для ардуино-ботов - норм, для прода - ну такэ.
net_racoon
29.09.2021 09:31Вот кстати да, такая же проблема примерно. Постоит немного без дела и потом уже не реагирует на кнопки.
Переводил логгинг в режим дебага и там вроде обмен с Телеграм сервером происходит, но бот все равно не реагирует на события.
Интересно, это косяк данного модуля или они все такие? На форумах рекомендуют переключиться в режим, когда скрипт слушает сообщения от сервера, но я пока не пробовал.
hooperer
27.10.2021 17:54И что делать с этим pooling
если внезапно к такому боту захочется добавить к примеру паралельно
простую отправку сообщений из внешнего json файла?
Freax
Телеграм бот на питоне. Вид сбоку.
Холст. Масло.