Python ile telegram'a bot yazmak

Halihazırda herkes whatsapp'tan telegrama geçerken, telegrama bot geliştirme konusunu ele alalım.

Dilerseniz bizim botumuzu kullanabilirsiniz, gruplariniza ekleyebilirsiniz: http://t.me/paylasiobot

BIzim botumuza her gun yeni komutlar eklenmekte simdilik bunlar var:

/help
/kacpara BTC TRY
/kacpara
/keps

Reklamlarin ardindan kendi botumuza ge.iyoruz.

Bot yaratmak

  1. Telegramdan botfather'a mesaj atiyoruz. Bu linki kullanarak ulasabilirsiniz: https://t.me/botfather
  2. /newbot yazdigimiz zaman botfather bize yonergeler verecek. Isim secimi vs gibi. Kullanici adlari alinmis olabiliyor o yuzden bir iki varyasyon deneyin.
  3. Daha sonra bot yaratimi tamamlaninca botfather size bir token verecek. Bunu kaybetmeden bir yere yazin.

Bot ile Tek yönlü mesaj göndermek

Bu sadece deneme amacli, asil kod asagida ama bash ile de curl kullanarak soyle bir POST request atip mesaj yollayabilirsiniz.

curl -s -X POST https://api.telegram.org/BOT_TOKEN/sendMessage -d chat_id=CHAT_ID -d text="Merhaba bot ile ilk mesajim"

curl yuklu degilse (muhtemelen windows'tasinizdir)

  • Windows'ta choco install curl
  • Linux'ta sudo apt install curl
  • Mac'te brew install curl

Bot ile çift yönlü mesaj göndermek ve kodu

Burda kodu kisa tutmak icin tek bir kutuphane kullanacagiz o da python-telegram-bot.

Bunu yuklemek icin pip kullanacagiz. Eger pip ne bilmiyorsaniz, python paketleriyle araniz yoksa once surayi okumanizi tavsiye ederim: Python virtualenv kullanimi: https://paylas.io/p/5e0dcb0e5f14746202430cde

pip install python-telegram-bot
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Paylas.io katkilariyla python botu.
"""
import random
import logging

from telegram import Update
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext

# Biraz logging ekleyelim.
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.DEBUG
)

logger = logging.getLogger(__name__)


def command_start(update: Update, context: CallbackContext) -> None:
    """/start geldiginde Naber cevabi yazan komut."""
    update.message.reply_text('Naber')


def command_ozlu_soz(update: Update, context: CallbackContext) -> None:
    """/ozlusoz geldiginde random bir ozlu soz secip cevap yazan komut."""
    update.message.reply_text(random.choice([
        'Kaça almışsan ucuza almışsın',
        'Ask arkadasliga donusebilir ama arkadaslik aska asla (ters mi?)',
        ]))


def command_help(update: Update, context: CallbackContext) -> None:
    """/help yazildiginda desteklenen komutlari listeleyen komut."""
    update.message.reply_text('Komutlar:\n/start\n/help\n/ozlusoz')


def echo(update: Update, context: CallbackContext) -> None:
    """Gelen mesaji aynen geri yaz."""
    update.message.reply_text(update.message.text)


def main():
    # Updater mesajlari dinleyen modul.
    # Buraya botfather'dan aldigimiz tokenimizi tırnak işareti icinde yaziyoruz.
    # Cunku o bir string.
    updater = Updater(TOKENINI_YAZ, use_context=True)

    # Get the dispatcher to register handlers
    dispatcher = updater.dispatcher

    # Komutlarin handlerinlarini ekle
    dispatcher.add_handler(CommandHandler("start", command_start))
    dispatcher.add_handler(CommandHandler("help", command_help))
    dispatcher.add_handler(CommandHandler("ozlusoz", command_ozlu_soz))

    # Bilinmeyen komutlar icin ayni mesaji geri yaz.
    dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))

    # Mesaj dinleme islemini baslat.
    updater.start_polling()
    updater.idle()


if __name__ == '__main__':
    main()

Yukaridaki dosyayi bot.py olarak kaydediyoruz. Sonra botu calistirmak icin asagidaki komutu yaziyoruz. Sonsuz dongude bir server baslayacak ve surekli gelen mesajlari dinleyecek.

python bot.py

Deneme amacli kendi botunuza kendiniz mesaj atip komutlari calistirabilirsiniz.