QQ Хабр! В этом гайде мы пройдемся по каждому шагу создания ботов в Telegram - от регистрации бота до публикации репозитория на GitHub. Некоторым может показаться, что все разжевано и слишком много элементарной информации, но этот гайд создан для новичков, хотя будет интересен и для тех, кто уже занимался разработкой в Telegram. Сегодня мы будем делать бота, который отвечает на заданные вопросы.
I. Регистрация бота
Прежде всего нужно зарегать бота. Для этого пишем боту @BotFather команду /newbot
, после этого даем боту имя и тэг. После этих действий бот отправит нам токен, который никому давать нельзя.
![](https://habrastorage.org/getpro/habr/upload_files/24f/392/57a/24f39257a7893fab12efc0bd92c7bed4.png)
На этом процесс регистрации бота завершен, можно приступать к самому интересному - кодингу
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)
Выглядит это так
![](https://habrastorage.org/getpro/habr/upload_files/1d5/ad1/578/1d5ad15781a25acfe86233b152f9b68f.png)
Более подробно про такие кнопки можно почитать в этой статье
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)
Вот как это выглядит
![](https://habrastorage.org/getpro/habr/upload_files/e15/710/840/e1571084050f8e96f78a17fb4f18f03e.png)
Обратно к коду
Теперь уже точно можно вернуться к кодингу, давайте добавим стартовую команду и кнопку
@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, если есть, что предложить - комментарии открыты для вас. Надеюсь, вам это было полезно.
Источники: