QQ Хабр! В этом гайде мы пройдемся по каждому шагу создания ботов в Telegram - от регистрации бота до публикации репозитория на GitHub. Некоторым может показаться, что все разжевано и слишком много элементарной информации, но этот гайд создан для новичков, хотя будет интересен и для тех, кто уже занимался разработкой в Telegram. Сегодня мы будем делать бота, который отвечает на заданные вопросы.

I. Регистрация бота

Прежде всего нужно зарегать бота. Для этого пишем боту @BotFather команду /newbot, после этого даем боту имя и тэг. После этих действий бот отправит нам токен, который никому давать нельзя.

На этом процесс регистрации бота завершен, можно приступать к самому интересному - кодингу

II. Кодинг

Итак, бота мы будем писать на python. Для начала установим библиотеку pytelegrambotapi. Для этого в командной строке (или в терминале, если у вас MacOS) пишем:

pip3 install pytelegrambotapi

После этого можно приступать, импортируем библиотеки и вводим токен:

import telebot

bot = telebot.TeleBot('BOT-TOKEN')

Вместо BOT-TOKEN пишем токен, который получили от BotFather

Сейчас можно уже и поговорить о кнопках

Кнопки

Для того, чтобы кнопки заработали нужно импортировать типы, для этого после импорта библиотек пишем:

from telebot import types

Бывает два вида кнопок, это:

  • Inline-кнопки

  • Keyboard-кнопки

Inline-кнопки

Для создания таких кнопок используется метод InlineKeyboardMarkup, например, сделаем кнопку, которая ведет на сайт Хабра

@bot.message_handler(commands = ['start'])
def url(message):
    markup = types.InlineKeyboardMarkup()
    btn1 = types.InlineKeyboardButton(text='Наш сайт', url='https://habr.com/ru/all/')
    markup.add(btn1)
    bot.send_message(message.from_user.id, "По кнопке ниже можно перейти на сайт хабра", reply_markup = markup)

Выглядит это так

Более подробно про такие кнопки можно почитать в этой статье

Keyboard-кнопки

Такие кнопки можно увидеть в большом количестве ботов, таких как Дайвинчик и тому подобные. Пишутся они довольно просто, с помощью метода ReplyKeyboardMarkup. Для примера сделаем кнопку выбора языка

@bot.message_handler(commands=['start'])
def start(message):

    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("???????? Русский")
    btn2 = types.KeyboardButton('???????? English')
    markup.add(btn1, btn2)
    bot.send_message(message.from_user.id, "???????? Выберите язык / ???????? Choose your language", reply_markup=markup)

Вот как это выглядит

Обратно к коду

Теперь уже точно можно вернуться к кодингу, давайте добавим стартовую команду и кнопку

@bot.message_handler(commands=['start'])
def start(message):

    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("???? Поздороваться")
    markup.add(btn1)
    bot.send_message(message.from_user.id, "???? Привет! Я твой бот-помошник!", reply_markup=markup)

Далее делаем реакцию бота на кнопки (здесь то уже есть комментарии)

@bot.message_handler(content_types=['text'])
def get_text_messages(message):

    if message.text == '???? Поздороваться':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True) #создание новых кнопок
        btn1 = types.KeyboardButton('Как стать автором на Хабре?')
        btn2 = types.KeyboardButton('Правила сайта')
        btn3 = types.KeyboardButton('Советы по оформлению публикации')
        markup.add(btn1, btn2, btn3)
        bot.send_message(message.from_user.id, '❓ Задайте интересующий вопрос', reply_markup=markup) #ответ бота

Теперь по этому примеру продолжаем плодить бота

elif message.text == 'Как стать автором на Хабре?':
    bot.send_message(message.from_user.id, 'Вы пишете первый пост, его проверяют модераторы, и, если всё хорошо, отправляют в основную ленту Хабра, где он набирает просмотры, комментарии и рейтинг. В дальнейшем премодерация уже не понадобится. Если с постом что-то не так, вас попросят его доработать.\n \nПолный текст можно прочитать по ' + '[ссылке](https://habr.com/ru/sandbox/start/)', parse_mode='Markdown')

elif message.text == 'Правила сайта':
    bot.send_message(message.from_user.id, 'Прочитать правила сайта вы можете по ' + '[ссылке](https://habr.com/ru/docs/help/rules/)', parse_mode='Markdown')

elif message.text == 'Советы по оформлению публикации':
    bot.send_message(message.from_user.id, 'Подробно про советы по оформлению публикаций прочитать по ' + '[ссылке](https://habr.com/ru/docs/companies/design/)', parse_mode='Markdown')

Так, стоп, сейчас нужно обсудить, как делать гиперссылки. Это делается просто, вот пример:

bot.send_message(message.from_user.id, 'Подробно про советы по оформлению публикаций прочитать по ' + '[ссылке](https://habr.com/ru/docs/companies/design/)', parse_mode='Markdown')

Как мы видим, чтобы сделать гиперссылку мы берем в квадратные скобки слово, которое будет ссылкой, а саму ссылку берем в круглые. В конце строки добавляем parse_mode='Markdown'

Когда мы дописали основной код нужно вставить важную строку

bot.polling(none_stop=True, interval=0) #обязательная для работы бота часть

Как сказано в комментарии, это строка обязательна для работы бота, чтобы он не отключался и работал постоянно.

Полностью наш код выглядит так:

import telebot
from telebot import types

bot = telebot.TeleBot('BOT-TOKEN')

@bot.message_handler(commands=['start'])
def start(message):

    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("???? Поздороваться")
    markup.add(btn1)
    bot.send_message(message.from_user.id, "???? Привет! Я твой бот-помошник!", reply_markup=markup)

@bot.message_handler(content_types=['text'])
def get_text_messages(message):

    if message.text == '???? Поздороваться':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True) #создание новых кнопок
        btn1 = types.KeyboardButton('Как стать автором на Хабре?')
        btn2 = types.KeyboardButton('Правила сайта')
        btn3 = types.KeyboardButton('Советы по оформлению публикации')
        markup.add(btn1, btn2, btn3)
        bot.send_message(message.from_user.id, '❓ Задайте интересующий вас вопрос', reply_markup=markup) #ответ бота


    elif message.text == 'Как стать автором на Хабре?':
        bot.send_message(message.from_user.id, 'Вы пишете первый пост, его проверяют модераторы, и, если всё хорошо, отправляют в основную ленту Хабра, где он набирает просмотры, комментарии и рейтинг. В дальнейшем премодерация уже не понадобится. Если с постом что-то не так, вас попросят его доработать.\n \nПолный текст можно прочитать по ' + '[ссылке](https://habr.com/ru/sandbox/start/)', parse_mode='Markdown')

    elif message.text == 'Правила сайта':
        bot.send_message(message.from_user.id, 'Прочитать правила сайта вы можете по ' + '[ссылке](https://habr.com/ru/docs/help/rules/)', parse_mode='Markdown')

    elif message.text == 'Советы по оформлению публикации':
        bot.send_message(message.from_user.id, 'Подробно про советы по оформлению публикаций прочитать по ' + '[ссылке](https://habr.com/ru/docs/companies/design/)', parse_mode='Markdown')


bot.polling(none_stop=True, interval=0) #обязательная для работы бота часть

Этот код я написал за 10 минут, при желании код можно сделать намного больше. Полноценный бот выглядит так. Этого бота я делал для конкурса и написал его за 3,5 часа.

Важно: если вы делаете полноценного бота, которого будете куда-то публиковать, очень стоит добавить в него эмодзи: кнопки, сообщения - все должно включать в себя эмодзи, это важно для красоты

III. Публикация репозитория на GitHub

Для этого на потребуется приложение GitHub Desktop

Создаем новый репозиторий, после этого в папке по умолчанию появится папка с названием вашего проекта. В нее закидываем файлы проекта и в приложении нажимаем кнопку Commit to main. После этого нажимаем на кнопку Publish Repository. Готово! При желании, можно создать Readme.md

IV. Заключение

Здесь я расписал все, что я вспомнил о разработке ботов для telegram, если есть, что предложить - комментарии открыты для вас. Надеюсь, вам это было полезно.

Источники:

Документация Telegram Bot API

Встроенные кнопки в Telegram Bot API - pyTelgramBotApi

Комментарии (18)


  1. tomilov91
    02.11.2022 14:24
    +15

    Прошу прощения, никогда не работал с телегой, но Вам не кажется что это едва ли

    Самый полный гайд по ботам Telegram (python)

    ?


    1. quadboii Автор
      02.11.2022 14:25
      -8

      как я и говорил в начале, гайд для новичков и это является полной базой со штатными функциями для начала работы


      1. red-cat-fat
        02.11.2022 15:25
        +4

        Тогда это уже "самый полный Старт", но никак не полный гайд.


        1. quadboii Автор
          02.11.2022 15:26
          -5

          да, ты прав


  1. iantoshkai
    02.11.2022 14:25
    +3

    pytelegrambotapi в 2022? реально?
    уже давно нужно переходить на aiogram
    + вопрос к названию, вы реально считаете его самым полным? где вебхуки? где фсм? и много чего другого...


    1. quadboii Автор
      02.11.2022 14:28
      -4

      с первым согласен, но, когда я начинал изучать этот вопрос, aiogram был для меня сложнее чем pytelegrambotapi. гайд для новичков и я считаю, что дал полную базу, чтобы попробовать и понять, нравится ли этим заниматься. зачем человека, который только начал заниматься разработкой в телеге перегружать вебхуками и фсм? если ему это будет нужно - он сможет найти это сам. я же дал полную информацию для старта


      1. makarbass
        02.11.2022 19:18
        +3

        когда я начинал изучать этот вопрос - я сделал бота только на requests и документации телеги. Название статьи, конечно, чересчур кликбейтное


  1. Raidar
    02.11.2022 14:31
    +7

    А где сам запуск бота (для новичков!)?


    1. qoojoe
      02.11.2022 15:33
      +9

      А это уже будет в гайде для миддлов


      1. lembolov9
        02.11.2022 19:18

        для DevOps инженеров =)


  1. ValentinDom
    02.11.2022 16:49
    -3

    Буквально вчера трансляция по чатботам на MoscowPython была как раз: https://www.youtube.com/watch?v=Fcn5OFCpsqc


  1. 0x7o
    02.11.2022 18:58

    Все хорошо, но до "полного стартового гайда" не хватает загрузки на какой-нибудь сервер


  1. Sansaraa
    02.11.2022 19:18

    Мда, ожидала увидеть как минимум продвинутый уровень с крутыми фичами, прочтя в названии "Самый полный гайд". А таких статей стартов куча по телеграм юотам на просторах интернета.


  1. Weron2
    02.11.2022 21:34

    Ну такое... Не совсем ясно что делать с кодом, ведь как я понимаю нужно этот код где-то захостить, а потом еще и в телеге через вебхук прописать ссылку на него. Статья незаконченная, потому как я понимаю по ней работающего бота не сделать. Но все же плюсанул, может появится продолжение потом, чтобы прям по гайду можно было бы от и до сделать полностью работающего бота.


    1. ShashkovS
      03.11.2022 11:53
      +1

      Я для своих старшеклассников вот такое делал:
      https://ejudge.179.ru/tasks/python/2022b/pgm50__VPS.html

      Там достаточно подробно про покупку и стартовую настройку своего VPS. В целом для первого раза развлечение на несколько часов, зато на своём VPS можно развернуть сразу кучу всего.


  1. ivegner
    04.11.2022 18:54

    И ещё странный момент: статья предлагает Очень Секретный Токен захардкодить, а потом код опубликовать. И куда пошла вся секретность?

    Хотелось бы узнать, как ботоводы решают проблему хранения токена в месте, доступном боту, недоступном более никому.


    1. devkarych
      04.11.2022 22:59

      Хранить все креды надо в переменных окружения / Конфиг-файлах (yaml / env / ini...)


  1. Vlan-48
    05.11.2022 10:00

    Буквально неделю назад потребовался бот который по триггеру из CloudWatch должен слать алармы. Размещен в AWS lambda. Искал себе хорошую инструкцию без лишних модулей. Собрал в итоге из разных, но почему-то мне кажется, что все «супер-Мега-пупер-лучший-полный гайд для новичков»выглядят как этот.