Започнах да се потапям в света на ИТ само преди три седмици. Наистина, преди три седмици дори не разбирах синтаксиса на HTML, а запознаването ми с програмните езици завършваше с училищната програма по Pascal отпреди 10 години. Въпреки това реших да отида на ИТ лагер, където за децата щеше да е хубаво да направят бот. Реших, че това едва ли е толкова сложно.
От тук започна дългият път, в рамките на който аз:
- развих облачен сървър с Ubuntu,
- регистрирах се в GitHub,
- научих базовия синтаксис на JavaScript,
- прочетох тонове статии на английски и руски език,
- накрая направих бота,
- написах тази статия, накрая.
Крайната визия изглеждаше горе-долу така:

Да кажа веднага, това е статия за начинаещи — просто за да разберат как да правят елементарни неща от самата нулева точка.
А също и за напреднали програмисти — просто за да ги развеселим малко.
1. Как да пишем код на JS?
Разбрах, че е добре поне да се запозная със синтаксиса на езика. Изборът падна на JavaScript, просто защото следващата стъпка за мен беше създаването на приложение на ReactNative. Започнах с Codecademy и останах много впечатлен. Първите 7 дни са безплатни. Реални проекти. Препоръчвам. Изминалото време на курса отне около 25 часа. Всъщност не всичко от него ми беше полезно. Ето как изглежда структурата на курса и подробно първият блок.

2. Как да регистрирам бота?
В началото ми помогна много тази от блога на някой Арчаков. Той обяснява самото начало. Но най-важното е, че там има — инструкции за регистрация на бота. Не мога да напиша по-добре от това, и тъй като това е най-лесната част, просто ще напиша същността. Трябва да създадете бот и да получите неговия API. Това се прави чрез друг бот — @BotFather. Намерете го в телеграм, напишете му, преминете през простия процес и получете (запазете!) API ключа (това е набор от цифри и букви). Той ми беше полезен по-късно.

3. Как изглежда кодът на бота?
След дълго проучване на статии, разбрах, че е добре да използвам някаква библиотека (външен код в модулен формат), за да не се мъча с изучаването на API на Telegram и създаването от нулата на големи парчета код. Намерих фреймворка , който трябваше да се свърже с нещо чрез npm или yarn. Така разбирах тогава от какво се състои разгръщането на бота. Можете да се смейте. Няма да се обидя. Най-много при последващото създаване на бота ми помогнаха примерите, посочени в долната част на страницата:

3. Как да създадете собствен облачен сървър за 100 рубли
След дълги търсения разбрах, че командата ‘npm’ от изображението по-горе се отнася за командния ред. Командният ред е навсякъде, но за да може да се изпълни, е нужно да инсталирате NodePackageManager. Проблемът беше, че програмирах на PixelBook с ChromeOS. Ще пропусна този голям блок за това как научавах Linux — за повечето хора това е празно и ненужно. Ако имате Windows или MacBook, вече имате конзола.
Ако трябва да го кажа с две думи, инсталирах Linux през Crostini.
Въпреки това, по време на процеса разбрах, че за непрекъсната работа на бота (а не само когато компютърът ми е включен) ми трябва облачен сървър. Избрах Вложих 100 рубли и купих най-евтиния сървър Ubuntu (вижте изображението).

4. Как да подготвите сървъра за стартиране на бота
След това разбрах, че трябва да създам папка на сървъра, в която да поставя файла с кода. За целта в конзолата (можете да я стартирате направо на сайта, като кликнете върху бутона „Отвори конзола“) написах
mkdir botbot — это стало название моей папки. После этого я установил 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, който позволява обновяване на кода чрез команда в конзолата. Регистрирах акаунт на и направих , където качих файла. След това трябваше да разбера как да настроя качването на файлове от моя (открит!) акаунт на сървера в папка 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 telegraf8. Как да стартирате бота
За целта, находящи се в папката с файла (чтобы переходить из папки в папку через консоль — выполняйте команду формата cd bot За да се уверите, че сте там, където трябва, можете да въведете команда, която ще покаже в конзолата всички файлове и папки, които там се намират. ls -a
За стартиране въведох в конзолата
node index.js
Ако няма никаква грешка — всичко е наред, ботът работи. Търсете го в телеграм. Ако има грешка — прилагайте знанията си от точка 1.
9. Как да стартирате бота в режим на фоново изпълнение
Достатъчно бързо ще разберете, че ботът работи само когато вие самите сте в конзолата. За да решите този проблем, използвах командата
screenСлед това ще се появи екран с някакъв текст. Това означава, че всичко е наред. Вие сте на виртуален сървър на облачен сървър. За да разберете по-добре как всичко това работи — . Просто влезте в папката си и въведете командата за стартиране на бота
node index.js10. Как работи ботът и как да разширите функционалността му
Какво може нашият bot от примера? Той може
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. Досетете се лесно коя част е направена от тях.
Например, на съобщението „джейк“ идва gif с известен персонаж от анимацията Adventure Time.

За да развиете бота допълнително, при свързване на клавиатурата е нужно да се гледат примери, например,
11. Как да обновяваме кода и да рестартираме бота
Не забравяйте, че трябва да обновявате кода не само на github, но и на сървъра. Прави се лесно — спираме бота (натискаме ctrl+c),
— въвеждаме в конзолата, докато сме в целевата папка, git pull
— отново стартираме бота с командата node index.js
END
Много от нещата, описани в този файл, ще бъдат напълно очевидни за напреднали програмисти. Въпреки това, когато сам се опитвах да прескоча пропастта към света на ботите, много ми липсваше такъв гид. Гид, в който не се пропускат очевидни и лесни неща за всеки IT специалист.
В бъдеще планирам пост за това как да направя своето първо приложение на ReactNative в същия стил, абонирайте се!
Източник: habr.com
