Python ile Telegram Botu Yapımı

Python ile Telegram Botu Yapımı

Python ile Telegram Botu Yapımı

 Merhaba arkadaşlar bu yazımda sizlere Python kullanarak nasıl telegram için bot yapabileceğinizi anlatacağım, bu yazıda aslında ilk olarak botfather i kullanarak bot oluşturmayı ve daha sonrasında ise basit bir şekilde komut almayı ve komuta yanıt vermeyi anlatacağım.

Bot Father Nedir?

Hangi dili kullanırsanız kullanın Python ile bot oluşturmak istiyorsanız, özellikle illegal değil de legal yollardan bot oluşturmak istiyorsanız yapmanız gereken ilk adım Telegram üzerinden botfather a mesaj atmak ve botunuzu oluşturmak olacaktır.

Bot Father a mesaj atmak için aşağıdaki bağlantıyı kullanıp @botfather ile mesaj başlatın.

Bot Father a ilk mesaj attığınız zaman size kullanabileceğiniz bütün komutları gösterecektir.

Telegram BotFather

BotFather Komutları

Bu komutları incelememiz gerekir ise hemen açıklayayım.
/newbot - Yeni bir bot oluşturmanızı sağlar.
/mybots - Var olan botlarınızı gösterir ve düzenlemenizi sağlar.

Bot Düzenle
/setname - Var olan botunuzun adını değiştirmenizi sağlar.
/setdescription - Var olan botunuzun açıklamasını değiştirmenizi sağlar.
/setuserpic - Var olan botunuzun profil resmini değiştirmizi sağlar.
/setcommands - Var olan botunuza komut menüsü eklemenizi ve düzenlemenizi sağlar.
/deletebot - Var olan botunuzu silmenizi sağlar.

Bot Ayarları
/token - Botunuz için yeni bir token oluşturur.
/revoke - Botunuz için var olan bir tokenin erişimini iptal eder.
/setinline - Konuşma içi modunu açar / kapatır.
/setinlinegeo - Konum isteklerini açar / kapatır.
/setinlinefeedback - Geri dönüşleri ayarlar.
/setjoingroups - Botun gruplara eklenip eklenemeyeceğini ayarlar.
/setprivacy - Gizlilik ayarlarını yapmanızı sağlar.

Oyunlar
/mygames - Oyunlarınızı düzenlemenizi sağlar.
/newgame - Oyun oluşturmanızı sağlar.
/listgames - Oyunlarınızı listeler.
/editgame - Oyunu düzenlemenizi sağlar.
/deletegame - Var olan bir oyunu silmenizi sağlar.

Bot Father kullanarak Yeni Bot Oluşturma

Bot Oluşturma

Bot oluşturmak için adımlarımızı listeleyelim.
  • İlk olarak bot Father a bot oluşturmak için "/newbot" komutunu giriyoruz.
  • Komutun ardından botumuzun adını belirliyoruz ve giriyoruz. 
    • "deneme" adını girdim ben yukarıdaki görselde.
  • Botumuz için kullanıcı adı giriyoruz. 
    • Kullanıcı adı "@deneme" gibi çağrılacağı addır.
    • Kullanıcı adının sonunda "bot" veya "Bot" olmak zorundadır.
    • Kullanıcı adı başkası tarafından alınmamış olması gerekmektedir.
      • Ben yukarıda "deneme_bot" adını almayı denedim ancak başkası tarafından alındığı için uyarı verdi ve "deneme_urhoba_bot" kullanıcı adını aldım.
  • Bu işlemler tamamlandıktan sonra size "Done!" ile başlayan bir mesaj gelecek ve içinde "API Key" bulunacaktır.
    • Bu API Key i saklayın.
    • API Key ile kodlarımızın botumuz ile iletişim kurmasını sağlayacağız.

Python ile Telegram Botu Yapımı (Basit)

İlk olarak python için yazılmış olan telegram bot kütüphanesini kurmamız gerekiyor. Telegram botunu kurmak için pip kullanabilirsiniz.

pip install python_telegram_bot # Python
pip3 install python_telegram_bot # Python 3

Yukarıdaki komutlardan herhangi birini kullanıp telegram kütüphanesini indiriyoruz.
Kurulum tamamlandıktan sonra artık proje kodlarımıza geçebiliriz.

# This project created by urhoba
# www.urhoba.net

from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update, ParseMode # Telegram kütüphanemizi ekliyoruz, Update ve ParseMode fonksiyonları daha detaylı mesaj gönderebilmemizi sağlıyor.
from telegram.ext import * # Mesajları almak, göndermek ve diğer işlemler için kullandığımız kütüphanemiz.


def StartCommand(update, context): # İlk komut fonksiyonumuz
	# Mesajımızı yazıyoruz.
    text = f'''
Merhaba, <b>{update.message.from_user.first_name}</b>
    '''
    context.bot.send_message(chat_id=update.message.chat_id, text=text, parse_mode=ParseMode.HTML) # Botu kullanan kullanıcıya mesaj gönderiyoruz.

def ErrorExcept(update, context):
	# Hata mesajı ekrana yazdırıyoruz.
	print(f"Telegram bot hatası : Update {update} caused error {context.error}")

def main():
    updater = Updater("Bot API", use_context=True) # Telegram botumuzu oluşturuyoruz.
    dp = updater.dispatcher # Komutları yakalaması için dispatcher oluşturuyoruz.

    dp.add_handler(CommandHandler("start", StartCommand)) # Burada ilk komutumuzu oluşturuyoruz "/start" verildiği zaman çalışacak fonksiyonu çekiyoruz.

    dp.add_error_handler(ErrorExcept) # Hata yakalama komutumuz, botta bir hata meydana geldiği zaman bu fonksiyon çağırılıyor.
    updater.start_polling(1) # Botun kaç saniye içinde yanıt vereceğini belirliyor ve botu başlatıyoruz.
    updater.idle() # Bota mesaj atılmasa bile komutların okunmasını beklemesini söylüyoruz.

main()
  

Evet arkadaşlar çok basit düzeyde telegram botumuzu bu şekilde oluşturabiliyoruz, gelin bir de biraz daha gelişmiş bir botu nasıl yapabileceğimize bakalım.

Botu Geliştirmek İçin Kullanabileceğimiz Komutlar/Özellikler

InlineKeyboardButton 

telegram bot button oluşturma


Bu özellik ile birlikte botunuza butonlar ekleyebilirsiniz ve bu butonları kullanarak kullanıcıların etkileşime geçmesini sağlayabilirsiniz.

# Butonları gösteren komutumuz
def ButtonCommand(update, context):
    words = ("button1", "button2")
    buttons = []
    for word in words:
        buttons.append([InlineKeyboardButton(word, callback_data=word)]) # InlineKeyboardButton("Button üzünde yazan kelime", callback_data="Butonun döndürdüğü değer")
    reply_markup = InlineKeyboardMarkup(buttons)
    context.bot.send_message(chat_id=update.message.chat_id, text=f"Buttonlar\n{update.message.text}",
                                 parse_mode=ParseMode.HTML, reply_markup=reply_markup)

# Butonun döndürdüğü değeri yakaladığımız komut
def ButtonCallBack(update:Update, context):
    query = update.callback_query # Butondan dönen değeri alıyoruz
    query.answer() # Butondan dönen değeri işliyoruz
    query.message.reply_text(text=query.data, parse_mode=ParseMode.HTML) # Butondan dönen değeri mesaj olarak atıyoruz

  
Bu fonksiyonlarımız ile butonlarımızı oluşturup dönen değerlerini yakalayabiliyoruz, main in içine butondan dönen değeri yakalama için olan komutumuzu eklemeyi unutmayalım!

dp.add_handler(CallbackQueryHandler(ButtonCallBack)) # Butondan gelen komutu yakalayan komut 

Yani bütün kodlarımız şu şekilde olması gerekiyor.

  # This project created by urhoba
# www.urhoba.net

from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update, ParseMode, replymarkup
from telegram.ext import *

from LogManager import LogManager
from Settings import TelegramSettings


def StartCommand(update, context):
    text = f'''
Merhaba, {update.message.from_user.first_name}
    '''
    context.bot.send_message(chat_id=update.message.chat_id, text=text, parse_mode=ParseMode.HTML)

def ButtonCommand(update, context):
    words = ("button1", "button2")
    buttons = []
    for word in words:
        buttons.append([InlineKeyboardButton(word, callback_data=word)]) # InlineKeyboardButton("Button üzünde yazan kelime", callback_data="Butonun döndürdüğü değer")
    reply_markup = InlineKeyboardMarkup(buttons)
    context.bot.send_message(chat_id=update.message.chat_id, text=f"Buttonlar\n{update.message.text}",
                                 parse_mode=ParseMode.HTML, reply_markup=reply_markup)

def ButtonCallBack(update:Update, context):
    query = update.callback_query # Butondan dönen değeri alıyoruz
    query.answer() # Butondan dönen değeri işliyoruz
    query.message.reply_text(text=query.data, parse_mode=ParseMode.HTML) # Butondan dönen değeri mesaj olarak atıyoruz


def ErrorExcept(update, context):
    logManager = LogManager("TelegramLog")
    logManager.AddLog(f"Telegram bot hatası : Update {update} caused error {context.error}")

def main():
    updater = Updater(TelegramSettings.telegramAPI, use_context=True)
    dp = updater.dispatcher

    dp.add_handler(CommandHandler("start", StartCommand))
    dp.add_handler(CommandHandler("button", ButtonCommand)) # Butonları gösteren komut

    dp.add_handler(CallbackQueryHandler(ButtonCallBack)) # Butondan gelen komutu yakalayan komut

    dp.add_error_handler(ErrorExcept)
    updater.start_polling(1)
    updater.idle()

main()
   

Ses Göndermek

Telegram Bot Ses Göndermek


Botunuzun ses göndermesini sağlamak içni aşağıdaki komutu kullanabilirsiniz.
context.bot.send_audio(chat_id=update.message.chat_id, audio=open('seskonumu.mp4', 'rb')) # 
  

Video Göndermek

Telegram bot video gönderme


Botunuzun video göndermesini istiyorsanız aşağıdaki komutu kullanabilirsiniz.
  context.bot.send_video(chat_id=update.message.chat_id, video=open('video konumu.mp4', 'rb'), supports_streaming=True) # burada send_video komutunu kullanıyoruz.
  send_video(chat_id.message.chat_id, video=open('video konumu', 'rb), supports_streaming=True) video konumunu girdikten sonra botumuz videoyu gönderecektir.
  


Evet arkadaşlar telegram bot ile ilgili bütün özellikleri açıklamam hem çok uzun olur, hem de sizin için oldukça karmaşıklaşabilir ancak bu kadar sizin için yeterli olacaktır.
Eğer ki sizin için yeterli değilse buradaki dokümantasyon inceleyebilirsiniz ya da bana aşağıda yorum olarak sorabilirsiniz.


Eko Mesaj Gönderme

Düzenleme : Arkadaşlar Eko yapmayı göstermeyi unutmuşum hemen bunu da ek olarak sizlere göstereyim.

Eko için bir fonksiyon oluşturuyoruz ve bunun ile gelen mesajı geri gönderiyoruz.
def EkoCommand(update, context):     context.bot.send_message(chat_id=update.message.chat_id, text=update.message.text, parse_mode=ParseMode.HTML) 

yukarıdaki fonksiyonu gelen mesajı sürekli dinlemek için main içinde çağırmamız gereken komutumuz.
    dp.add_handler(MessageHandler(Filters.text & ~Filters.command, EkoCommand)) 

Artık kullanıcı mesaj attığı zaman attığı mesaj ona geri gönderilecektir.

Eko Mesaj Göndermek