Программки 💻
October 9, 2021

Первый телеграм бот🤖

Просто заинтересовался таким языком, как ruby. Решил сделать какой-нибудь проект. Давно хотел заняться ботами, но никак руки не доходили. Время пришло.

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

Но для начала нужно понять, что мне нужно использовать.

На чём будем писать? Ну явно не на рельсах. Есть какая-нибудь библиотека для ботов? Есть, "telegram-bot-ruby". На чём писать разобрались, где этот бот будет находиться? У тебя есть лишний сервер? У меня нет, так что идея была закинуть бота в облако. А конкретнее на Heroku, тоже новая для меня вещь. Как я понял, для подобных проектов на руби Heroku очень классное решение. Все компоненты есть, осталось написать самого бота.

интерфейс Хероку

Как я бота писал

Итак, для начала нужно было получить токен. Как это сделать? Вот так:

менять дискрипшн и аву бота нужно тоже через botFather

Что будет делать бот? Отвечать на вопросы на рандом. На практике оказалось, что это очень полезная вещь. Если не можешь выбрать что-то, долго сомневаешься, спроси бота и всё.

Код:

require 'telegram/bot'

TOKEN = '2033359127:AAHliuwKNZ11-zyGbyGOR3-RXvsOMnPd5ww'

Записываем токен и подключаем библиотеку.

ANSWERS = [    
"Да, кончно",    
"100%",    
"Да",    
"100000000%",    
"Несомненно",    
#-=-=-=-=-    
"Мб",    
"50/50",      
"Скорее да, чем нет",    
"Скорее нет, чем да",   
#-=-=-=-=-    
"Нет, пфф",    
"Да неет",    
"Точно нет",    
"0%",    
"Нет",
]

Создаём массив с ответами (лучше чтобы ответов было много).

Telegram::Bot::Client.run(TOKEN) do |bot|
   bot.listen do |message|
     case message.text 
     when '/start', '/start start' 
      bot.api.send_message(
        chat_id: message.chat.id,
        text: "Привет, #{message.from.first_name}")        
     when 'Это точно случайные ответы?'            
      bot.api.send_message(                
        chat_id: message.chat.id,                
        text: "Конечно!!! 10000000%")        
     else             
      bot.api.send_message(            
        chat_id: message.chat.id,           
        text: ANSWERS.sample)       
     end   
   end 
end

Ну а тут самое важное: ловим сообщение, проверяем его. Если сообщение "/start" или "/start start", приветствуем пользователя. Если юзер написал: "Это точно случайные ответы?" отвечаем, что конечно это так. В остальных случаях выводим случайный ответ:

text: ANSWERS.sample

Итак, код есть, оставалось залить его на Heroku

Для начала я создал "Procfile" (без расширений, просто Procfile). Это файл, который говорит Хероку что именно делать (какой файл выполнять).

Выглядит он так:

Да, одна строчка, просто и понятно.

Дальше зарегистрировался на сервисе, скачал CLI, настроил Buildpack, создал приложение, закоммитил код, и написал

git push heroku master

Готово! Бот развёрнут в облаке. Заняло у меня всё это один вечер.

чуть выше я спросил писать ли мне ещё бота, на что он ответил "нет"

Итог

Конечно я не написал как скачать CLI и настроить buildpack, но, во-первых это не гайд, во-вторых об этом полно роликов на ютьюбе, лучше я не расскажу. Просто решил попробовать новый ЯП, и новую область. Писать ботов мне понравилось. На столько понравилось, что на той же неделе я решил написать ещё одного бота, на этот раз на golang, но это уже другая история. Исходники