Telegram bot σε Python. Ένας πλήρης οδηγός για να γράψετε ένα bot με συναλλαγματικές ισοτιμίες από την αρχή

Τα ρομπότ στο Telegram είναι προγράμματα που βοηθούν στη δημιουργία επαφής με το κοινό ή στην απλοποίηση ενεργειών που προηγουμένως έπρεπε να εκτελούνται με μη αυτόματο τρόπο. Αυτά τα προγράμματα είναι γραμμένα ειδικά για την πλατφόρμα messenger. Τα bots λειτουργούν με αυτόν τον τρόπο: ο χρήστης στέλνει μια εντολή μέσω της γραμμής εισόδου και το σύστημα απαντά με ένα κείμενο ή ένα διαδραστικό μήνυμα. Μερικές φορές το πρόγραμμα μιμείται ακόμη και τις ενέργειες ενός πραγματικού προσώπου - ένα τέτοιο bot εμπνέει περισσότερη εμπιστοσύνη μεταξύ των πελατών.

Υπάρχουν διάφοροι τύποι συστημάτων για αυτόματη βοήθεια προς τους χρήστες. Ορισμένα ρομπότ απλώς επικοινωνούν με πελάτες, άλλα παρέχουν τακτικά πληροφορίες. Είναι αδύνατο να χωριστούν ξεκάθαρα τα προγράμματα σε τύπους – οι προγραμματιστές συχνά συνδυάζουν πολλές λειτουργίες σε ένα bot.

Μπορείτε να γράψετε ένα απλό bot για το Telegram με διαδραστικά στοιχεία με τη μορφή κουμπιών στην οθόνη σε 9 βήματα. Ας δούμε αναλυτικά καθένα από αυτά και ας απαντήσουμε σε μερικές ερωτήσεις:

  • πώς να ξεκινήσετε ένα bot?
  • πώς να καταχωρήσετε ένα ενσωματωμένο πληκτρολόγιο από ένα ή περισσότερα κουμπιά.
  • πώς να προγραμματίσετε τα κουμπιά για τις επιθυμητές λειτουργίες.
  • τι είναι η λειτουργία inline και πώς να τη ρυθμίσετε για ένα υπάρχον bot.

Βήμα 0: θεωρητικό υπόβαθρο σχετικά με το Telegram bots API

Το κύριο εργαλείο που χρησιμοποιείται για τη δημιουργία bots του Telegram είναι η διεπαφή προγραμματισμού εφαρμογών HTML ή HTML API. Αυτό το στοιχείο δέχεται αιτήματα επισκεπτών και στέλνει απαντήσεις με τη μορφή πληροφοριών. Τα έτοιμα σχέδια απλοποιούν την εργασία στο πρόγραμμα. Για να γράψετε ένα bot για το Telegram, πρέπει να χρησιμοποιήσετε αυτήν τη διεύθυνση ηλεκτρονικού ταχυδρομείου: https://api.telegram.org/bot/METHOD_NAME

Για τη σωστή λειτουργία του bot, απαιτείται επίσης ένα διακριτικό – ένας συνδυασμός χαρακτήρων που προστατεύει το πρόγραμμα και ανοίγει την πρόσβαση σε αυτό σε αξιόπιστους προγραμματιστές. Κάθε διακριτικό είναι μοναδικό. Η συμβολοσειρά εκχωρείται στο bot κατά τη δημιουργία. Οι μέθοδοι μπορεί να είναι διαφορετικές: getUpdates, getChat και άλλες. Η επιλογή της μεθόδου εξαρτάται από τον αλγόριθμο που περιμένουν οι προγραμματιστές από το bot. Συμβολικό παράδειγμα:

123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

Τα ρομπότ χρησιμοποιούν αιτήματα GET και POST. Οι παράμετροι της μεθόδου πρέπει συχνά να συμπληρώνονται – για παράδειγμα, όταν η μέθοδος sendMessage υποτίθεται ότι στέλνει το αναγνωριστικό συνομιλίας και κάποιο κείμενο. Οι παράμετροι για τη βελτίωση της μεθόδου μπορούν να μεταβιβαστούν ως συμβολοσειρά ερωτήματος URL χρησιμοποιώντας application/x-www-form-urlencoded ή μέσω application-json. Αυτές οι μέθοδοι δεν είναι κατάλληλες για λήψη αρχείων. Απαιτείται επίσης κωδικοποίηση UTF-8. Στέλνοντας ένα αίτημα στο API, μπορείτε να λάβετε το αποτέλεσμα σε μορφή JSON. Ρίξτε μια ματιά στην απάντηση του προγράμματος στην ανάκτηση πληροφοριών μέσω της μεθόδου getME:

ΛΑΒΕΤΕ https://api.telegram.org/bot/getMe{ ok: true, αποτέλεσμα: { id: 231757398, first_name: "Exchange Rate Bot", όνομα χρήστη: "exchangetestbot" } }

Το αποτέλεσμα θα ληφθεί εάν ok ισούται με αληθής. Διαφορετικά, το σύστημα θα υποδείξει σφάλμα.

Υπάρχουν δύο τρόποι για να λάβετε προσαρμοσμένα μηνύματα σε bots. Και οι δύο μέθοδοι είναι αποτελεσματικές, αλλά είναι κατάλληλες σε διαφορετικές περιπτώσεις. Για να λάβετε μηνύματα, μπορείτε να γράψετε με μη αυτόματο τρόπο ένα αίτημα με τη μέθοδο getUpdates – το πρόγραμμα θα εμφανίσει τον πίνακα δεδομένων Ενημέρωση στην οθόνη. Τα αιτήματα πρέπει να αποστέλλονται τακτικά, μετά την ανάλυση κάθε πίνακα, η αποστολή επαναλαμβάνεται. Η μετατόπιση είναι μια παράμετρος που καθορίζει τον αριθμό των εγγραφών που παραλείφθηκαν πριν από τη φόρτωση ενός νέου αποτελέσματος για να αποφευχθεί η επανεμφάνιση ελεγμένων αντικειμένων. Τα οφέλη της μεθόδου getUpdates θα εμφανιστούν εάν:

  • δεν υπάρχει τρόπος να ρυθμίσετε το HTTPS.
  • χρησιμοποιούνται πολύπλοκες γλώσσες σεναρίου.
  • ο διακομιστής bot αλλάζει από καιρό σε καιρό.
  • το bot είναι φορτωμένο με χρήστες.

Η δεύτερη μέθοδος που μπορεί να γραφτεί για τη λήψη μηνυμάτων χρήστη είναι το setWebhook. Χρησιμοποιείται μία φορά, δεν χρειάζεται να στέλνετε συνεχώς νέα αιτήματα. Το webhook στέλνει ενημερώσεις δεδομένων στην καθορισμένη διεύθυνση URL. Αυτή η μέθοδος απαιτεί πιστοποιητικό SSL. Το Webhook θα είναι χρήσιμο σε αυτές τις περιπτώσεις:

  • χρησιμοποιούνται γλώσσες προγραμματισμού Ιστού.
  • το bot δεν είναι υπερφορτωμένο, δεν υπάρχουν πάρα πολλοί χρήστες.
  • ο διακομιστής δεν αλλάζει, το πρόγραμμα παραμένει στον ίδιο διακομιστή για μεγάλο χρονικό διάστημα.

Σε περαιτέρω οδηγίες, θα χρησιμοποιήσουμε το getUpdates.

Η υπηρεσία @BotFather Telegram έχει σχεδιαστεί για τη δημιουργία ρομπότ συνομιλίας. Οι βασικές ρυθμίσεις ορίζονται επίσης μέσω αυτού του συστήματος – το BotFather θα σας βοηθήσει να κάνετε μια περιγραφή, να τοποθετήσετε μια φωτογραφία προφίλ, να προσθέσετε εργαλεία υποστήριξης. Βιβλιοθήκες – σύνολα αιτημάτων HTML για ρομπότ Telegram – είναι διαθέσιμες στο Διαδίκτυο, υπάρχουν πολλές από αυτές. Κατά τη δημιουργία του προγράμματος παραδείγματος, χρησιμοποιήθηκε το pyTelegramBotApi.

Βήμα 1: Υλοποίηση αιτημάτων συναλλαγματικής ισοτιμίας

Πρώτα πρέπει να γράψετε τον κώδικα που εκτελεί τα ερωτήματα. Θα χρησιμοποιήσουμε κατά τη σύνταξη του PrivatBank API, παρακάτω είναι ένας σύνδεσμος προς αυτό: https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5. Πρέπει να χρησιμοποιήσετε αυτές τις μεθόδους στον κώδικά σας:

  • load_exchange – βρίσκει τις συναλλαγματικές ισοτιμίες και εμφανίζει κωδικοποιημένες πληροφορίες.
  • get_exchange – εμφανίζει δεδομένα σχετικά με ένα συγκεκριμένο νόμισμα.
  • get_exchanges – εμφανίζει τη λίστα των νομισμάτων σύμφωνα με το δείγμα.

Ως αποτέλεσμα, ο κώδικας στο αρχείο pb.py μοιάζει με αυτό:

εισαγωγή αιτημάτων επανεισαγωγής εισαγωγή json URL = 'https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5' def load_exchange(): επιστροφή json.loads(requests.get(URL).text) def get_exchange(ccy_key ): για exc στο load_exchange(): if ccy_key == exc['ccy']: return exc return False def get_exchanges(ccy_pattern): result = [] ccy_pattern = re.escape(ccy_pattern) + '.*' για exc in load_exchange(): εάν το re.match(ccy_pattern, exc['ccy'], re.IGNORECASE) δεν είναι None: result.append(exc) επιστροφή αποτελέσματος

Το πρόγραμμα μπορεί να εκδώσει την ακόλουθη απάντηση στα καθορισμένα αιτήματα:

[ { ccy:"USD", base_ccy:"UAH", buy:"25.90000", sale:"26.25000" }, { ccy:"EUR", base_ccy:"UAH", buy:"29.10000", πώληση:"29.85000 " }, { ccy:"RUR", base_ccy:"UAH", buy:"0.37800", sale:"0.41800" }, { ccy:"BTC", base_ccy:"USD", buy:"11220.0384", πώληση: "12401.0950" } ]

Βήμα 2: Δημιουργήστε ένα Telegram Bot με τον @BotFather

Μπορείτε να δημιουργήσετε ένα πρόγραμμα για τη λήψη μηνυμάτων και την απάντηση σε αυτά χρησιμοποιώντας την υπηρεσία @BotFather. Μεταβείτε στη σελίδα του Telegram και πληκτρολογήστε την εντολή /newbot. Στη συνομιλία θα εμφανιστούν οδηγίες, σύμφωνα με τις οποίες πρέπει να σημειώσετε πρώτα το όνομα του bot και μετά τη διεύθυνσή του. Όταν δημιουργηθεί ο λογαριασμός bot, θα εμφανιστεί στην οθόνη ένα μήνυμα καλωσορίσματος που περιέχει ένα διακριτικό. Για περαιτέρω ρυθμίσεις, χρησιμοποιήστε αυτές τις εντολές:

  • /setdescription – περιγραφή;
  • /setabouttext – πληροφορίες για το νέο bot.
  • /setuserpic – φωτογραφία προφίλ.
  • /setinline – λειτουργία inline;
  • /setcommands – περιγραφή εντολών.

Στο τελευταίο βήμα διαμόρφωσης, περιγράφουμε τα /help και /exchange. Όταν ολοκληρωθούν όλα τα βήματα, ήρθε η ώρα να προχωρήσουμε στην κωδικοποίηση.

Βήμα 3: Ρύθμιση και εκκίνηση του Bot

Ας δημιουργήσουμε ένα αρχείο config.py. Σε αυτό, πρέπει να καθορίσετε τον μοναδικό κωδικό bot και τη ζώνη ώρας στην οποία το πρόγραμμα θα βρει πληροφορίες.

ΤΟΥΚΕΝ = '' # αντικατάσταση με το διακριτικό του ρομπότ σαςTIMEZONE = 'Ευρώπη/Κίεβο' TIMEZONE_COMMON_NAME = 'Κίεβο'

Στη συνέχεια, δημιουργούμε ένα άλλο αρχείο με την εισαγωγή του pb.py που γράφτηκε προηγουμένως, των βιβλιοθηκών και άλλων απαραίτητων στοιχείων. Οι βιβλιοθήκες που λείπουν εγκαθίστανται από το σύστημα διαχείρισης πακέτων (pip).

εισαγωγή telebotimport configimport pbimport datetimeimport pytzimport jsonimport traceback P_TIMEZONE = pytz.timezone(config.TIMEZONE) TIMEZONE_COMMON_NAME = config.TIMEZONE_COMMON_NAME

Ας χρησιμοποιήσουμε το περιεχόμενο του pyTelegramBotApi για να δημιουργήσουμε ένα bot. Στέλνουμε το ληφθέν διακριτικό χρησιμοποιώντας τον ακόλουθο κωδικό:

bot = telebot.TeleBot(config.TOKEN) bot.polling(none_stop=True)

Η παράμετρος none_stop διασφαλίζει ότι τα αιτήματα αποστέλλονται συνεχώς. Η λειτουργία της παραμέτρου δεν θα επηρεαστεί από σφάλματα μεθόδου.

Βήμα 4: Γράψτε το /start Handler Command

Εάν όλα τα προηγούμενα βήματα γίνουν σωστά, το bot έχει αρχίσει να λειτουργεί. Το πρόγραμμα δημιουργεί αιτήματα τακτικά επειδή χρησιμοποιεί τη μέθοδο getUpdates. Πριν από τη γραμμή με το στοιχείο none_stop, χρειαζόμαστε ένα κομμάτι κώδικα που επεξεργάζεται την εντολή /start:

@bot.message_handler(commands=['start']) def start_command(message): bot.send_message( message.chat.id, 'Greetings! Μπορώ να σας δείξω τις συναλλαγματικές ισοτιμίες.n' + 'Για να λάβετε τις συναλλαγματικές ισοτιμίες πατήστε / exchange.n' + 'Για να λάβετε βοήθεια, πατήστε /help.' )

RџСўРё commands=['start'] ίσο με Αληθινό καλείται start_command. Το περιεχόμενο του μηνύματος πηγαίνει εκεί. Στη συνέχεια, πρέπει να εφαρμόσετε τη συνάρτηση αποστολής_μήνυμα σε σχέση με ένα συγκεκριμένο μήνυμα.

Βήμα 5: Δημιουργήστε ένα /help Command Handler

Η εντολή /help μπορεί να εφαρμοστεί ως κουμπί. Κάνοντας κλικ σε αυτό, ο χρήστης θα μεταφερθεί στον λογαριασμό Telegram του προγραμματιστή. Δώστε στο κουμπί ένα όνομα, όπως "Ρωτήστε τον προγραμματιστή". Ορίστε την παράμετρο reply_markup, η οποία ανακατευθύνει τον χρήστη σε έναν σύνδεσμο, για τη μέθοδο send_message. Ας γράψουμε στον κώδικα την παράμετρο που δημιουργεί το πληκτρολόγιο (InlineKeyboardMarkup). Χρειάζεστε μόνο ένα κουμπί (InlineKeyboardButton).

Ο τελικός κώδικας χειριστή εντολών μοιάζει με αυτό:

@bot.message_handler(commands=['help']) def help_command(message): keyboard = telebot.types.InlineKeyboardMarkup() keyboard.add( telebot.types.InlineKeyboardButton( 'Ρωτήστε τον προγραμματιστή', url='ваша ссылка на ь' ) ) bot.send_message( message.chat.id, '1) Για να λάβετε μια λίστα με τα διαθέσιμα νομίσματα πατήστε /exchange.n' + '2) Κάντε κλικ στο νόμισμα που σας ενδιαφέρει.n' + προφίλ '3) Εσείς θα λάβει ένα μήνυμα που περιέχει πληροφορίες σχετικά με την πηγή και τα νομίσματα-στόχους, ' + 'τιμές αγοράς και τιμές πώλησης.n' + '4) Κάντε κλικ στο "Ενημέρωση" για να λάβετε τις τρέχουσες πληροφορίες σχετικά με το αίτημα. ' + 'Το ρομπότ θα εμφανίσει επίσης τη διαφορά μεταξύ της προηγούμενης και της τρέχουσας συναλλαγματικής ισοτιμίας.n' + '5) Το ρομπότ υποστηρίζει inline. Πληκτρολογήστε @ σε οποιαδήποτε συνομιλία και τα πρώτα γράμματα ενός νομίσματος.', reply_markup=keyboard )

Ενέργεια κώδικα στη συνομιλία Telegram:

Telegram bot σε Python. Ένας πλήρης οδηγός για να γράψετε ένα bot με συναλλαγματικές ισοτιμίες από την αρχή

Βήμα 6: Προσθήκη του /exchange Command Handler

Αυτό το βήμα είναι απαραίτητο για την εμφάνιση κουμπιών με σύμβολα διαθέσιμων νομισμάτων στη συνομιλία. Ένα πληκτρολόγιο οθόνης με επιλογές θα σας βοηθήσει να αποφύγετε λάθη. Η PrivatBank παρέχει πληροφορίες για το ρούβλι, το δολάριο και το ευρώ. Η επιλογή InlineKeyboardButton λειτουργεί ως εξής:

  1. Ο χρήστης κάνει κλικ στο κουμπί με την επιθυμητή ονομασία.
  2. Το getUpdates λαμβάνει μια επανάκληση (CallbackQuery).
  3. Γίνεται γνωστός πώς να χειριστείτε το πάτημα του πληκτρολογίου - μεταδίδονται πληροφορίες σχετικά με το πατημένο κουμπί.

Κωδικός χειριστή /exchange:

@bot.message_handler(commands=['ανταλλαγή']) def exchange_command(μήνυμα): keyboard = telebot.types.InlineKeyboardMarkup() keyboard.row( telebot.types.InlineKeyboardButton('USD', callback_data='get-USD') ) keyboard.row( telebot.types.InlineKeyboardButton('EUR', callback_data='get-EUR'), telebot.types.InlineKeyboardButton('RUR', callback_data='get-RUR') ) bot.send_message( message.chat .id, 'Κάντε κλικ στο νόμισμα της επιλογής:', reply_markup=keyboard )

Το αποτέλεσμα του κώδικα στο Telegram:

Telegram bot σε Python. Ένας πλήρης οδηγός για να γράψετε ένα bot με συναλλαγματικές ισοτιμίες από την αρχή

Βήμα 7: Σύνταξη ενός δείκτη χειρισμού για τα ενσωματωμένα κουμπιά πληκτρολογίου

Το πακέτο pyTelegramBot Api περιέχει τη συνάρτηση διακοσμητή @bot.callback_query_handler. Αυτό το στοιχείο έχει σχεδιαστεί για να μεταφράζει την επιστροφή κλήσης σε συνάρτηση – το API ξετυλίγει και δημιουργεί ξανά την κλήση. Γράφεται ως εξής:

@bot.callback_query_handler(func=κλήση lambda: True) def iq_callback(query): data = query.data if data.startswith('get-'): get_ex_callback(query)

Ας γράψουμε επίσης τη μέθοδο get_ex_callback:

def get_ex_callback(query): bot.answer_callback_query(query.id) send_exchange_result(query.message, query.data[4:])

Υπάρχει μια άλλη χρήσιμη μέθοδος - answer_callback_query. Βοηθά στην αφαίρεση του φορτίου μεταξύ του πατήματος του κουμπιού και της εμφάνισης του αποτελέσματος στην οθόνη. Μπορείτε να στείλετε ένα μήνυμα στο send_exchange_query περνώντας κάποιο κωδικό νομίσματος και Μήνυμα. Ας γράψουμε send_exchange_result:

def send_exchange_result(message, ex_code): bot.send_chat_action(message.chat.id, 'typing') ex = pb.get_exchange(ex_code) bot.send_message( message.chat.id, serialize_ex(ex), reply_markup=get_update_ ), parse_mode='HTML' )

Ενώ το chatbot λαμβάνει το αποτέλεσμα του αιτήματος από την τράπεζα API, ο επισκέπτης βλέπει την επιγραφή «πληκτρολογώντας ένα μήνυμα». Φαίνεται σαν να απαντά ένα πραγματικό πρόσωπο. Για να εμφανίσετε μια τέτοια ένδειξη στην οθόνη, θα χρειαστεί να προσθέσετε γραμμές κατάστασης εισόδου. Στη συνέχεια, θα χρησιμοποιήσουμε το get_exchange - με τη βοήθειά του, το πρόγραμμα θα λάβει την ονομασία νομίσματος (ρούβλια, ευρώ ή δολάρια). Το send_message χρησιμοποιεί πρόσθετες μεθόδους: το serialize_ex μετατρέπει το νόμισμα σε άλλη μορφή και το get_update_keyboard ρυθμίζει softkeys που ενημερώνουν τις πληροφορίες και στέλνουν δεδομένα αγοράς συναλλάγματος σε άλλες συνομιλίες.

Ας γράψουμε τον κώδικα για το get_update_keyboard. Πρέπει να αναφέρονται δύο κουμπιά – το t και το e αντιπροσωπεύουν τον τύπο και την ανταλλαγή. Το στοιχείο switch_inline_query για το κουμπί Κοινή χρήση είναι απαραίτητο, ώστε ο χρήστης να μπορεί να επιλέξει από πολλές συνομιλίες. Ο επισκέπτης θα μπορεί να επιλέξει σε ποιον θα στείλει την τρέχουσα συναλλαγματική ισοτιμία του δολαρίου, του ρουβλίου ή του ευρώ.

def get_update_keyboard(ex): keyboard = telebot.types.InlineKeyboardMarkup() keyboard.row( telebot.types.InlineKeyboardButton( 'Update', callback_data=json.dumps({ 't': 'u', 'e': { ' b': ex['buy'], 's': ex['sale'], 'c': ex['ccy'] } }).replace(' ', '') ), telebot.types.InlineKeyboardButton ('Share', switch_inline_query=ex['ccy']) ) πληκτρολόγιο επιστροφής

Μερικές φορές χρειάζεται να δείτε πόσο έχει αλλάξει η συναλλαγματική ισοτιμία σε σύντομο χρονικό διάστημα. Ας γράψουμε δύο μεθόδους για το κουμπί Ενημέρωση, ώστε οι χρήστες να μπορούν να βλέπουν μαθήματα σε σύγκριση.

Η διαφορά μεταξύ των συναλλαγματικών ισοτιμιών μεταβιβάζεται στον σειριοποιητή μέσω της παραμέτρου diff.

Οι προβλεπόμενες μέθοδοι λειτουργούν μόνο μετά την ενημέρωση των δεδομένων, δεν θα επηρεάσουν την πρώτη εμφάνιση του μαθήματος.

def serialize_ex(ex_json, diff=None): αποτέλεσμα = '' + ex_json['base_ccy'] + ' -> ' + ex_json['ccy'] + ':nn' + 'Αγορά: ' + ex_json['buy'] εάν διαφορά: αποτέλεσμα += ' ' + serialize_exchange_diff(diff['buy_diff']) + 'n' + 'Sell: ' + ex_json['sale'] + ' ' + serialize_exchange_diff(diff['sale_diff']) + 'n' other: result += 'nSell: ' + ex_json['sale'] + 'n' return result def serialize_exchange_diff(diff): αποτέλεσμα = '' if diff > 0: αποτέλεσμα = '(' + str(διαφορά) + ' " src="https://sworg/images/core/emoji/2.3/svg/2197.svg">" src="https://sworg/images /core/emoji/72x72/2197.png">" src="https://sworg/images/core/emoji/72x72/2197.png">)' elif diff < 0: result = '(' + str( διαφορά)[1:] + ' " src="https://sworg/images/core/emoji/2.3/svg/2198.svg">" src="https://sworg/images/core/emoji/72x72 /2198.png">" src="https://sworg/images/core/emoji/72x72/2198.png">)' αποτέλεσμα επιστροφής

Φανταστείτε ότι ο επισκέπτης ήθελε να μάθει τη συναλλαγματική ισοτιμία του δολαρίου. Δείτε τι συμβαίνει εάν επιλέξετε USD στο μήνυμα:

Telegram bot σε Python. Ένας πλήρης οδηγός για να γράψετε ένα bot με συναλλαγματικές ισοτιμίες από την αρχή

Βήμα 8: Εφαρμογή του Update Button Handler

Ας γράψουμε τον κώδικα για τον χειρισμό ενεργειών με το κουμπί Ενημέρωση και ας προσθέσουμε το τμήμα iq_callback_method σε αυτό. Όταν τα στοιχεία του προγράμματος ξεκινούν με την παράμετρο get, πρέπει να γράψετε get_ex_callback. Σε άλλες περιπτώσεις, αναλύουμε το JSON και προσπαθούμε να πάρουμε το κλειδί t.

@bot.callback_query_handler(func=lambda κλήση: True) def iq_callback(query): data = query.data if data.startswith('get-'): get_ex_callback(query) else: try: if json.loads(data)[ 't'] == 'u': edit_message_callback(ερώτημα) εκτός ValueError: pass

Εάν το t ισούται με το u, θα χρειαστεί να γράψετε ένα πρόγραμμα για τη μέθοδο edit_message_callback. Ας αναλύσουμε αυτή τη διαδικασία βήμα προς βήμα:

  1. Λήψη ενημερωμένων πληροφοριών σχετικά με την κατάσταση της αγοράς συναλλάγματος (exchange_now = pb.get_exchange(data['c']).
  1. Γράψτε ένα νέο μήνυμα μέσω ενός σειριακού προγράμματος με diff.
  2. Προσθήκη υπογραφής (get_edited_signature).

Εάν το αρχικό μήνυμα δεν αλλάξει, καλέστε τη μέθοδο edit_message_text.

def edit_message_callback(query): data = json.loads(query.data)['e'] exchange_now = pb.get_exchange(data['c']) text = serialize_ex( exchange_now, get_exchange_diff( get_ex_from_iq_data(owda)), exchange_n) + 'n' + get_edited_signature() if query.message: bot.edit_message_text( text, query.message.chat.id, query.message.message_id, reply_markup=get_update_keyboard(exchange_now), parse_mode='HTML_idline') : bot.edit_message_text( text, inline_message_id=query.inline_message_id, reply_markup=get_update_keyboard(exchange_now), parse_mode='HTML' )

Ας γράψουμε τη μέθοδο get_ex_from_iq_data για να αναλύσουμε το JSON:

def get_ex_from_iq_data(exc_json): return { 'buy': exc_json['b'], 'sale': exc_json['s'] }

Θα χρειαστείτε μερικές ακόμη μεθόδους: για παράδειγμα, get_exchange_diff, που διαβάζει τις παλιές και τις νέες πληροφορίες σχετικά με το κόστος των νομισμάτων και εμφανίζει τη διαφορά.

def get_exchange_diff(last, now): return { 'sale_diff': float("%.6f" % (float(now['sale']) - float(last['sale']))), 'buy_diff': float ("%.6f" % (float(τώρα['buy']) - float(last['buy']))) }

Το τελευταίο, get_edited_signature, δείχνει την ώρα τελευταίας ενημέρωσης του μαθήματος.

def get_edited_signature(): return 'Ενημερώθηκε ' + str(datetime.datetime.now(P_TIMEZONE).strftime('%H:%M:%S')) + ' (' + TIMEZONE_COMMON_NAME + ')'

Ως αποτέλεσμα, το ενημερωμένο μήνυμα από το bot με σταθερή συναλλαγματική ισοτιμία μοιάζει με αυτό:

Telegram bot σε Python. Ένας πλήρης οδηγός για να γράψετε ένα bot με συναλλαγματικές ισοτιμίες από την αρχή

Όταν αλλάζει η πορεία, οι διαφορές μεταξύ των τιμών εμφανίζονται στο μήνυμα λόγω των προβλεπόμενων παραμέτρων.

Telegram bot σε Python. Ένας πλήρης οδηγός για να γράψετε ένα bot με συναλλαγματικές ισοτιμίες από την αρχή

Βήμα 9: Υλοποίηση ενσωματωμένης λειτουργίας

Η ενσωματωμένη λειτουργία είναι απαραίτητη για τη γρήγορη αποστολή πληροφοριών από το πρόγραμμα σε οποιαδήποτε συνομιλία – τώρα δεν χρειάζεται να προσθέσετε ένα bot στη συνομιλία ως συμμετέχων. Όταν ένας χρήστης του Telegram εισάγει ένα όνομα bot με το σύμβολο @ μπροστά του, οι επιλογές μετατροπής θα πρέπει να εμφανίζονται πάνω από τη γραμμή εισαγωγής. Εάν κάνετε κλικ σε ένα από τα στοιχεία, το bot θα στείλει ένα μήνυμα στη συνομιλία με τα αποτελέσματα και τα κουμπιά για ενημέρωση και αποστολή δεδομένων. Το όνομα του αποστολέα θα περιέχει τη λεζάντα «μέσω ".

Το InlineQuery μεταβιβάζεται στο query_text μέσω της βιβλιοθήκης. Ο κώδικας χρησιμοποιεί τη συνάρτηση answer_line για να ανακτήσει τα αποτελέσματα αναζήτησης ως μια σειρά δεδομένων και το στοιχείο inline_query_id. Χρησιμοποιούμε get_exchanges έτσι ώστε το bot να βρίσκει πολλά νομίσματα κατόπιν αιτήματος.

@bot.inline_handler(func=lambda ερώτημα: True) def query_text(inline_query): bot.answer_inline_query(inline_query.id, get_iq_articles(pb.get_exchanges(inline_query.query)) )

Περνάμε μια σειρά δεδομένων στο get_iq_articles για να επιστρέψουμε αντικείμενα από το InlineQueryResultArticle μέσω αυτής της μεθόδου.

def get_iq_articles(exchanges): result = [] για exc στις ανταλλαγές: result.append( telebot.types.InlineQueryResultArticle( id=exc['ccy'], title=exc['ccy'], input_message_content=telebot.types.InputContents ( serialize_ex(exc), parse_mode='HTML' ), reply_markup=get_update_keyboard(exc), description='Μετατροπή ' + exc['base_ccy'] + ' -> ' + exc['ccy'], thumb_height=1 ) ) αποτέλεσμα επιστροφής

Τώρα, αν γράψεις @ και ένα κενό στη γραμμή, στην οθόνη θα εμφανιστούν τα αποτελέσματα αναζήτησης – επιλογές για μετατροπή σε τρία διαθέσιμα νομίσματα.

Telegram bot σε Python. Ένας πλήρης οδηγός για να γράψετε ένα bot με συναλλαγματικές ισοτιμίες από την αρχή

Οι χρήστες μπορούν να φιλτράρουν τα αποτελέσματα εισάγοντας το επιθυμητό νόμισμα.

Αφού κάνετε κλικ στο επιθυμητό νόμισμα από τη λίστα, η συνομιλία λαμβάνει το ίδιο μήνυμα που λαμβάνουν οι χρήστες bot. Μπορείτε επίσης να χρησιμοποιήσετε το κουμπί Ενημέρωση. Η παρακάτω εικόνα δείχνει το ενημερωμένο μήνυμα που στάλθηκε μέσω του bot:

Telegram bot σε Python. Ένας πλήρης οδηγός για να γράψετε ένα bot με συναλλαγματικές ισοτιμίες από την αρχή

Συμπέρασμα

Τώρα ξέρετε πώς να δημιουργήσετε ένα bot για το Telegram. Μπορείτε να προσθέσετε χρήσιμα εργαλεία στο πρόγραμμά σας: κουμπιά για την ενημέρωση και την αποστολή του αποτελέσματος σε άλλους χρήστες του messenger και μια ενσωματωμένη λειτουργία που σας επιτρέπει να χρησιμοποιείτε τις λειτουργίες του bot εκτός της συνομιλίας με αυτό. Με βάση αυτήν την οδηγία, μπορείτε να δημιουργήσετε οποιοδήποτε απλό bot με άλλες λειτουργίες – όχι μόνο αυτό που θα εμφανίζει τις συναλλαγματικές ισοτιμίες. Μην φοβάστε να πειραματιστείτε με βιβλιοθήκες, API και κώδικα για να δημιουργήσετε έναν αυτοματοποιημένο βοηθό που θα συνομιλεί με πελάτες στο Telegram και θα ενισχύει τη σύνδεση των ενδιαφερομένων με την εταιρεία.

1 Σχόλια

  1. Φανταστική δημοσίευση

Αφήστε μια απάντηση