Python ile Telegram Bot Kodlamaya Giriş
Bu gönderide Python kullanarak Telegram bot geliştirmeye giriş yapıyoruz.
Giriş - Kurulumlar
Öncelikle, https://my.telegram.org/auth?to=apps adresine gidip, hesabınızla giriş yaparak API_ID ve API_HASH değerini kopyalayın ve not edin.
Sonrasında Telegramda BotFather botunu aratıp /newbot ile yeni bir bot oluşturup tokeni not alın.
Not: Bu rehberde Python 3.10 baz alınarak, Pyrogram modülü kullanılmıştır.
pip install pyrogram pip tgcrypto pip apscheduler
Giriş - İçe Aktarılacak Modüller
Önceki başlıkta Git Bash ile modülleri kurduktan sonra artık yapmak gereken modülleri dosyaya aktarmak.
import pyrogram import tgcrypto import random from apscheduler.schedulers.asyncio import AsyncIOScheduler from pyrogram.types import * from pyrogram import Client, filters
Pyrogram ve TgCyrpto bot için gerekli, APScheduler ise zamanlama işlemleri için kullanacağımız asenkron modülümüz.
Giriş - İstemci ile Haberleşme
Burada, Pyrogramdan yeni bir nesne türettik, bu Client() nesnesi session_name, api_id, api_hash ve bot token bekler. Geçtiğimiz sayfalarda not aldığınız değerleri bu fonksiyonda aşağıdaki gibi belirtin. Session Name ise botunuzun ismi olabilir.
app = Client(session_name="my_bot", api_id=12345, api_hash="hash", bot_token="bot_token")
Sonraki başlıkta pyrogram'ın gövde elemanlarına değineceğiz. Bundan sonra basit bir Günün Sözü telegram botu yazacağız.
Giriş - Pyrogram Yapısı
app = Client(session_name="bot_name", api_id=12345, api_hash="hash", bot_token="token" ) # Client() sayesinde istemci ile iletişim kurduk
@app.on_message(filters.group)
# filters ile botun çalışacagt yeri, gruplar ile sınırladık
async def(client, message):
# üstte, asenkron bir fonksiyon yazdık,
# bu fonksiyon client ve message parametrelerini alır
await send_message(message.chat.id, text='Merhaba Dünya!' )
# pyrogramda, işlemlerin awaited olması gerekir
# send_message() Sohbet ID'si ve bir mesaj bekler
# 0 anki Sohbet ID'sini, message.chat.id yazarak elde ettik
app.run()
# botu başlattıkBotun İşlevlerini Zamanlamak
APScheduler modülümüz ile asenkron olarak eylemleri zamanlayabiliriz.
Bunun için parametre almayan bir adet fonksiyon tanımlayarak, eylemi await ile başlatmadan saf halde Scheduler'e göndermeliyiz.
def job():
app.send_message(chat_id, 'Kodların Tercümanı' )
# chat_id için @username_to_id_bot'u kullanın
# @app.on_message() işlemi olmadığı için anlık chat_id alamıyoruz.
scheduler = AsyncIOScheduler(timezone="Europe/Istanbul")
# Istanbul saatine göre bir Scheduler nesnesi oluşturduk
scheduler.add_job(job, "interval", hours=24)
# İşlemi her 24 saatte bir tekrarlaması için zamanladık
# hours yerine, minutes, seconds, days vesaire yazabilirsiniz
scheduler.start( )
# zamanlayıcıyı başlattıkGünün Sözü Uygulaması
Aşağıdaki Github reposuna girip, sozler.txt'yi indirin.
Aşağıda sadece sözleri alabilmek için gereksiz alanları pas geçerek filtreledik.
with open('sozler.txt', 'r', encoding='utf8') as s:
sentences = s.read().split()
array = []
for sentence in sentences:
if not sentence.startswith(' ') and sentence.startswith('"'):
array.append(sentence)Günün Sözü Uygulaması II
Sonlara yaklaşıyoruz! Bu liste ortalama 1500 farklı söz içeriyor bu yüzden random ile karıştırarak kullanmamız gerekecek.
# İçe Aktarılacaklar Buraya Gelecek from datetime import datetime as d # Ek Modül # Sözler Buraya Gelecek
array = [ "Öfke her zaman hüsranla sonuçlanan beklentilerden gelir.", "Başkaları ile ilgili canımızı sıkan her şey kendimizi daha iyi anlamamıza yardımcı olabilir.", "...." ] random.shuffle(array) # listeyi karıştırdık arr = array[0] # karıştırılan listenin ilk elemanını aldık
app = Client(session_name="bot_name", api_id=12345,
api_hash="hash", bot_token="token")
dx = d.now().today()date = {"day": dx.day, "month":dx.month, "year": dx.year,
"hour":dx.hour, "minute": dx.minute}
# datetime'dan dönen zamanı isteğimize göre parçaladıkmonths = ["", "Ocak", "Şubat", "Mart", "Nisan","Mayıs", "Haziran","Temmuz","Ağustos","Eylül", "Ekim", "Kasım", "Aralık"]
pattern = f'Bugün, {date["day"]} {months[date["month"]]}
{date["year"]}\n\n'
# günün sözü için bir desen oluşturduk
def gununsozu():
app.send_message(chat_id, text=f'{pattern}{arr}')scheduler = AsyncIOScheduler(timezone="Europe/Istanbul") scheduler.add_job(jobs, "interval", hours=24)
scheduler.start() # eylemi zamanladık
app.run() # botumuzu başlattık
Örneğimiz hazır. Artık tek yapmanız gereken kodları toparlamak ve Heroku'ya deploy etmek.
Son Sözler - Deploy
Deploy için gönderimize buradan göz atabilirsiniz.
Bu gönderide elimden geldiğince Pyrogramdan bahsetmeye ve örnekle pekiştirmeye çalıştım, Pyrogram modülü hakkında daha detaylı bilgi için:
Dokümantasyon: https://docs.pyrogram.org/