Кіраўніцтва: як зрабіць простага бота для Тэлеграм на JS для пачаткоўца ў праграмаванні

Я пачаў апусканне ў свет IT толькі тры тыдні таму. Сур'ёзна, тры тыдні таму я нават не разумеў сінтаксісу HTML, а знаёмства з мовамі праграмавання заканчвалася школьнай праграмай па Pascal 10-гадовай даўніны. Аднак я вырашыўся паехаць у IT-лагер, для дзяцей якога было б нядрэнна зрабіць робата. Я вырашыў, што гэта ці наўрад так складана.

З гэтага пачаўся доўгі шлях, у рамках якога я:

  • разгарнуў хмарны сервер з Ubuntu,
  • зарэгістраваўся на GitHub,
  • вывучыў базавы сінтаксіс JavaScript,
  • прачытаў тону артыкулаў на англійскай і рускай мовах,
  • зрабіў, нарэшце, робата,
  • напісаў гэты артыкул, нарэшце.

Выглядаў выніковы вынік прыкладна так:

Кіраўніцтва: як зрабіць простага бота для Тэлеграм на JS для пачаткоўца ў праграмаванні

Скажу адразу, гэта артыкул для пачаткоўцаў - каб проста зразумець, як рабіць элементарныя рэчы з самай нулявой кропкі.

А яшчэ – для прасунутых праграмістаў – проста каб іх крыху пасмяшыць.

1. Як пісаць код на JS?

Я разумеў, што варта для пачатку хаця б разабрацца ў сінтаксісе мовы. Выбар упаў на JavaScript, проста таму што наступным крокам для мяне было стварэнне прыкладання на ReactNative. Я пачаў з курса на Codecademy і застаўся ў вялікім захапленні. Першыя 7 дзён бясплатна. Рэальныя праекты. Рэкамендую. Праходжанне яго заняло каля 25 гадзін. Насамрэч далёка не ўсё з яго спатрэбілася. Вось так прыкладна выглядае структура курса і падрабязна першы блок.

Кіраўніцтва: як зрабіць простага бота для Тэлеграм на JS для пачаткоўца ў праграмаванні

2. Як зарэгістраваць робата?

Спачатку мне вельмі дапамагла вось гэтая артыкул з блога нейкага Арчакова. Ён разжоўвае самы пачатак. Але галоўнае, што там ёсць – гэта інструкцыя па рэгістрацыі робата. Лепш я не напішу, і паколькі гэта найлягчэйшая частка, проста напішу істу. Трэба стварыць робата і атрымаць яго API. Гэта робіцца праз іншага робата - @BotFather. Знайдзіце яго ў telegram, напішыце яму, прайдзіце просты шлях і атрымаеце (захавайце!) API-ключ (гэта набор лічбаў і літар). Ён спатрэбіўся мне пазней.

Кіраўніцтва: як зрабіць простага бота для Тэлеграм на JS для пачаткоўца ў праграмаванні

3. Як выглядае код бота?

Пасля доўгага вывучэння артыкулаў, я зразумеў, што варта выкарыстоўваць нейкую бібліятэку (іншы код у фармаце модуля), каб не пакутаваць з вывучэннем API тэлеграма і стварэннем з нуля вялікіх кавалкаў кода. Я знайшоў фрэймворк telegraf, які трэба было неяк падключыць да чагосьці пры дапамозе npm ці yarn. Прыкладна так я разумеў тады, з чаго складаецца разгортванне робата. Смяяцца тут. Я не пакрыўджуся. Больш за ўсё пры наступным стварэнні робата мне дапамаглі прыклады, паказаныя ўнізе старонкі:

Кіраўніцтва: як зрабіць простага бота для Тэлеграм на JS для пачаткоўца ў праграмаванні

3. Як стварыць уласны хмарны сервер за 100 рублёў

Пасля доўгіх пошукаў я зразумеў, што каманда 'npm' з карцінкі вышэй адносіцца да каманднага радка. Камандны радок ёсць усюды, але каб атрымалася яго выканаць, трэба паставіць NodePackageManager. Праблема была ў тым, што праграмаваў я на PixelBook з ChromeOS. Я прапушчу тут вялікі блок пра тое, як я спазнаваў Linux - для большасці гэта пустое і непатрэбнае. Калі ў вас ёсць Windows ці MacBook, у вас ужо ёсць кансоль.

Калі ў двух словах, я паставіў Linux праз Crostini.

Аднак падчас я зразумеў, што для сталай працы робата (а не толькі калі ў мяне ўключаны кампутар) мне патрэбен хмарны сервер. Я выбраў vscale.io Я закінуў 100 рублёў, купіў самы танны сервер Ubuntu (гл.карцінку).

Кіраўніцтва: як зрабіць простага бота для Тэлеграм на JS для пачаткоўца ў праграмаванні

4. Як падрыхтаваць сервер для запуску бота

Пасля гэтага я зразумеў, што трэба зрабіць на серверы нейкую тэчку, у якую я пакладу файл з тэкстам кода. Для гэтага ў кансолі (запускаць прама на сайце праз кнопку «Адкрыць кансоль») я ўбіў

mkdir bot

bot - гэта стала назва маёй тэчкі. Пасля гэтага я ўсталяваў npm і Node.js, што дазволіць запускаць мне потым код з файлікаў з дазволам *.js.

sudo apt update
sudo apt install nodejs
sudo apt install npm

Вельмі рэкамендую на гэтым этапе наладзіць падлучэнне да сервера праз сваю кансоль. Вось інструкцыя Гэта дазволіць працаваць з серверам напрамую праз кансоль свайго кампутара.

5. Як напісаць код першага робата.

А вось зараз проста адкрыццё для мяне. Любая праграма - гэта проста радкі тэксту. Іх можна ўбіць куды заўгодна, захаваць з патрэбным пашырэннем і ўсё. Ты цудоўны. Я выкарыстаў Атам, Але рэальна, можна проста ў блакноце стандартным пісаць. Галоўнае - захаваць потым файл у патрэбным пашырэнні. Гэта як напісаць тэкст у Word і захаваць.

Я зрабіў новы файл, у які ўставіў код з прыкладу на старонцы telegraf і захаваў у файл index.js (наогул не абавязкова зваць файл так, але так прынята). Важна - замест BOT_TOKEN устаўце свой API-ключ з другога пункта.

const Telegraf = require('telegraf')

const bot = new Telegraf(process.env.BOT_TOKEN)
bot.start((ctx) => ctx.reply('Welcome!'))
bot.help((ctx) => ctx.reply('Send me a sticker'))
bot.on('sticker', (ctx) => ctx.reply(''))
bot.hears('hi', (ctx) => ctx.reply('Hey there'))
bot.launch()

6. Як закінуць код на сервер праз github

Цяпер мне трэба было закінуць неяк гэты код на сервер і запусціць яго. Для мяне гэта стала челенджем. У выніку, пасля доўгіх пакут я зразумеў, што прасцей будзе стварыць файл на github, які пазаўляе абнаўляць код пры дапамозе каманды ў кансолі. Я зароў рахунак на GitHub і зрабіў новы праект, куды і загрузіў файл. Пасля гэтага мне трэба было зразумець, як жа наладзіць загрузку файлаў з майго акаўнта (адкрытага!) на сервер у тэчку bot (калі раптам вы выйшлі з яе - проста напішыце cd bot).

7. Як загрузіць файлы на сервер праз github ч.2

Мне трэба было паставіць на сэрвер праграму, якая будзе загружаць файлы з git. Я паставіў git на сервер, забіўшы ў кансоль

apt-get install git

Пасля гэтага мне трэба было наладзіць загрузку файлаў. Для гэтага я ўбіў у камандны радок

git clone git://github.com/b0tank/bot.git bot

У выніку ўсё з праекту загрузілася на сервер. Памылкай на дадзеным этапе было, што я, у сутнасці, зрабіў другую тэчку ўсярэдзіне ўжо існай тэчкі bot. Адрас да файла выглядаў як */bot/bot/index.js

Я вырашыў занядбаць гэтую праблему.

І каб падгрузіць бібліятэку telegraf, якую мы запытваем у першым радку кода, убіце ў кансоль каманду.

npm install telegraf

8. Як запусціць робата

Для гэтага, знаходзячыся ў тэчцы з файлам (каб пераходзіць з тэчкі ў тэчку праз кансоль - выконвайце каманду фармату cd bot Каб пераканацца, што вы тамака, дзе трэба можна забіць каманду, якая адлюструе ў кансолі ўсе файлы і тэчкі, якія тамака ляжаць ls -a

Для запуску я ўвёў у кансоль

node index.js

Калі няма ніякай памылкі – усё добра, бот працуе. Шукайце яго ў тэлеграме. Калі памылка ёсць - ужывайце свае веды з 1 пункта.

9. Як запусціць робата ў фонавым рэжыме

Досыць хутка вы зразумееце, што бот працуе толькі тады, калі вы самі сядзіце ў кансолі. Каб вырашыць гэтую праблему я выкарыстаў каманду

screen

Пасля гэтага з'явіцца экран з нейкім тэкстам. Гэта значыць, што ўсё добра. Вы на віртуальным серверы на хмарным серверы. Каб зразумець лепш, як гэта ўсё працуе - вось артыкул. Проста заходзіце ў сваю тэчку і забівайце каманду па запуску бота

node index.js

10. Як працуе робат і як пашырыць яго функцыянал

Што ж умее наш робат з прыкладу? Ён умее

bot.start((ctx) => ctx.reply('Welcome!'))

казаць «Welcome!» у момант старту (паспрабуйце памяняць тэкст)

bot.help((ctx) => ctx.reply('Send me a sticker'))

у адказ на стандартную каманду /help адпраўляць паведамленне "Send me a sticker"

bot.on('sticker', (ctx) => ctx.reply(''))

у адказ на стыкер адпраўляць ухвалу

bot.hears('hi', (ctx) => ctx.reply('Hey there'))

адказваць "Hey there", калі яму пішуць 'hi'
bot.launch()

Кіраўніцтва: як зрабіць простага бота для Тэлеграм на JS для пачаткоўца ў праграмаванні

Калі вы паглядзіце код на GitHub, то хутка зразумееце, што моцна далёка ад гэтага функцыяналу я не сышоў. Што актыўна выкарыстоўваецца, дык гэта функцыя ctx.replyWithPhoto Яна дазваляе адпраўляць зададзенае фота ці gif у адказ на вызначаны тэкст.

Значная частка кода была напісана дзецьмі 11-13 гадоў, якім я даў доступ да робата. Яны ўвялі свае user-case. Думаю, лёгка вызначыць, якая частка зроблена была імі.

Напрыклад, на паведамленне "джэйк" прыходзіць гіфка з вядомым персанажам з мультыка Adventure Time.

Кіраўніцтва: як зрабіць простага бота для Тэлеграм на JS для пачаткоўца ў праграмаванні

Каб развіваць бота далей, падключаць клавіятуру трэба глядзець прыклады, напрыклад, адсюль

11. Як абнаўляць код і перазапускаць бота

Не забывайце, што трэба абнаўляць код не толькі на github, але і на сэрвэры. Рабіць гэта проста – стопім бота (націснуць ctrl+c),

- уводны ў кансоль, знаходзячыся ў мэтавай тэчцы, git pull
- зноў запускаем бота камандай node index.js

END

Многія рэчы, апісаныя ў гэтым файле, будуць супер відавочныя для прасунутых праграмістаў. Аднак калі я сам спрабаваў адным махам пераскочыць прорву да свету ботаў, мне вельмі не хапала падобнага гайда. Гайда, у якім не прапускаецца відавочныя і простыя для любога IT-спецыяліста рэчы.

У далейшым я планую пост пра тое, як зрабіць сваё першае прыкладанне на ReactNative у такім жа стылі, падпісвайцеся!

Крыніца: habr.com

Дадаць каментар