Jeg begyndte at dykke ind i IT-verdenen for kun tre uger siden. Seriøst, for tre uger siden forstod jeg ikke engang HTML-syntaksen, og mit kendskab til programmeringssprog stoppede med skolens Pascal-program fra for 10 år siden. Men jeg besluttede mig for at tage til et IT-lejr, hvor børnene kunne have glæde af at lave en bot. Jeg tænkte, at det næppe kunne være så svært.
Dette markerede begyndelsen på en lang rejse, hvor jeg:
- opsatte en cloud-server med Ubuntu,
- registrerede mig på GitHub,
- lærte den grundlæggende syntaks i JavaScript,
- læsede en masse artikler på engelsk og russisk,
- lavede endelig bot'en,
- og skrev til sidst denne artikel.
Det endelige resultat så nogenlunde sådan ud:

Jeg vil sige med det samme, at denne artikel er for begyndere — for at forstå, hvordan man laver elementære ting fra helt nul.
Og for avancerede programmører — bare for at få dem til at grine lidt.
1. Hvordan skriver man kode i JS?
Jeg vidste, at jeg skulle starte med at forstå sprogets syntaks. Valget faldt på JavaScript, simpelthen fordi det næste skridt for mig var at lave en applikation i ReactNative. Jeg begyndte med Codecademy og var meget begejstret. De første 7 dage er gratis. Rigtige projekter. Jeg kan varmt anbefale det. Det tog mig omkring 25 timer at gennemføre. I virkeligheden var meget ikke alt sammen nyttigt. Her er strukturen af kurset og detaljer om det første modul.

2. Hvordan registrerer man en bot?
I starten hjalp denne her fra bloggen af en vis Archakov mig meget. Han forklarer begyndelsen grundigt. Men det vigtigste, der er, er instruktioner til registreringen af en bot. Jeg ville ikke kunne skrive det bedre, og da det er den nemmeste del, vil jeg bare skrive essensen. Du skal oprette en bot og få dens API. Dette gøres gennem en anden bot — @BotFather. Find ham i Telegram, skriv til ham, gennemgå den enkle proces, og få (gem!) API-nøglen (en række tal og bogstaver). Jeg fik brug for det senere.

3. Hvordan ser bot-koden ud?
Efter lang tids studier af artikler indså jeg, at jeg skulle bruge et eller andet bibliotek (tredjeparts kode i modulformat), så jeg ikke skulle have det svært med at lære Telegrams API og skrive store stykker kode fra bunden. Jeg fandt rammeværket , som skulle forbindes til noget ved hjælp af npm eller yarn. Det er cirka sådan, jeg dengang forstod, hvad deployment af botten bestod af. Du må gerne grine her. Jeg tager det ikke ilde op. De eksempler, der er angivet nederst på siden, har været meget hjælpsomme ved den senere oprettelse af botten.

3. Hvordan man laver sin egen cloud-server for 100 kroner
Efter mange søgninger indså jeg, at ’npm’-kommandoen fra billedet ovenfor hører til kommandolinjen. Kommandolinjen findes overalt, men for at kunne køre den, skal NodePackageManager installeres. Problemet var, at jeg programmerede på en PixelBook med ChromeOS. Jeg vil springe et stort afsnit over om, hvordan jeg lærte Linux — for de fleste er det tomt og unødvendigt. Hvis du har Windows eller MacBook, har du allerede en konsol.
Kort sagt, jeg installerede Linux via Crostini.
Men i processen indså jeg, at for at botten kunne køre kontinuerligt (og ikke kun når min computer var tændt), havde jeg brug for en cloud-server. Jeg valgte Jeg indsatte 100 kroner og købte den billigste Ubuntu-server (se billedet).

4. Hvordan forbereder man serveren til at køre botten
Efter dette indså jeg, at jeg skulle oprette en mappe på serveren, hvor jeg kunne placere filen med kode. I konsollen (som kan åbnes direkte på siden ved at klikke på 'Åbn konsol') indtastede jeg
mkdir botbot — это стало название моей папки. После этого я установил npm и Node.js, что позволит запускать мне потом код из файликов с разрешением *.js
sudo apt update
sudo apt install nodejs
sudo apt install npmJeg anbefaler kraftigt at konfigurere forbindelsen til serveren gennem din egen konsol på dette stadie. Her er Det vil give dig mulighed for at arbejde direkte med serveren via din computers konsol.
5. Hvordan skriver man koden til den første bot.
Og nu er det bare en åbenbaring for mig. Ethvert program er blot linjer af tekst. De kan indtastes hvor som helst, gemmes med den ønskede filtype, og det er det. Du er fantastisk. Jeg brugte , men reelt kan man bare skrive i den standard notesblok. Det vigtigste er at gemme filen med den rigtige filtype. Det er ligesom at skrive tekst i Word og gemme den.
Jeg oprettede en ny fil, hvor jeg indtastede koden fra eksemplet på telegraf-siden og gemte den som index.js (det er slet ikke nødvendigt at navngive filen sådan, men det er almindeligt). Vigtigt — erstat BOT_TOKEN med din API-nøgle fra punkt to.
const Telegraf = require('telegraf')
const bot = new Telegraf(process.env.BOT_TOKEN)
bot.start((ctx) => ctx.reply('Velkommen!'))
bot.help((ctx) => ctx.reply('Send mig et klistermærke'))
bot.on('sticker', (ctx) => ctx.reply(''))
bot.hears('hi', (ctx) => ctx.reply('Hej der'))
bot.launch()6. Hvordan man uploader koden til serveren via github
Nu måtte jeg finde en måde at uploade denne kode til serveren og køre den. Det blev en udfordring for mig. Til sidst, efter lang tids søgen, indså jeg, at det ville være lettere at oprette en fil på github, som tillader at opdatere koden ved hjælp af en kommando i terminalen. Jeg registrerede en konto på og lavede , hvor jeg uploadede filen. Efter det måtte jeg finde ud af, hvordan jeg skulle konfigurere upload af filer fra min (åbne!) konto til serveren i mappen bot (hvis du er blevet logged ud — skriv cd bot).
7. Hvordan uploader man filer til serveren via github del 2
Jeg havde brug for at installere et program på serveren, der ville hente filer fra git. Jeg installerede git på serveren ved at skrive i terminalen
apt-get install gitDerefter måtte jeg konfigurere upload af filer. For at gøre dette skrev jeg i kommandoprompten
git clone git://github.com/b0tank/bot.git bot
В итоге все из проекта загрузилось на сервер. Ошибкой на данном этапе было, что я, по сути, сделал вторую папку внутри уже существующей папки bot. Адрес до файла выглядел как */bot/bot/index.js
Jeg besluttede at ignorere dette problem.
Og for at hente bibliotket telegraf, som vi anmoder om i den første linje af koden, skal du skrive følgende kommando i terminalen.
npm install telegraf8. Hvordan starter man botten
For at gøre dette, mens du er i mappen med filen (for at skifte mellem mapper i terminalen - udfør kommandoen i formatet cd bot For at sikre, at du er, hvor du skal være, kan du skrive en kommando, der viser alle filer og mapper i terminalen ls -a
For at starte skrev jeg i terminalen
node index.js
Hvis der ikke er nogen fejl — alt er godt, botten kører. Søg efter den i telegram. Hvis der er en fejl — brug din viden fra punkt 1.
9. Hvordan kører man botten i baggrunden
Du vil hurtigt forstå, at botten kun kører, når du selv sidder i terminalen. For at løse dette problem brugte jeg kommandoen
screenDerefter vil en skærm med noget tekst dukke op. Det betyder, at alt er i orden. Du er på den virtuelle server i skyløsningen. For at forstå bedre, hvordan det hele fungerer — . Bare gå ind i din mappe og skriv kommandoen for at starte botten
node index.js10. Hvordan fungerer botten, og hvordan udvider man dens funktionalitet
Hvad kan vores bot fra eksemplet? Den kan
bot.start((ctx) => ctx.reply('Velkommen!'))sige «Velkommen!» ved opstart (prøv at ændre teksten)
bot.help((ctx) => ctx.reply('Send mig et klistermærke'))som svar på den standardkommando \/help sende beskeden «Send mig et klistermærke»
bot.on('sticker', (ctx) => ctx.reply(''))sende en godkendelse som svar på et klistermærke
bot.hears('hi', (ctx) => ctx.reply('Hej der')) svare «Hej der», hvis nogen skriver ‘hi’
bot.launch()

Hvis du ser på koden på , vil du hurtigt forstå, at jeg ikke er langt fra denne funktionalitet. Hvad der bruges aktivt, er funktionen ctx.replyWithPhoto Den giver mulighed for at sende et bestemt billede eller gif som svar på en bestemt tekst.
En væsentlig del af koden blev skrevet af børn i alderen 11-13 år, som jeg gav adgang til botten. De indtastede deres user-cases. Jeg tror, det er let at bestemme, hvilken del der blev lavet af dem.
For eksempel, når der sendes en besked som «jake», kommer der en gif med en kendt karakter fra tegneserien Adventure Time.

For at udvikle botten videre skal man se eksempler på at tilføje tastatur, f.eks.
11. Sådan opdaterer du koden og genstarter botten
Husk, at du skal opdatere koden ikke kun på github, men også på serveren. Det er enkelt — stop botten (tryk ctrl+c),
— indtast i konsollen, mens du er i den ønskede mappe, git pull
— start igen botten med kommandoen node index.js
END
Mange af de ting, der er beskrevet i denne fil, vil være super åbenlyse for avancerede programmører. Men da jeg selv forsøgte at springe over kløften til bot-verdenen, manglede jeg virkelig en sådan guide. En guide, der ikke udelader de indlysende og simple ting for enhver IT-specialist.
I fremtiden planlægger jeg et indlæg om, hvordan man laver sin første app i ReactNative i samme stil, så husk at følge med!
Kilde: habr.com
