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)


  1. Freax
    28.09.2021 13:15
    +2

    Телеграм бот на питоне. Вид сбоку.

    Холст. Масло.


  1. gkir
    28.09.2021 13:49
    +3

    Для полного профана в ботах было познавательно. Продолжение будет?


    1. lubaznatel Автор
      29.09.2021 13:58

      Продолжение будет


  1. shadson
    28.09.2021 14:48

    У меня такой больше года шлет фотки парковки около дома. Где-то раз в недельку зависает - bot.infinity_polling() никогда не вызывает хэндлер. Решается docker start/stop на его контейнер.

    Для ардуино-ботов - норм, для прода - ну такэ.


    1. net_racoon
      29.09.2021 09:31

      Вот кстати да, такая же проблема примерно. Постоит немного без дела и потом уже не реагирует на кнопки.

      Переводил логгинг в режим дебага и там вроде обмен с Телеграм сервером происходит, но бот все равно не реагирует на события.

      Интересно, это косяк данного модуля или они все такие? На форумах рекомендуют переключиться в режим, когда скрипт слушает сообщения от сервера, но я пока не пробовал.


    1. Qwentor
      29.09.2021 12:55

      Просто надо не bot.infinity_polling(), а вебхук настроить


  1. hooperer
    27.10.2021 17:54

    И что делать с этим pooling

    если внезапно к такому боту захочется добавить к примеру паралельно

    простую отправку сообщений из внешнего json файла?