TelegramBot
March 13, 2020

Python ile Telegram Bot Yapımı | 2

Geçen bölümde hafif bir giriş yapmıştık. Şimdi kullanabilecek metodları biraz daha inceleyelim. Her zamanki gibi öncelikle bir bot oluşturuyoruz.

from telebot import TeleBot

token = "xxxxxxxxx:xxxxxx-xxxxx-xxxxx-xxxxx"
#Kendi tokeniniz.

bot = TeleBot(token=token)

Şimdi metodları küçük örneklerle anlatmaya başlayalım. Buradaki metodların kullanımında Python ile Telegram Bot Yapımı | 1 de anlatılan message objesi ile elde edilebilecekleri kullanabilirsiniz.

  • bot.reply_to() : Bot bir mesajı yanıtlayarak cevaplar.
    • message (zorunlu) : Handler içinde gelen message objesi.
    • text (zorunlu) : Gönderilecek mesaj.
  • bot.send_message() : Bot bir mesaj gönderir.
    • chat_id (zorunlu) : Sohbet için tanımlanmış mesaj ID'si.
    • text (zorunlu) : Gönderilecek mesaj.
    • disable_web_page_prewiew (isteğe bağlı) : True değeri girilmesi durumunda mesajda gönderilen bağlantının önizlemesini gizler.
    • reply_to_message_id (isteğe bağlı) : Yanıtlanacak mesajın sohbetteki ID numarası
    • reply_markup (isteğe bağlı) : Mesaj ile gönderilecek satır içi düğmeler veya butonlar. Satır içi düğme ve butonların oluşturulması ileride anlatılacak.
    • parse_mode (isteğe bağlı) : "Markdown" ve "HTML" değerlerini alır. Seçilen değere göre mesajı düzenler. <b>Kalın mesaj</b> Markdown için , **Kalın mesaj** ise HTML içindir. Tüm kullanımları için HTML ve Markdown formlatlarına bakabilirsiniz.
    • disable_notification (isteğe bağlı) : True değeri girilmesi durumunda mesajı gönderdiğinde kullanıcıya bildirim gitmez.
  • bot.send_chat_action() : Bot bir aksiyon gönderir.
    • chat_id (zorunlu) : Sohbet için tanımlanmış mesaj ID'si.
    • action (zorunlu) : Gönderilecek aksiyon. action parametresinin alabileceği değerler; typing, upload_photo, record_video, upload_video, record_audio, upload_audio, upload_document, find_location, record_video_note upload_video_note.
  • bot.send_photo() : Bir fotoğraf gönderir.
    • chat_id (zorunlu) : Sohbet için tanımlanmış mesaj ID'si.
    • photo (zorunlu) : Gönderilecek fotoğrafın "rb" kipinde açılmış hali, gönderilecek fotoğrafın yolu ya da fotoğraf daha önce gönderilmiş bir fotoğraf ise fotoğrafın file_id değeri.
    • caption (isteğe bağlı) : Fotoğrafın altındaki yazı.
    • reply_to_message_id (isteğe bağlı) : Yanıtlanacak mesajın sohbetteki ID numarası
    • reply_markup (isteğe bağlı) : Mesaj ile gönderilecek satır içi düğmeler veya butonlar. Satır içi düğme ve butonların oluşturulması ileride anlatılacak.
    • parse_mode (isteğe bağlı) : "Markdown" ve "HTML" değerlerini alır. Seçilen değere göre mesajı düzenler. <b>Kalın mesaj</b> Markdown için , **Kalın mesaj** ise HTML içindir. Tüm kullanımları için HTML ve Markdown formlatlarına bakabilirsiniz.
    • disable_notification (isteğe bağlı) : True değeri girilmesi durumunda mesajı gönderdiğinde kullanıcıya bildirim gitmez.

Diğer send_xxx olan metodların da büyük bir farkı olmadığından bu kadar örnek ile bırakıyorum. Metodların alabileceği parametlere Telegram API sinden ulaşabilirsiniz. Biz daha çok örneklendirme üzerinden göstereceğiz. Bir önceki yazımızda bizim yazdıklarımızı tekrar eden bir bot yaptık ama biz bu bota bir fotoğraf attığımızda bize bu fotoğrafı geri göndermedi. Şimdi aynı botun fotoğraf tekrarı şeklini yaparak send_photo() kullanımını örneklendirelim. Biz bir fotoğraf gönderdiğimizde message objesinde gelen değerler:

{
  "update_id": 143943755,
  "message": {
    "message_id": 181525,
    "from": {
      "id": 1022602366,
      "is_bot": false,
      "first_name": "Emre",
      "username": "KullaniciAdi0",
      "language_code": "tr"
    },
    "chat": {
      "id": 1022602366,
      "first_name": "Emre",
      "username": "KullaniciAdi0",
      "type": "private"
    },
    "date": 1584107092,
    "photo": [
      {
        "file_id": "AgACAgQAAxkBAAECxRVea45UrbL3FarMYTLJ6dae8ijJ3wACzrIxG0sgYFO3zQABqW9bQ0vZeKAbAAQBAAMCAANtAAMMowgAARgE",
        "file_unique_id": "AQAD2XigGwAEDKMIAAE",
        "file_size": 9968,
        "width": 320,
        "height": 320
      },
      {
        "file_id": "AgACAgQAAxkBAAECxRVea45UrbL3FarMYTLJ6dae8ijJ3wACzrIxG0sgYFO3zQABqW9bQ0vZeKAbAAQBAAMCAAN4AAMNowgAARgE",
        "file_unique_id": "AQAD2XigGwAEDaMIAAE",
        "file_size": 23651,
        "width": 640,
        "height": 640
      }
    ],
    "caption": "Merhaba"
  }
}

Şimdi bize dönen message objesindekileri kullanarak gönderdiğimiz fotoğrafı bize geri gönderecek bir bot oluşturabiliriz. Message objesinin gönderdiklerine bakmak için @jsondumpbot kullanabilirsiniz.

from telebot import TeleBot
token = ""

bot = TeleBot(token)

@bot.message_handler(content_types=['photo']) #Fotoğraf gönderilirse...
def fotograf_tekrari(m):    
     chat_id = m.chat.id #sohbetin ID numarası    
     file_id = m.photo[-1].file_id #fotoğrafa ait file_id değeri    
     caption = m.caption #fotoğraf altındaki yazı    
     bot.send_photo(chat_id, file_id, caption) #Fotoğraf gönder


bot.polling() #Gelecek mesajları dinlemeye hazır...

Şimdi biraz daha farklı bir şeyler yapmayı deneyelim. Kullanıcımızın bize gönderdiği resimleri kaydederek sonradan kullanıcı istediğinde ona geri gönderelim.

from telebot import TeleBot
from time import sleep
token = ""

bot = TeleBot(token)
kayit = {}

@bot.message_handler(content_types=['photo'])
def fotograf_geldi(m):    
    sohbet_turu = m.chat.type
    if sohbet_turu == "private":
         kullanici_id = m.from_user.id
         if str(kullanici_id) not in kayit.keys():
              kayit[str(kullanici_id)] = []
         file_id = m.photo[-1].file_id
         fotografin_yazisi = m.caption
         kayit[str(kullanici_id)].append({"file_id" : file_id,
                                          "capt": fotografin_yazisi})        
         bot.reply_to(m, "Fotoğraf kaydedildi.")
            
@bot.message_handler(['fotograflarim'])
def fotograflari_gonder(m):
    sohbet_turu = m.chat.type    
    if sohbet_turu == "private":
         kullanici_id = m.from_user.id        
         if str(kullanici_id) not in kayit.keys():
              kayit[str(kullanici_id)] = []            
              bot.reply_to(m, "Kayıtlı bir fotoğraf bulunamadı.")
              return        
         sayi = 0        
         for i in kayit[str(kullanici_id)]:            
              bot.send_photo(kullanici_id, i.get("file_id"), i.get("capt"))            
              sayi += 1            
              sleep(1)
         bot.send_message(kullanici_id, f"Toplam {sayi} tane fotoğraf gönderildi.")
            
bot.polling()

Yorum satılarının eklenmiş hali Github KekikTelegram'a eklenmiştir. İsterseniz oradan daha detaylı bir inceleme yapabilirsiniz. Bir dahaki bölümde daha farklı konulara değinmek üzere...

📃 Yandex.Disk Bünyemizdeki veriler 1 TB'a ulaşmıştır :) 🎊

Paylaşılan Kursların Tümünü @KekikKahve Grubu notlarından Çağırabilirsiniz..

🕊️ Bize oy verip paylaşarak destek olmaya ne dersin? ✌🏼