Я пачаў апусканне ў свет IT толькі тры тыдні таму. Сур'ёзна, тры тыдні таму я нават не разумеў сінтаксісу HTML, а знаёмства з мовамі праграмавання заканчвалася школьнай праграмай па Pascal 10-гадовай даўніны. Аднак я вырашыўся паехаць у IT-лагер, для дзяцей якога было б нядрэнна зрабіць робата. Я вырашыў, што гэта ці наўрад так складана.
З гэтага пачаўся доўгі шлях, у рамках якога я:
- разгарнуў хмарны сервер з Ubuntu,
- зарэгістраваўся на GitHub,
- вывучыў базавы сінтаксіс JavaScript,
- прачытаў тону артыкулаў на англійскай і рускай мовах,
- зрабіў, нарэшце, робата,
- напісаў гэты артыкул, нарэшце.
Выглядаў выніковы вынік прыкладна так:
Скажу адразу, гэта артыкул для пачаткоўцаў - каб проста зразумець, як рабіць элементарныя рэчы з самай нулявой кропкі.
А яшчэ – для прасунутых праграмістаў – проста каб іх крыху пасмяшыць.
1. Як пісаць код на JS?
Я разумеў, што варта для пачатку хаця б разабрацца ў сінтаксісе мовы. Выбар упаў на JavaScript, проста таму што наступным крокам для мяне было стварэнне прыкладання на ReactNative. Я пачаў з
2. Як зарэгістраваць робата?
Спачатку мне вельмі дапамагла вось
3. Як выглядае код бота?
Пасля доўгага вывучэння артыкулаў, я зразумеў, што варта выкарыстоўваць нейкую бібліятэку (іншы код у фармаце модуля), каб не пакутаваць з вывучэннем API тэлеграма і стварэннем з нуля вялікіх кавалкаў кода. Я знайшоў фрэймворк
3. Як стварыць уласны хмарны сервер за 100 рублёў
Пасля доўгіх пошукаў я зразумеў, што каманда 'npm' з карцінкі вышэй адносіцца да каманднага радка. Камандны радок ёсць усюды, але каб атрымалася яго выканаць, трэба паставіць NodePackageManager. Праблема была ў тым, што праграмаваў я на PixelBook з ChromeOS. Я прапушчу тут вялікі блок пра тое, як я спазнаваў Linux - для большасці гэта пустое і непатрэбнае. Калі ў вас ёсць Windows ці MacBook, у вас ужо ёсць кансоль.
Калі ў двух словах, я паставіў Linux праз Crostini.
Аднак падчас я зразумеў, што для сталай працы робата (а не толькі калі ў мяне ўключаны кампутар) мне патрэбен хмарны сервер. Я выбраў
4. Як падрыхтаваць сервер для запуску бота
Пасля гэтага я зразумеў, што трэба зрабіць на серверы нейкую тэчку, у якую я пакладу файл з тэкстам кода. Для гэтага ў кансолі (запускаць прама на сайце праз кнопку «Адкрыць кансоль») я ўбіў
mkdir bot
bot - гэта стала назва маёй тэчкі. Пасля гэтага я ўсталяваў npm і Node.js, што дазволіць запускаць мне потым код з файлікаў з дазволам *.js.
sudo apt update
sudo apt install nodejs
sudo apt install npm
Вельмі рэкамендую на гэтым этапе наладзіць падлучэнне да сервера праз сваю кансоль. Вось
5. Як напісаць код першага робата.
А вось зараз проста адкрыццё для мяне. Любая праграма - гэта проста радкі тэксту. Іх можна ўбіць куды заўгодна, захаваць з патрэбным пашырэннем і ўсё. Ты цудоўны. Я выкарыстаў
Я зрабіў новы файл, у які ўставіў код з прыкладу на старонцы 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, які пазаўляе абнаўляць код пры дапамозе каманды ў кансолі. Я зароў рахунак на
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()
Калі вы паглядзіце код на ctx.replyWithPhoto
Яна дазваляе адпраўляць зададзенае фота ці gif у адказ на вызначаны тэкст.
Значная частка кода была напісана дзецьмі 11-13 гадоў, якім я даў доступ да робата. Яны ўвялі свае user-case. Думаю, лёгка вызначыць, якая частка зроблена была імі.
Напрыклад, на паведамленне "джэйк" прыходзіць гіфка з вядомым персанажам з мультыка Adventure Time.
Каб развіваць бота далей, падключаць клавіятуру трэба глядзець прыклады, напрыклад,
11. Як абнаўляць код і перазапускаць бота
Не забывайце, што трэба абнаўляць код не толькі на github, але і на сэрвэры. Рабіць гэта проста – стопім бота (націснуць ctrl+c),
- уводны ў кансоль, знаходзячыся ў мэтавай тэчцы, git pull
- зноў запускаем бота камандай node index.js
END
Многія рэчы, апісаныя ў гэтым файле, будуць супер відавочныя для прасунутых праграмістаў. Аднак калі я сам спрабаваў адным махам пераскочыць прорву да свету ботаў, мне вельмі не хапала падобнага гайда. Гайда, у якім не прапускаецца відавочныя і простыя для любога IT-спецыяліста рэчы.
У далейшым я планую пост пра тое, як зрабіць сваё першае прыкладанне на ReactNative у такім жа стылі, падпісвайцеся!
Крыніца: habr.com