Sadece üç hafta önce kendimi BT dünyasına kaptırmaya başladım. Cidden, üç hafta önce HTML sözdizimini bile anlamıyordum ve programlama dilleriyle tanışmam 10 yıl önceki Pascal'daki okul müfredatıyla sona erdi. Ancak çocukların bot yapmasının güzel olacağı bir BT kampına gitmeye karar verdim. O kadar da zor olmadığına karar verdim.
Bu benim için uzun bir yolculuğa başladı:
- bulut sunucusu dağıtıldı Ubuntu,
- GitHub'a kayıtlı,
- temel JavaScript sözdizimini öğrendi,
- İngilizce ve Rusça tonlarca makale okudum,
- sonunda bir bot yaptım
- Sonunda bu yazıyı yazdım.
Nihai sonuç şuna benziyordu:

Bunun yeni başlayanlar için bir makale olduğunu hemen söyleyeceğim - sadece temel şeylerin sıfırdan nasıl yapılacağını anlamak için.
Ve ayrıca - ileri düzey programcılar için - onları biraz güldürmek için.
1. JS'de kod nasıl yazılır?
En azından öncelikle dilin sözdizimini anlamanın gerekli olduğunu anladım. Seçim JavaScript'e düştü çünkü benim için bir sonraki adım ReactNative'de bir uygulama oluşturmaktı. ile başladım Codecademy'deydim ve çok memnun kaldım. İlk 7 gün ücretsizdir. Gerçek projeler. Ben tavsiye ediyorum. Tamamlanması yaklaşık 25 saat sürdü. Aslında hepsi faydalı değildi. Dersin yapısı ve ilk bloğun detaylı görünümü bu şekildedir.

2. Bir bot nasıl kaydedilir?
Bu başlangıçta bana çok yardımcı oldu belli bir Archakov'un blogundan. En başından çiğniyor. Ancak asıl önemli olan, bir botun kaydedilmesiyle ilgili talimatlardır. Daha iyisini yazamam ve bu en kolay kısım olduğu için sadece ana fikri yazacağım. Bir bot oluşturmanız ve API'sini almanız gerekir. Bu, başka bir bot olan @BotFather aracılığıyla yapılır. Onu telgrafta bulun, ona yazın, basit yolu izleyin ve bir API anahtarı alın (kaydedin!) (bu bir sayı ve harf kümesidir). Daha sonra işe yaradı.

3. Bot kodu neye benziyor?
Makaleleri uzun süre inceledikten sonra, Telegram API'sini incelemek ve sıfırdan büyük kod parçaları oluşturmak konusunda endişelenmenize gerek kalmaması için bir tür kütüphane (modül formatında üçüncü taraf kodu) kullanmanın faydalı olduğunu fark ettim. Çerçeveyi buldum npm veya iplik kullanılarak bir şekilde bir şeye bağlanması gerekiyordu. Bir botun konuşlandırılmasının nelerden oluştuğunu kabaca bu şekilde anladım. Burada gülün. Gücenmeyeceğim. Botun sonraki oluşturulması sırasında bana en çok sayfanın altındaki örnekler yardımcı oldu:

3. 100 ruble karşılığında kendi bulut sunucunuzu nasıl oluşturabilirsiniz?
Uzun araştırmalar sonucunda, yukarıdaki resimde yer alan 'npm' komutunun komut satırını ifade ettiğini fark ettim. Komut satırı her yerde bulunur, ancak çalıştırmak için NodePackageManager'ı yüklemeniz gerekir. Sorun şu ki, ben ChromeOS yüklü bir PixelBook'ta programlama yapıyordum. Nasıl öğrendiğime dair büyük kısmı atlayacağım. Linux - Çoğu insan için anlamsız ve gereksiz. Eğer sizde varsa Windows İster MacBook olsun, ister MacBook, zaten bir konsolunuz var.
Özetle, ben şunu söyledim: Linux Crostini aracılığıyla.
Ancak bu süreçte botun sürekli çalışabilmesi için (sadece bilgisayarım açıkken değil) bir bulut sunucusuna ihtiyacım olduğunu fark ettim. Seçtim 100 ruble yatırdım ve en ucuz sunucuyu satın aldım. Ubuntu (Resme bakınız).

4. Bot çalıştırmak için sunucu nasıl hazırlanır
Bundan sonra sunucuda kod metnini içeren dosyayı koyacağım bir tür klasör oluşturmam gerektiğini fark ettim. Bunu yapmak için konsola (“Konsolu aç” düğmesiyle doğrudan web sitesinde çalıştırın) girdim.
mkdir botbot - bu benim klasörümün adı oldu. Bundan sonra, *.js çözünürlüğündeki dosyalardan kod çalıştırmamı sağlayacak olan npm ve Node.js'yi yükledim.
sudo apt update
sudo apt install nodejs
sudo apt install npmBu aşamada konsolunuz üzerinden sunucuya bağlantı kurmanızı önemle tavsiye ederim. Burada Bu, sunucuyla doğrudan bilgisayarınızın konsolu üzerinden çalışmanıza olanak tanır.
5. İlk botunuzun kodunu nasıl yazarsınız?
Ama artık bu benim için sadece bir keşif. Herhangi bir program yalnızca metin satırlarından oluşur. İstenilen uzantıyla kaydedilerek herhangi bir yere yerleştirilebilirler, hepsi bu. Güzelsin. kullandım , ancak gerçekte standart bir not defterine yazabilirsiniz. Önemli olan dosyayı daha sonra istenen uzantıya kaydetmektir. Bu, Word'de metin yazıp kaydetmeye benzer.
Telegraf sayfasındaki örnekteki kodu içine yerleştirdiğim ve index.js dosyasına kaydettiğim yeni bir dosya oluşturdum (genel olarak dosyayı bu şekilde adlandırmak gerekli değildir, ancak bu gelenekseldir). Önemli - BOT_TOKEN yerine ikinci paragrafta yer alan API anahtarınızı ekleyin.
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 aracılığıyla sunucuya kod nasıl yüklenir?
Şimdi bu kodu bir şekilde sunucuya yükleyip çalıştırmam gerekiyordu. Bu benim için bir meydan okuma haline geldi. Sonuç olarak, uzun çilelerden sonra, github'da konsoldaki bir komutu kullanarak kodu güncellemenize olanak tanıyan bir dosya oluşturmanın daha kolay olacağını fark ettim. üzerinde bir hesap kaydettim Ve yaptım dosyayı yüklediğim yer. Bundan sonra, hesabımdan (açık!) bot klasöründeki sunucuya dosya yüklemeyi nasıl ayarlayacağımı bulmam gerekiyordu (aniden bırakırsanız, cd bot yazmanız yeterli).
7. Github bölüm 2 aracılığıyla sunucuya dosya yükleme
Sunucuya git'ten dosya indirecek bir program kurmam gerekiyordu. Git'i sunucuya konsola yazarak yükledim
apt-get install gitBundan sonra dosya yüklemeyi yapılandırmam gerekiyordu. Bunu yapmak için komut satırına yazdım
git clone git://github.com/b0tank/bot.git bot
Sonuç olarak projedeki her şey sunucuya yüklendi. Bu aşamadaki hata, esasen mevcut bot klasörünün içinde ikinci bir klasör oluşturmamdı. Dosyanın adresi şuna benziyordu: */bot/bot/index.js
Bu sorunu görmezden gelmeye karar verdim.
Ve kodun ilk satırında istediğimiz telegraf kütüphanesini yüklemek için konsola komutu yazın.
npm install telegraf8. Bot nasıl başlatılır
Bunu yapmak için, dosyanın bulunduğu klasördeyken (konsol aracılığıyla klasörden klasöre geçmek için format komutunu çalıştırın) cd bot Olmanız gereken yerde olduğunuzdan emin olmak için, orada bulunan tüm dosya ve klasörleri konsolda görüntüleyecek bir komut girebilirsiniz. ls -a
Başlamak için konsola girdim
node index.js
Herhangi bir hata yoksa her şey yolundadır, bot çalışmaktadır. Onu telgrafta ara. Bir hata varsa, bilginizi 1. maddeden uygulayın.
9. Arka planda bir bot nasıl çalıştırılır
Oldukça hızlı bir şekilde botun yalnızca siz konsolda oturduğunuzda çalıştığını fark edeceksiniz. Bu sorunu çözmek için şu komutu kullandım:
screenBundan sonra, bazı metinlerin bulunduğu bir ekran görünecektir. Bu her şeyin yolunda olduğu anlamına gelir. Bir bulut sunucusundaki sanal sunucudasınız. Her şeyin nasıl çalıştığını daha iyi anlamak için - . Sadece klasörünüze gidin ve botu başlatmak için komutu girin
node index.js10. Bot nasıl çalışır ve işlevselliği nasıl genişletilir?
Örnek botumuz ne yapabilir? Yapabilir
bot.start((ctx) => ctx.reply('Welcome!'))"Hoş geldiniz!" deyin başlangıç anında (metni değiştirmeyi deneyin)
bot.help((ctx) => ctx.reply('Send me a sticker'))standart /help komutuna yanıt olarak “Bana bir çıkartma gönder” mesajını gönderin
bot.on('sticker', (ctx) => ctx.reply(''))bir çıkartmaya yanıt olarak onay gönderme
bot.hears('hi', (ctx) => ctx.reply('Hey there')) ona "merhaba" yazarsa "Merhaba" diye cevapla
bot.launch()

Eğer koda bakarsanız , o zaman bu işlevsellikten pek uzaklaşmadığımı hemen anlayacaksınız. Aktif olarak kullanılan şey fonksiyondur ctx.replyWithPhoto Belirli bir metne yanıt olarak belirli bir fotoğraf veya gif göndermenizi sağlar.
Kodun önemli bir kısmı bota erişim izni verdiğim 11-13 yaş arası çocuklar tarafından yazıldı. Kullanıcı durumlarını girdiler. Hangi parçanın onlar tarafından yapıldığını söylemek kolay sanırım.
Örneğin, “Jake” mesajı, Adventure Time çizgi filminden ünlü bir karakterin yer aldığı bir GIF alacak.

Botu daha da geliştirmek için bir klavye bağlamanız gerekir; örneklere bakın, örneğin:
11. Kodu güncelleme ve botu yeniden başlatma
Kodu yalnızca github'da değil, sunucuda da güncellemeniz gerektiğini unutmayın. Bunu yapmak kolaydır; botu durdurun (ctrl+c tuşlarına basın),
- hedef klasördeyken konsola girin, git pull
— komutuyla botu tekrar başlatıyoruz node index.js
BİTİŞ
Bu dosyada anlatılanların çoğu ileri düzey programcılar için son derece açık olacaktır. Ancak botların dünyasına giden uçurumun üzerinden tek hamlede atlamaya çalıştığımda, böyle bir rehberi gerçekten kaçırdım. Her BT uzmanı için bariz ve basit olan şeyleri gözden kaçırmayan bir rehber.
İlerleyen zamanlarda ReactNative'de aynı tarzda ilk başvurunuzu nasıl yapacağınıza dair bir yazı planlıyorum, abone olun!
Kaynak: habr.com
