Bot Telegram dina Python. Pitunjuk lengkep pikeun nyerat bot kalayan nilai tukeur ti mimiti

Bot dina Telegram mangrupikeun program anu ngabantosan ngahubungi pamiarsa atanapi nyederhanakeun tindakan anu sateuacana kedah dilakukeun sacara manual. Program ieu ditulis khusus pikeun platform messenger. Bot dianggo ku cara kieu: pamaké ngirimkeun paréntah ngaliwatan garis input, sarta sistem ngabales ku téks atanapi pesen interaktif. Kadang program malah imitates lampah hiji jalma nyata - bot sapertos inspires leuwih kapercayaan diantara konsumén.

Aya sababaraha jinis sistem pikeun bantosan otomatis pikeun pangguna. Sababaraha bot ngan komunikasi sareng konsumén, batur rutin nyadiakeun informasi. Teu mungkin jelas ngabagi program kana jinis - pamekar sering ngagabungkeun sababaraha fungsi dina hiji bot.

Anjeun tiasa nyerat bot saderhana pikeun Telegram sareng elemen interaktif dina bentuk tombol dina layar dina 9 léngkah. Hayu urang nempo masing-masing di jéntré tur ngajawab sababaraha patarosan:

  • kumaha ngamimitian bot;
  • kumaha carana ngadaptar keyboard diwangun-di ti hiji atawa leuwih tombol;
  • kumaha program tombol pikeun fungsi nu dipikahoyong;
  • naon mode inline sareng kumaha nyetél éta pikeun bot anu tos aya.

Lengkah 0: latar téoritis ngeunaan Telegram bots API

Alat utama anu dianggo pikeun nyiptakeun bot Telegram nyaéta Antarmuka Pemrograman Aplikasi HTML, atanapi API HTML. Unsur ieu nampi pamundut sémah sareng ngirim réspon dina bentuk inpormasi. Desain siap-dijieun simplify karya dina program. Pikeun nulis bot pikeun Telegram, anjeun kedah nganggo alamat email ieu: https://api.telegram.org/bot/METHOD_NAME

Pikeun fungsi bot anu leres, token ogé diperyogikeun - kombinasi karakter anu ngajagi program sareng muka aksés ka pamekar anu dipercaya. Unggal token unik. String ditugaskeun ka bot nalika nyiptakeun. Métode tiasa béda: getUpdates, getChat sareng anu sanésna. Pilihan metode gumantung kana algoritma naon anu diarepkeun ku pamekar ti bot. Conto token:

123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

Bot nganggo pamundut GET sareng POST. Parameter metode sering kedah ditambah - contona, nalika metode sendMessage sakuduna ngirim id obrolan sareng sababaraha téks. Parameter pikeun panyampurnaan metode tiasa disalurkeun salaku string pamundut URL nganggo aplikasi/x-www-form-urlencoded atanapi via application-json. Métode ieu henteu cocog pikeun ngaunduh file. UTF-8 encoding ogé diperlukeun. Ku ngirimkeun pamundut ka API, anjeun tiasa nampi hasil dina format JSON. Tingali kana réspon program pikeun nyandak inpormasi liwat metode getME:

Kéngingkeun https://api.telegram.org/bot/getMe{ ok: leres, hasilna: {id: 231757398, first_name: "Exchange Rate Bot", ngaran pamaké: "exchangetestbot"}}

Hasilna bakal diala lamun ok sarua bener. Upami teu kitu, sistem bakal nunjukkeun kasalahan.

Aya dua cara pikeun kéngingkeun pesen khusus dina bot. Duanana métode éféktif, tapi cocog dina kasus béda. Pikeun nampi pesen, anjeun tiasa nyerat pamundut ku cara manual nganggo metode getUpdates - program bakal ningalikeun susunan data Update dina layar. Requests kudu dikirim rutin, sanggeus analisa unggal Asép Sunandar Sunarya, ngirim diulang. Offset mangrupikeun parameter anu nangtukeun jumlah rékaman anu dilewatan sateuacan ngamuat hasil énggal pikeun ngahindarkeun deui obyék anu dipariksa. Mangpaat metode getUpdates bakal dimaénkeun upami:

  • teu aya deui jalan pikeun ngonpigurasikeun HTTPS;
  • basa skrip kompléks dipaké;
  • server bot robah ti jaman ka jaman;
  • bot dieusian ku pamaké.

Metodeu kadua anu tiasa ditulis pikeun nampi pesen pangguna nyaéta setWebhook. Hal ieu dipaké sakali, teu kudu terus ngirim requests anyar. Webhook ngirim apdet data ka URL anu ditangtukeun. Metoda ieu merlukeun sertipikat SSL. Webhook bakal mangpaat dina kasus ieu:

  • basa pamrograman wéb dianggo;
  • bot teu overloaded, aya teu loba teuing pamaké;
  • server teu robah, program tetep dina server sarua keur lila.

Dina parentah salajengna, urang bakal make getUpdates.

Ladenan @BotFather Telegram dirancang pikeun nyieun bot obrolan. Setélan dasar ogé diatur ngaliwatan sistem ieu - BotFather baris mantuan anjeun nyieun pedaran, nempatkeun poto profil, nambahkeun parabot rojongan. Perpustakaan - sét pamundut HTML pikeun bot Telegram - sayogi dina Internét, seueur pisan. Nalika nyieun program conto, pyTelegramBotApi dipaké.

Lengkah 1: Ngalaksanakeun Paménta Nilai Tukar

Kahiji maneh kudu nulis kode nu ngalakukeun queries. Urang bakal ngagunakeun nalika nulis API PrivatBank, di handap ieu tumbu ka dinya: https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5. Anjeun kedah nganggo metodeu ieu dina kode anjeun:

  • load_exchange - mendakan nilai tukeur sareng ningalikeun inpormasi anu disandi;
  • get_exchange - mintonkeun data ngeunaan mata uang husus;
  • get_exchanges - nunjukkeun daptar mata uang dumasar kana conto.

Hasilna, kodeu dina file pb.py kasampak kawas kieu:

impor ulang impor requests impor json URL = 'https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5' def load_exchange(): balik json.loads(requests.get(URL).text) def get_exchange(ccy_key ): pikeun exc di load_exchange (): lamun ccy_key == exc [ 'ccy']: balik exc mulang Palsu def get_exchanges (ccy_pattern): hasilna = [] ccy_pattern = re.escape (ccy_pattern) + '.*' pikeun exc dina load_exchange (): lamun re.match (ccy_pattern, exc [ 'ccy'], re.IGNORECASE) teu Euweuh: result.append (exc) hasil balik

Program éta tiasa ngaluarkeun réspon di handap ieu kana pamundut anu ditangtukeun:

[ {ccy:"USD", base_ccy:"UAH", meuli:"25.90000", jual:"26.25000" }, {ccy:"EUR", base_ccy:"UAH", meuli:"29.10000", jual:"29.85000 "}, {ccy:"RUR", base_ccy:"UAH", meuli:"0.37800", jual:"0.41800" }, {ccy:"BTC", base_ccy:"USD", meuli:"11220.0384", jual: "12401.0950" } ]

Lengkah 2: Jieun Bot Telegram sareng @BotFather

Anjeun tiasa nyiptakeun program pikeun nampi pesen sareng ngabales aranjeunna nganggo jasa @BotFather. Pindah ka halaman Telegram na sareng lebetkeun paréntah / newbot. Parentah bakal muncul dina obrolan, numutkeun anjeun kedah nyerat nami bot heula, teras alamatna. Nalika akun bot didamel, pesen wilujeng sumping anu ngandung token bakal muncul dina layar. Pikeun konfigurasi salajengna, paké paréntah ieu:

  • /setdescription – déskripsi;
  • / setabouttext - inpormasi ngeunaan bot anyar;
  • /setuserpic – poto profil;
  • /setinline - modeu inline;
  • / setcommands - pedaran paréntah.

Dina hambalan konfigurasi panungtungan, urang ngajelaskeun / pitulung jeung / bursa. Nalika sadaya léngkah parantos réngsé, waktosna pikeun ngaléngkah ka coding.

Lengkah 3: Nyetel sareng Ngaluncurkeun Bot

Hayu urang nyieun file config.py. Di jerona, anjeun kedah netepkeun kode bot unik sareng zona waktos dimana program bakal mendakan inpormasi.

TOKEN = '' # ganti ku token bot anjeunTIMEZONE = 'Eropa/Kiev' TIMEZONE_COMMON_NAME = 'Kiev'

Salajengna, urang nyieun file sejen kalawan impor tina pb.py ditulis saméméhna, perpustakaan jeung komponén perlu séjén. Perpustakaan anu leungit dipasang tina sistem manajemén pakét (pip).

impor telebotimport configimport pbimport datetimeimport pytzimport jsonimport traceback P_TIMEZONE = pytz.timezone(config.TIMEZONE) TIMEZONE_COMMON_NAME = config.TIMEZONE_COMMON_NAME

Hayu urang nganggo eusi pyTelegramBotApi pikeun nyieun bot. Kami ngirim token anu ditampi nganggo kode ieu:

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

Parameter none_stop mastikeun yén pamundut terus dikirim. Operasi parameter moal kapangaruhan ku kasalahan metoda.

Lengkah 4: Tulis / ngamimitian Komando Handler

Upami sadaya léngkah saacanna leres-leres, bot parantos ngamimitian damel. Program éta ngahasilkeun pamundut sacara teratur sabab ngagunakeun metode getUpdates. Sateuacan garis sareng unsur none_stop, urang peryogi sapotong kode anu ngolah paréntah / ngamimitian:

@bot.message_handler(commands=['start']) def start_command(message): bot.send_message( message.chat.id, 'Salam! Abdi tiasa nunjukkeun anjeun kurs.n' + 'Pikeun kéngingkeun nilai tukeur pencét / exchange.n' + 'Pikeun meunang pitulung pencét /help.' )

RџSЂRё paréntah=['mimitian'] sarua jeung Leres start_command disebutna. Eusi talatah ka dinya. Salajengna, anjeun kedah nerapkeun fungsi ngirim_seratan patalina jeung pesen nu tangtu.

Lengkah 5: Jieun /help Command Handler

Paréntah / pitulung tiasa dilaksanakeun salaku tombol. Ku ngaklik éta, pangguna bakal dibawa ka akun Telegram pamekar. Pasihan nami tombol, sapertos "Tanyakeun pamekar". Setel parameter reply_markup, nu alihan pamaké ka link, pikeun metoda send_message. Hayu urang nulis dina kode parameter nu nyiptakeun keyboard (InlineKeyboardMarkup). Anjeun ngan butuh hiji tombol (InlineKeyboardButton).

Kodeu panangan paréntah ahir sapertos kieu:

@bot.message_handler(commands=['help']) def help_command(message): keyboard = telebot.types.InlineKeyboardMarkup() keyboard.add(telebot.types.InlineKeyboardButton( 'Tanyakeun ka developer', url='ваша ссылка на профиль' ) ) bot.send_message( message.chat.id, '1) Pikeun nampa daptar mata uang nu sadia pencét /exchange.n' + '2) Klik dina mata uang nu dipikaresep ku anjeun.n' + '3) Anjeun bakal nampi pesen anu ngandung inpormasi ngeunaan sumber sareng mata uang targét, ' + 'harga jual sareng harga jual.n' + '4) Klik "Update" pikeun nampi inpormasi ayeuna ngeunaan pamundut. ' + 'Bot ogé bakal nunjukkeun bédana antara kurs saméméhna sareng ayeuna.n' + '5) Bot ngadukung inline. Ketik @ dina obrolan naon waé sareng hurup mimiti mata uang.', reply_markup=keyboard )

Aksi kode dina obrolan Telegram:

Bot Telegram dina Python. Pitunjuk lengkep pikeun nyerat bot kalayan nilai tukeur ti mimiti

Lengkah 6: Nambahkeun Panangan Komando / Exchange

Léngkah ieu diperyogikeun pikeun ningalikeun tombol kalayan simbol mata uang anu sayogi dina obrolan. Kibor dina layar sareng pilihan bakal ngabantosan anjeun ngahindarkeun kasalahan. PrivatBank nyayogikeun inpormasi ngeunaan ruble, dolar sareng euro. Pilihan InlineKeyboardButton jalan sapertos kieu:

  1. Pamaké ngaklik tombol kalayan sebutan anu dipikahoyong.
  2. getUpdates nampi callback (CallbackQuery).
  3. Janten terang kumaha carana ngadamel mencét keyboard - inpormasi ngeunaan tombol anu dipencet dikirimkeun.

/Tukar kodeu panangan:

@bot.message_handler(commands=['exchange']) def exchange_command(message): 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, 'Klik dina mata uang pilihan:', reply_markup=keyboard )

Hasil tina kode dina Telegram:

Bot Telegram dina Python. Pitunjuk lengkep pikeun nyerat bot kalayan nilai tukeur ti mimiti

Lengkah 7: Nulis panangan pikeun tombol keyboard anu diwangun

Paket pyTelegramBot Api ngandung fungsi decorator @bot.callback_query_handler. Komponén ieu dirancang pikeun narjamahkeun callback kana hiji fungsi - API unwraps tur nyieun deui nelepon. Ieu dieja kawas kieu:

@bot.callback_query_handler (func = lambda panggero: Leres) def iq_callback (query): data = query.data lamun data.startswith ('get-'): get_ex_callback (query)

Hayu urang ogé nyerat metode get_ex_callback:

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

Aya padika mangpaat séjén - answer_callback_query. Éta ngabantosan ngaleungitkeun beban antara mencét tombol sareng ningalikeun hasilna dina layar. Anjeun tiasa ngirim pesen ka send_exchange_query ku cara ngirimkeun sababaraha kode mata uang sareng Pesen. Hayu urang nyerat 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_keyboard(ex ), parse_mode='HTML')

Sedengkeun chatbot narima hasil pamundut ti bank API, nu datang ningali tulisan "ngetik pesen". Sigana mah jalma bener nu ngajawab. Pikeun ningalikeun indikator sapertos kitu dina layar, anjeun kedah nambihan garis status input. Salajengna, urang bakal nganggo get_exchange - kalayan bantosanana, program bakal nampi sebutan mata uang (rubles, euro atanapi dolar). send_message ngagunakeun métode tambahan: serialize_ex ngarobah mata uang kana format sejen, sarta get_update_keyboard nyetél softkeys nu ngamutahirkeun informasi sarta ngirimkeun data pasar mata uang kana obrolan séjén.

Hayu urang nulis kode pikeun get_update_keyboard. Dua tombol kedah disebatkeun - t sareng e nangtung pikeun jinis sareng tukeur. Item switch_inline_query pikeun tombol Bagikeun diperlukeun ku kituna pamaké bisa milih ti sababaraha obrolan. Nu nganjang bakal tiasa milih ka saha ngirim kurs ayeuna tina dollar, ruble atawa euro.

def get_update_keyboard(ex): keyboard = telebot.types.InlineKeyboardMarkup() keyboard.row(telebot.types.InlineKeyboardButton( 'Update', callback_data=json.dumps({ 't': 'u', 'e': { ' b': ex['beuli'], 's': ex['sale'], 'c': ex['ccy'] } }).ganti(' ', '') ), telebot.types.InlineKeyboardButton ('Bagikeun', switch_inline_query=ex['ccy']) ) keyboard balik

Kadang-kadang nu peryogi ningali sabaraha Nilai tukeur geus robah dina waktu anu singget. Hayu urang nyerat dua metode pikeun tombol Update supados pangguna tiasa ningali kursus-kursus anu dibandingkeun.

Beda antara Nilai tukeur disalurkeun ka serializer via parameter diff.

Metodeu anu ditunjuk ngan ukur tiasa dianggo saatos data diropéa, aranjeunna moal mangaruhan tampilan mimiti kursus.

def serialize_ex(ex_json, diff=Euweuh): hasil = '' + ex_json [ 'base_ccy'] + ' -> ' + ex_json [ 'ccy'] + ':nn' + 'Beuli: ' + ex_json [ 'meuli'] lamun diff: hasil += ' ' + serialize_exchange_diff(diff ['buy_diff']) + 'n' + 'Jual: ' + ex_json ['sale'] + ' ' + serialize_exchange_diff (diff ['sale_diff']) + 'n' sejenna: hasil += 'nSell:' + ex_json ['sale'] + 'n' hasil balik def serialize_exchange_diff (diff): hasil = '' lamun diff > 0: hasil = '(' + str(diff) + ' " src="https://sworg/images/core/emoji/2.3/svg/2197.svg">" src="https://sworg/images /inti/emoji/72x72/2197.png">" src="https://sworg/images/core/emoji/72x72/2197.png">)' elif diff < 0: hasil = '(' + str( diff)[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">)' hasil mulang

Bayangkeun yén sémah hoyong terang kurs dolar. Ieu naon anu lumangsung upami anjeun milih USD dina suratna:

Bot Telegram dina Python. Pitunjuk lengkep pikeun nyerat bot kalayan nilai tukeur ti mimiti

Lengkah 8: Ngalaksanakeun Update Button Handler

Hayu urang nulis kode pikeun nanganan lampah kalawan tombol Update tur nambahkeun bagian iq_callback_method ka dinya. Nalika item program dimimitian ku parameter get, anjeun kedah nyerat get_ex_callback. Dina kaayaan sejen, urang parse JSON jeung cobaan pikeun meunangkeun konci t.

@bot.callback_query_handler (func = lambda panggero: Leres) def iq_callback (query): data = query.data lamun data.startswith ( 'meunang-'): get_ex_callback (query) sejenna: coba: lamun json.loads (data) [ 't'] == 'u': edit_message_callback (query) iwal ValueError: pass

Lamun t sarua jeung u, anjeun bakal kudu nulis program pikeun metoda edit_message_callback. Hayu urang ngarecah prosés ieu step by step:

  1. Ngundeur inpormasi panganyarna ngeunaan kaayaan pasar mata uang (exchange_now = pb.get_exchange(data['c']).
  1. Nulis pesen anyar ngaliwatan serializer kalawan diff.
  2. Nambahkeun tanda tangan (get_edited_signature).

Lamun pesen awal teu robah, nelepon metodeu 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(data), exchange_now) ) + 'n' + get_edited_signature() lamun 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' ) elif query.inline_message : bot.edit_message_text( text, inline_message_id=query.inline_message_id, reply_markup=get_update_keyboard(exchange_now), parse_mode='HTML' )

Hayu urang nyerat metode get_ex_from_iq_data pikeun nga-parse JSON:

def get_ex_from_iq_data (exc_json): balik { 'meuli': exc_json ['b'], 'diobral': exc_json ['s'] }

Anjeun peryogi sababaraha metodeu deui: contona, get_exchange_diff, anu maca inpormasi anu lami sareng énggal ngeunaan biaya mata uang sareng ningalikeun bédana.

def get_exchange_diff (panungtungan, ayeuna): balik { 'sale_diff': ngambang ( "%. 6f"% (ngambang (ayeuna [ 'diobral']) - ngambang (panungtungan [ 'diobral']))), 'buy_diff': ngambang ("%.6f" % (ngambang (ayeuna [ 'meuli']) - ngambang (tukang ['meuli']))) }

Anu terakhir, get_edited_signature, nunjukkeun waktos kursus terakhir diropéa.

def get_edited_signature (): balikkeun 'Diropéa ' + str(datetime.datetime.now(P_TIMEZONE).strftime('%H:%M:%S')) + '(' + TIMEZONE_COMMON_NAME + ')'

Hasilna, pesen anu diropéa tina bot kalayan kurs anu stabil sapertos kieu:

Bot Telegram dina Python. Pitunjuk lengkep pikeun nyerat bot kalayan nilai tukeur ti mimiti

Nalika kursusna robih, bédana antara nilai dipidangkeun dina pesen kusabab parameter anu ditunjuk.

Bot Telegram dina Python. Pitunjuk lengkep pikeun nyerat bot kalayan nilai tukeur ti mimiti

Hambalan 9: Embedded Mode Palaksanaan

Modeu diwangun-di diperyogikeun pikeun gancang ngirim inpormasi tina program ka obrolan naon waé - ayeuna anjeun henteu kedah nambihan bot kana paguneman salaku pamilon. Nalika pangguna Telegram ngalebetkeun nami bot kalayan tanda @ di payuneunana, pilihan konvérsi kedah muncul di luhur garis input. Upami anjeun ngaklik salah sahiji item, bot bakal ngirim pesen ka paguneman kalayan hasil sareng tombol pikeun ngapdet sareng ngirim data. Ngaran pangirim bakal ngandung caption "via ".

InlineQuery dikirimkeun ka query_text via perpustakaan. Kode ngagunakeun pungsi answer_line pikeun meunangkeun hasil teangan salaku Asép Sunandar Sunarya data jeung unsur inline_query_id. Kami nganggo get_exchanges supados bot mendakan sababaraha mata uang upami dipénta.

@bot.inline_handler(func=lambda query: True) def query_text(inline_query): bot.answer_inline_query(inline_query.id, get_iq_articles(pb.get_exchanges(inline_query.query)))

Urang lulus hiji Asép Sunandar Sunarya data ka get_iq_articles guna balik objék tina InlineQueryResultArticle ngaliwatan metoda ieu.

def get_iq_articles (bursa): hasil = [] pikeun exc di bursa: result.append (telebot.types.InlineQueryResultArticle (id = exc [ 'ccy'], judul = exc [ 'ccy'], input_message_content = telebot.types.InputTextMessageContent ( serialize_ex(exc), parse_mode='HTML' ), reply_markup=get_update_keyboard(exc), description='Convert' + exc['base_ccy'] + ' -> '+ exc['ccy'], thumb_height=1 ) ) hasil mulang

Ayeuna, upami anjeun nyerat @ sarta spasi dina garis, hasil teangan bakal muncul dina layar - pilihan pikeun ngarobah kana tilu currencies sadia.

Bot Telegram dina Python. Pitunjuk lengkep pikeun nyerat bot kalayan nilai tukeur ti mimiti

Pamaké bisa nyaring hasil ku cara nuliskeun mata uang nu dipikahoyong.

Saatos ngaklik mata uang anu dipikahoyong tina daptar, obrolan nampi pesen anu sami anu ditampi ku pangguna bot. Anjeun oge bisa make tombol Update. Gambar di handap nembongkeun pesen diropéa dikirim via bot:

Bot Telegram dina Python. Pitunjuk lengkep pikeun nyerat bot kalayan nilai tukeur ti mimiti

kacindekan

Ayeuna anjeun terang kumaha carana ngadamel bot pikeun Telegram. Anjeun tiasa nambihan alat anu mangpaat pikeun program anjeun: tombol pikeun ngapdet sareng ngirim hasil ka pangguna utusan anu sanés sareng modeu anu diwangun anu ngamungkinkeun anjeun ngagunakeun fungsi bot di luar obrolan sareng éta. Dumasar kana paréntah ieu, anjeun tiasa nyiptakeun bot saderhana sareng fungsi anu sanés - sanés ngan ukur anu bakal nunjukkeun nilai tukar. Tong sieun ékspérimén sareng perpustakaan, API, sareng kode pikeun nyiptakeun asistén otomatis anu bakal ngobrol sareng palanggan dina Telegram sareng nguatkeun hubungan jalma anu kabetot sareng perusahaan.

1 Comment

  1. Publikasi Fantastica

Leave a Reply