Node.js ile Telegram Botu yapma ve ücretsiz sunucuya yükleme 👾

Bu yazıda adım adım Telegram botu nasıl yapılır ve nasıl sunucuya yüklenir anlattım.
Projenin kaynak kodlarını bu github adresinde bulabilirsiniz : github.com/brkunver/basitkodbot

Başlamadan önce gerekenler

  • Telegram hesabınız olması ve tarayıcıdan telegrama girmeniz
  • Github hesabınız sunucuya yüklemek için gerekli
  • Bilgisayarınızda Git versiyon kontrol sistemi olması
  • Node.js yüklemeniz
  • Son ve en önemlisi aktif bir internet bağlantısı

BotFather ile yeni bir bot oluşturma

Öncelikle Telegrama gidip Bot oluşturma ve kontrol etme aracı olan BotFather isimli kullanıcıdan yeni bir bot oluşturup kaydedicez.

Telegram web sürümüne gidin, Botfather yazın ve karşınıza onaylı Botfather hesabı çıkacak ona girin

telegram botfather

Girdikten sonra START diyerek yeni bir sohbet başlatın

telegram botfather sohbet

START dedikten sonra aşağıdaki sohbet bölümü açıldı. /newbot yazın sohbete. böylelikle yeni bir bot oluşturmak istediğimizi söylüyoruz

botfather yeni bot

Şimdi /newbot yazdım bana botun adını sordu, istediğinizi yazın
Ardından botun kullanıcı adını soruyor. Dikkat : Kesinlikle sonu bot ile biten bir kullanıcı adı seçin

Önemli : Size burada bir token verdi, bu token çok önemli bunu saklayın bir yerde. Bununla botu kullanacağız.
Ben bu yazıdan sonra botu sileceğim için token’in görünmesi sorun değil benim için

telegram bot

Bot oluşturma işlemimiz bu kadardı.

Grup ayarları

Son olarak botun gruplara girip mesaj atabilmesi için ayarlardan izin vericez.

/mybots komutunu yazın. Botfather size botlarınızı gösterecek. Oradan oluşturduğunuz botu seçin

Bot Settings kısmına gelin.

telegram bot

Allow Groups? yazısına basın
Eğer : “Turn groups off” yazıyorsa ayara gerek yok Back to Settings’e basın. Turn groups on yazıyorsa o butona basıp grup erişimini açın.

telegrom bot ayarları

Gördüğünüz gibi aşağıdaki fotoda gruplar açık ellemeye gerek yok

telegram grup botu

Grupta komuta ihtiyaç olmadan botun cevap verme ayarı

Botlar normalde / işareti ile başlayan komutlara cevap veriyor, /sarki gibi, bunu kapatmak ve her mesaja cevap vermesini sağlamak için Group Privacy ayarına gelin ve Turn off yapın. Ardından ayarlara geri dönün

botfather ayarlar

Botu bir gruba ekleme

Botu bu aşamada kullanacağınız bir gruba kullanıcı adını aratarak ekleyebilirsiniz

botu ekleme

Şimdilik BotFather işlemleri bu kadar şimdi Kod kısmına geçiyoruz.

Node.js ile botu yazma

Öncelikle botu yazacağınız konumda npm init ile yeni bir node projesi oluşturun.

Projenizi bir kod editörü ile açın. Benim tavsiyem vscode.

Package.json oluştuktan sonra kod editörü ile dosyayı açıp script kısmına start scripti eklememiz lazım. script’in içine aşağıdaki scripti ekleyin

"start": "node index.js"

Bunlardan sonra package.json şuna benzer görünmeli. Author vs kısımları size özel olacak tabii ki
Önemli olan kısmı “main” girdisi “index.js” olsun ve “start” scripti “node index.js” olsun

package.json

Gerekli kütüphaneleri yükleme

Bize gereken kütüphaneler şunlar :

Aşağıdaki konsol komutu ile yükleyin

npm i node-telegram-bot-api dotenv

npm paketleri

package.json son hali

{
  "name": "basitkodbot",
  "version": "1.0.0",
  "description": "basitkod.com için yapılmış telegram botu",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "keywords": [
    "basitkod.com",
    "telegram",
    "bot"
  ],
  "author": "basitkod.com",
  "license": "ISC",
  "dependencies": {
    "dotenv": "^16.3.1",
    "node-telegram-bot-api": "^0.64.0"
  }
}

Git reposu oluşturma

Yine konsol kullanarak bir git repository oluşturmamız lazım ki hem github’a hem sunucuya yükleyelim

Ben kolay yoldan vscode ile oluşturucam 🙂
vscodeda soldan Source control kısmına gelip Initialize Repository dedim. Siz de buna benzer bir yol izleyin, bende vscode ingilizce.

vscode git

Git ignore dosyası oluşturma

.gitignore dosyası ile github’a ve sunucuya git ile yüklememiz gereken dosyaları ve klasörleri ekleyeceğim

Bunlar node_modules ve .env
Aşağıdaki görselde görebilirsiniz.

git ignore

.env dosyası oluşturup token’ı ekleyelim

Hemen projeye başlamadan önce .env isminde dosya oluşturup size özel token’ınızı ekleyin

token

index.js oluşturarak projeye başlama 🚀

Evet uzun bir kurulum aşamasından sonra artık projeye başlayabiliriz.

index.js oluşturalım ve gerekli kütüphaneleri import ederek başlayalım. Bunlar bot kütüphanesi ve gizli token için olan dotenv

telegram botu import aşaması

Üstteki kodda ne yaptım :
TelegramBot kütüphanesini import ettim.
dotenv kütüphanesini direkt çağırdım ve config() methodu ile .env dosyasının içindekilerini okumasını sağladım, yani token’ı.
token değişkeni oluşturdum ve process.env.token diyerek .env dosyasındaki token’ı buraya aldım ki kullanımı kolay olsun.

Bot değişkeni oluşturma

Şimdi bir bot değişkeni oluşturalım. Her işimizi bu bot değişkeni halledecek.

Aşağıdaki kodu ekleyelim. Burada yeni bir telegram bot nesnesi oluşturuyoruz ve token’ını veriyoruz.

const bot = new TelegramBot(token, { polling: true })

index.js son hali
Artık bu bot nesnesi ile bota komut gönderebiliriz.

telegram botu

Botun grupta mesajlara cevap vermesini sağlamak

Şimdi buraya kadar botu oluşturup, bir gruba eklemiş olmanız lazım

Botumuzun gelen her mesajı okumasını sağlamak için bot.on(“message”, callback()) event listener’ını kullanacağız.

Bu şu demek : mesajları dinle ve her mesaj geldiğinde bu fonksiyonu çağır. Şimdi onu yazalım

Aşağıdaki kod parçasını ekleyelim. burada bot her message’ı dinliyor. ve ardından bir fonksiyon çağrısı yapacak. şimdilik içi boş onu dolduracağız

bot.on("message", (msg) => {
    //her mesaj geldiğinde buradaki kodları çalıştıracak.
})

Bu aşamada öncelikle bot her yere mesaj atmasın sadece grubumuza mesaj atsın diye grubumuzun idsini bulalım. Tarayıcıda telegramdan grubunuza giderseniz üstteki linkte grup idnizi görebilirsiniz. Bunu bulalım.

# işaretinden sonra gelen kısım grubunuzun idsi, bu durumda benimki -4051753739 oluyor.

telegram grup id

Bu id’yi .env dosyamıza ekledim :

.env son hali

Gruba mesaj gönderme

Şimdi bot’un gelen mesajında grubun id’sine bakıyorum. Eğer benim grubun id’si ise benim grubuma mesaj gönderiyorum

Projeyi konsoldan npm start ile çalıştırın
Grubunuza gidip mesaj atın
Aşağıdaki sonucu gördüyseniz projemiz başarılı 🎉

bot gruba mesaj atıyor

Botu özelleştirme

Projemizi yaptık buradan sonra botun ne yapacağı sizin kodlama beceriniz ve hayal gücünüze bağlı.

Ben biraz özelleştireceğim çünkü şuan bot tüm mesajlara cevap veriyor.

Ben mesela gelen mesaj sadece “saat kaç” olduğunda saati söylemesi için bir koşul ekledim
Gelen mesajın içeriğine msg.text ile bakıyor ve eğer “saat kaç” ile eşitse şu anki saati alıp gönderiyor. Aksi halde bot mesaj göndermiyor.
Not : kod değişikliği yapınca projeyi tekrar başlatın npm start diyerek.

telegram saat botu

Botun cevabı, gördüğünüz gibi artık her mesaja yanıt vermeyi de bıraktı :

botun cevabı

Evet biraz işlevsiz bir bot ama burada amaç size mantığını göstermek. Mesela yazı tabanlı oyunlar yapabilirsiniz ilk aklıma gelen.

Kişiye göre mesaj atma

Eğer bir kişi mesaj attıysa ona göre cevap verebilirsiniz. bunun için msg.from.username değişkeninden kişiyi kontrol ederiz.

if(msg.from.username = "kullanıcı_adı"){
  bot.sendMessage(id, "Gruba mesaj at")
}

Githuba ve sunucuya botu yükleme

Öncelikle Github’a botu yüklememiz lazım. Githubda gizli veya açık bir repo oluşturabilirsiniz size kalmış.

Ben public repo’ya attım : https://github.com/brkunver/basitkodbot

githuba yükleme

Botu ücretsiz sunucuya yükleme

Ben bu aşamada render.com sitesini seçtim çünkü hem ücretsiz hem kolay ve githubdan kodu çekebiliyor.
not : ücretsiz ama belli bir sınırı var.

render.com sitesine gidip github hesabınızla üye olabilirsiniz
not : sponsorsuz

render.com

Üye olduktan sonra dashboard’a gelin yeni proje oluşturun. web service diyin

yeni render projesi

Sonra github hesabınızdan importu seçin

deploy bot

Oluşturma ekranında projenin ismini vs. girin ardından altta Advanced kısmında ortam değişkenlerinde gizli token’larınızı girin

secret token

Bu aşamadan sonra botun çalışması lazım.

Son olarak…

Botu bilgisayarınızda ücretsiz çalıştırabilirsiniz ama sürekli mesajları dinlesin istiyorsanız bir sunucuya yüklemeniz gerekli

Sunucular genelde ücretli. Bazı siteler belli bir miktar kullanıma kadar botunuzu barındırıyor ardından kapanacaktır bunlar aklınızda bulunsun.

Ve yine bilmeniz gereken sunucu işleri biraz zahmetli ve zor bu yüzden beceremeyebilirsiniz, ben de çok hata yapıyorum ve çözemiyorum bazen.

Ayrıca token’larınızı .envde saklayın ve github’a yüklemeyin

Projenin tam kodu için github’a bakabilirsiniz : https://github.com/brkunver/basitkodbot
Veya telegram bot API rehberi için : https://core.telegram.org/bots/api

Veya aşağıdaki index.js’e göz atabilirsiniz

// basitkod.com için yazılmış telegram botu

const TelegramBot = require("node-telegram-bot-api") // bot kütüphanesi
require("dotenv").config() // ortam değişkenlerini çağırdım

const token = process.env.token // token değişkenimi aldım koda

const bot = new TelegramBot(token, { polling: true }) // yeni bir bot oluşturdum

// bot bir mesaj aldığında
bot.on("message", (msg) => {
  
  // gelen mesajı gönderen grubun id'si
  const id = msg.chat.id

  // eğer benim grupla aynıysa
  if (id == process.env.grup_id) {
    
    // ve mesaj 'saat kaç' diyorsa
    if (msg.text == "saat kaç") {
     
      // şuanki saati al
      let saat = new Date().getHours()
      
      // ve o gruba gönder
      bot.sendMessage(id, `saat şuan : ${saat}`)
    }
  }
})

Okuduğunuz için teşekkürler…

Yorum bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top