Telegram botları; bir komuta otomatik cevap veren basit yardımcılardan, veri tabanına bağlı tam uygulamalara kadar geniş bir yelpazede kullanılabilir. Bu derste python-telegram-bot kütüphanesiyle temel bir bot yazacağız.
BotFather ile Bot Oluşturmak
Telegram'da @BotFather hesabına gidip /newbot komutunu gönderin. Botunuza bir isim ve bot ile bitmesi zorunlu bir kullanıcı adı verdiğinizde, size bir token (API anahtarı) verilir — bu token'ı kimseyle paylaşmayın, botunuzu tamamen ele geçirmesine izin verir.
Token'ı Koddan Ayrı Tutmak
Token'ı doğrudan koda yazmak yerine ayrı bir metin dosyasında tutup oradan okumak, hem kodu paylaşırken token'ı yanlışlıkla sızdırmanızı önler hem de token değiştiğinde kodu değiştirmenize gerek bırakmaz:
with open("token.txt") as f:
TOKEN = f.read().strip()
Kütüphaneyi Kurmak ve İlk Botu Yazmak
pip install python-telegram-bot==13.15
from telegram.ext import Updater, CommandHandler
def start(update, context):
update.message.reply_text("Merhaba, hoş geldiniz!")
updater = Updater(TOKEN)
dispatcher = updater.dispatcher
dispatcher.add_handler(CommandHandler("start", start))
updater.start_polling()
updater.idle()
Updater, botun Telegram sunucularıyla olan bağlantısını yönetir.dispatcher, gelen komutları ilgili fonksiyonlara yönlendirir.CommandHandler("start", start), kullanıcı/startyazdığındastartfonksiyonunun çalışmasını sağlar.updater.start_polling(), botu sürekli yeni mesaj var mı diye kontrol eden bir döngüye sokar.
Birden Fazla Komut Eklemek
Aynı mantıkla istediğiniz kadar komut ekleyebilirsiniz:
def site(update, context):
update.message.reply_text("https://kushaengineering.com")
def video(update, context):
update.message.reply_text("https://youtube.com/@KushaSoftware")
dispatcher.add_handler(CommandHandler("site", site))
dispatcher.add_handler(CommandHandler("video", video))
HTML Formatlı Mesaj Göndermek
Kalın, italik gibi biçimlendirmeler eklemek isterseniz, parse_mode parametresini belirtmeniz gerekir — aksi halde <b> gibi etiketler düz metin olarak gönderilir:
from telegram import ParseMode
def site(update, context):
update.message.reply_text(
"<b>Web sitem:</b> https://kushaengineering.com",
parse_mode=ParseMode.HTML,
)
Önizlemeyi Kapatmak
Bir link gönderdiğinizde Telegram otomatik olarak bir önizleme kartı ekler — bu bazen istenmeyebilir. disable_web_page_preview=True parametresiyle kapatabilirsiniz:
update.message.reply_text(link, disable_web_page_preview=True)
Sırada Ne Var?
Sırada, aiogram kütüphanesiyle butonlu (inline keyboard) bir Telegram botu yapmayı göreceğiz — bu, kullanıcı deneyimini komut yazmaktan çok daha ileri taşıyan bir yaklaşım.