Φτιάξε το δικό σου Telegram Bot (Οδηγός για τελείως αρχάριους)

Μετά την ψιλο-επιτυχημένη δημιουργία τεσσάρων δικών μου bot στο Telegram, είπα να σας μεταλαμπαδέψω λίγη από την γνώση που απέκτησα μετά από τόσο κόπο.

Κατ’αρχάς, τι είναι το Telegram και γιατί να θέλω να φτιάξω bot…

Το Telegram είναι ένα πρόγραμμα επικοινωνίας μέσω μηνυμάτων που υποστηρίζει κείμενο,εικόνα, βίντεο, κλήσεις κτλ.
Τα bot στο Telegram είναι “χρήστες” που εκτελούν ό,τι διεργασία τους πεις. Ουσιαστικά το bot χρησιμοποιεί το API του Telegram για να επικοινωνήσει με τον υπολογιστή σου.

Εγώ έχω φτιάξει (μέχρι στιγμής) τρία bot-άκια:

  • στο ένα του στέλνεις link από youtube/reddit/twitter κτλ και σου στέλνει πίσω το βίντεο που περιλαμβάνει ο σύνδεσμος
  • στο άλλο του στέλνεις link από youtube και σου στέλνει πίσω ένα αρχείο ήχου (mp3)
  • το τρίτο του στέλνεις ένα βίντεο και στο μετατρέπει σε gif

Πριν ξεκινήσω να σου λέω πώς να φτιάξει το πρώτο bot-άκι σου, να δούμε τι θα χρειαστείς:

  • έναν υπολογιστή με Linux
  • λίγες γνώσεις command line
  • τα προγράμματα curl και jq

(Σημείωση: ο οδηγός μου είναι για να φτιάξεις script σε bash το οποίο θα επικονωνεί με το bot. Εναλλακτικά, μπορεί να γίνει και με python αλλά αυτό θα είναι θέμα για άλλο οδηγό.)

Και πάμε τώρα στο ψητό:

  1. Βήμα 1ο) Πας στον botfather (Telegram: Contact @BotFather) και αφού πατήσεις Start να ξεκινήσει γράφεις την εντολή /newbot για να σου φτιάξει ένα καινούριο bot-άκι. Θα σου γράψει “Alright, a new bot. How are we going to call it? Please choose a name for your bot.” όπου βάζεις ένα όνομα για το bot-άκι σου. Το όνομα δεν έχει σημασία, μπορείς να το αλλάξεις μετά.
  2. Βήμα 2ο) Αφού βάλεις όνομα θα σου πει να του βάλεις ένα username, το οποίο θα πρέπει να καταλήγει σε “bot”. Όπως λέει και ο botfather: “Good. Now let’s choose a username for your bot. It must end in bot. Like this, for example: TetrisBot or tetris_bot.”. Αφού βάλεις και το όνομα θα σου βγάλει ένα κείμενο όπου θα σου λέει το API TOKEN (πάρα πολύ σημαντικό!!). Σημείωσε το κάπου γιατί θα το χρειαστείς. Δες την παρακάτω εικόνα: στο κίτρινο θα αναγράφεται το username του bot, στο ροζ το API TOKEN

image

  1. Βήμα 3ο) Αφού φτιάξαμε το μποτάκι, μπορούμε πλέον να “μιλάμε” μαζί του, χρησιμοποιώντας το API TOKEN που μας έδωσε νωρίτερα. Θα χρησιμοποιήσουμε το πρόγραμμα CURL για να κάνουμε τις διάφορες διεργασίες μας. Ως πρώτη ενέργεια θα στείλουμε ένα απλό κείμενο “test” στο μποτάκι μέσα από το Telegram (αυτό το κάνουμε για να καταγραφεί κάτι, αλλιώς θα μας γυρίσει κενό στο επόμενο βήμα).
  2. Βήμα 4ο) Αφού το κάνουμε αυτό, γράφουμε σε command line την εντολή curl "https://api.telegram.org/bot<API TOKEN>/getUpdates | jq -r" όπου αντικαθιστάς το <API TOKEN> με αυτό που σου έδωσε ο botfather. Θα σου βγει στο τερματικό ένα τέτοιο αποτέλεσμα:

Με μωβ είναι το API TOKEN από το δικό σου bot και με κίτρινο, στο id είναι το αναγνωριστικό του λογαριασμού που έχεις στο Telegram. Για κάθε χρήστη είναι μοναδικό. Το χρειαζεσαι για να στείλεις μήνυμα στον εαυτό σου.
5. Βήμα 5ο) Γράφοντας την εντολή curl "https://api.telegram.org/bot<API TOKEN>/sendMessage?chat_id=<TO CHAT ID ΣΟΥ>&text=Το+πρώτο+σου+μηνυμα+στο+bot" θα δεις ότι θα σου έρθει το πρώτο μήνυμα από το command line στο Telegram bot που έφτιαξες!

Συγχαρητήρια. Πέρασες την πρώτη πίστα για την δημιουργία του πρώτου σου Telegram bot!

Στην επόμενη φάση θα φτιάξουμε ένα σκριπτάκι το οποίο θα κοιτάει κάθε 2-3 δευτερόλεπτα το bot-άκι μας και θα στέλνει πίσω απάντηση αν υπάρχει κάτι νέο.

#!/bin/bash

# Φτιάχνει ένα αρχείο (αν δεν υπάρχει) όπου κρατάει τα τελευταία requests που έχει επεξεργαστεί από το bot
linuxuser_bot_requests_file="$HOME/telegram-requests.txt"
if [ ! -f  "$HOME/telegram-requests.txt" ];then
    touch "$HOME/telegram-requests.txt"
fi

# Εδώ βάζεις το δικό σου API TOKEN από το botfather (χωρίς <>, μόνο γράμματα και αριθμούς
linuxuser_bot_api_token="<API TOKEN>"

# Λειτουργία που ελέγχει το μποτάκι για νέες ενημερώσεις
function check_telegram_bot () {
    # Στοιχεία που θα χρειαστούμε από την τελευταία ενημέρωση στο bot
    linuxuser_bot_latest_update=$(curl -s "https://api.telegram.org/bot$linuxuser_bot_api_token/getUpdates" | jq -r '.result | .[length -1]')
    linuxuser_bot_updateID=$(echo $linuxuser_bot_latest_update | jq -r '.update_id')
    linuxuser_bot_chat_id=$(echo "$linuxuser_bot_latest_update" | jq -r '.message.chat.id')
    linuxuser_bot_first_name=$(echo "$linuxuser_bot_latest_update" | jq -r '.message.from.first_name')
    linuxuser_bot_last_name=$(echo "$linuxuser_bot_latest_update" | jq -r '.message.from.last_name')
    linuxuser_bot_username=$(echo "$linuxuser_bot_latest_update" | jq -r '.message.from.username')
    linuxuser_bot_chatID=$(echo "$linuxuser_bot_latest_update" | jq -r '.message.from.id')
    linuxuser_bot_message=$(echo "$linuxuser_bot_latest_update" | jq -r '.message.text')
    linuxuser_bot_photo_id=$(echo "$linuxuser_bot_latest_update" | jq -r '.message.photo[1].file_id')
    linuxuser_bot_animation_id=$(echo "$linuxuser_bot_latest_update" | jq -r '.message.animation.file_id')
    linuxuser_bot_video_id=$(echo "$linuxuser_bot_latest_update" | jq -r '.message.video.file_id')

    # Εαν δεν έχει ήδη επεξεργαστεί την τελευταία request, προχωράει και κάνει ό,τι του γράψεις μετά το then
    if ! grep -wq "$linuxuser_bot_updateID" "$linuxuser_bot_requests_file"; then
        echo "Doing something"
        curl -S "https://api.telegram.org/bot$linuxuser_bot_api_token/sendMessage?chat_id=$linuxuser_bot_chatID&text=Έλαβα+τo+μήνυμα+σου."
        echo "$linuxuser_bot_updateID" >> "$linuxuser_bot_requests_file"
    fi
}

# Τρέχει την λειτουργία κάθε 3 δευτερόλεπτα για να ελέγξει για νέα συμβάντα στο bot
while true; do
    echo "Checking telegram bot"
    check_telegram_bot
    sleep 2s
done

Σώζεις τον κώδικα ως .sh αρχεία (παράδειγμα telegram-test-bot.sh) και το τρέχεις με bash telegram-test-bot.sh στο τερματικό.

Εαν όλα πήγαν καλά θα δεις κάτι παρόμοι στο bot-άκι σου όταν του στείλεις μήνυμα:

image

(με κόκκινο θα εμφανιστεί το username σου)

Από εκεί και πέρα μπορείς να δεις στο documentation του Telegram API για το πώς μπορείς να στείλεις εικόνα, ήχο, αρχεία, κείμενο κτλ

Οι δυνατότητες είναι απεριόριστες!

Καλή επιτυχία…

(Μετά την προτροπή του @asfodelakis παραθέτω και ένα άλλο εγχειρίδιο για περισσότερο διάβασμα: Telegram Bot Handbook)

11 «Μου αρέσει»