Telegram bot in Pythone. A duce completum rates ad scribere aut commutationem rates a VULNUS

Automata in telegrapho sunt programmata quae adiuvant ad contactum cum auditorio constituendum vel actiones simpliciores quae antea manually perficiendae erant. Haec programmata nominatim scripta sunt pro tribunali nuntio. Automata hoc modo operantur: usura mandatum mittit per lineam initus et ratio respondet cum textu vel nuntio interactive. Aliquando programma etiam actiones verae personae imitatur - talis automati fiducia plus inter clientes incitat.

Plures sunt genera systematum latis subsidiis utentibus. Aliqua automata iustus cum clientibus communicant, alii informationes regulariter praebent. Impossibile est programmata in typos clare dividere - tincidunt saepe plures functiones in uno automati coniungi.

Scribere potes simplex automata pro telegrapho cum elementis interactive in forma globuli in 9 gradibus electronicis. Intueamus singula singula et paucis quaestionibus responde;

  • quomodo ordiri bot;
  • quomodo subcriptio constructum in claviaturis ab una vel pluribus globulis;
  • quomodo ad programmata bullarum pro functionibus desideratis;
  • quid sit inline modus et quomodo erigatur pro automati existente.

Gradus 0: background theorica circa telegraphum automata API

Praecipuum instrumentum ad automata Telegram creandum est HTML Applicationis programmandi interfacies, seu HTML API. Hoc elementum visitator petitiones accipit et responsa per modum informationis mittit. Consilia parata facta simpliciorem reddere opus in progressio. Scribere bot pro Telegram, hac inscriptione uti debes: https://api.telegram.org/bot/METHOD_NAME

Ad rectam operationem autocineti, signum etiam necessarium est - complexio notarum quae propositum tuetur et aditum ad id quod confidebat tincidunt aperit. Unumquodque signum est unicum. Bot in creatione chorda attribuitur. Methodi diversae esse possunt: ​​getUpdates, getChat et aliae. Electio methodi pendet ab algorithmo quod tincidunt ex bot expectent. Exempli gratia:

123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

Automata uti GET et POST petitiones. Modi parametri saepe supplendi sunt - exempli gratia, cum modus mittendi putatur mittere chat id et aliquem textum. Parametri methodi elegantiam praeteriri possunt sicut in URL query chorda utens application/x-www-forma-urlencoded vel per application-json. Hae modi non sunt aptae ad files downloading. Utf-8 descriptam etiam desideratur. Petentibus ad API mittendo, exitum in forma JSON consequi potes. Vide responsionem programmatis ad informationem retrievendam per modum getME:

PRAECIPIO https://api.telegram.org/bot/getMe{ ok: verum, eventum: { id: 231757398, first_name: "Commutatio Rate Bot", username: "exchangetestbot" } }

Effectus erit, si ok deducis verum. Alioquin errorem ratio indicabit.

Duplex modus est ut consuetudo nuntii in automata. Utraque ratio efficax est, sed in diversis casibus apta. Ut epistulas accipias, manually petitionem cum methodo getUpdates scribere potes – propositum renovationis notitias in scrinio ordinatas ostendet. Petitiones regulariter mittendae sunt, postquam singulas ordinationes resolvunt, iteratur missio. Cinguli modulus est qui numerum monumentorum omittendum decernit antequam novum effectum onerantium ad vitanda objectorum repressorum repercussio. Beneficia getUpdates methodi exoriri si;

  • non est configurare HTTPS;
  • incom- scriptiones linguae adhibentur;
  • bot servo mutat subinde;
  • bot oneratur users.

Secundus modus, qui ad recipiendas usores epistulas scribi potest, est setWebbook. Semel usus est, non opus est ut assidue novas petitiones mittat. Webhook notitias emittit updates ut certum URL. Haec methodus SSL libellum requirit. Webhook in his casibus utilis erit:

  • textus programmandi linguarum adhibentur;
  • autocinetum non cumulatur, non nimis multi utentes;
  • servo non mutat, progressio ab eodem servo diu manet.

In ulterioribus mandatis utemur getUpdates.

@BotPather Telegram ministerium destinatur ad chat automata sua creare. Occasus fundamentales etiam per hoc systema positi sunt – BotPather adiuvabit descriptionem facere, figuram photographicam pone, instrumenta subsidia addere. Libraries - copiae HTML petitiones pro automata Telegrammi - in interreti praesto sunt, ex illis satis multa sunt. Cum exemplum programmatis creandi, pyTelegramBotApi adhibitum est.

Gradus I: Implementing Rate Requests

Primum codicem scribere debes qui queries exercet. Utemur cum scribendo PrivatBank API, infra vinculum cum eo est: https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5. His modis uti debes in codice tuo:

  • load_exchange - invenit commutationem rates et ostendit encoded informationes;
  • get_exchange - ostendit notitia de certa monetæ;
  • get_exchanges - ostendit enumerationem currencies secundum specimen.

Quam ob rem signum in pb.py fasciculi simile hoc spectat:

import re import petitiones import json URL = 'https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5' def load_exchange(): return json.loads(requests.get(URL).text) def get_exchange(ccy_key : for exc in load_exchange(): si ccy_key == exc['ccy']: return exc return False def get_exchanges(ccy_pattern): result = [] ccy_pattern = re.escape(ccy_pattern) + '.*' for exc in load_exchange(): si re.match(ccy_pattern, exc ['ccy'], re.IGNORECASE) non est Nulla: result.append(exc) eventum reditus

Progressio praevidere potest sequentem responsionem ad certas petitiones:

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

Gradus II: crea Telegram Bot cum @BotFather

Potes rationem creare nuntiis accipiendis et illis respondendo utendo servitio @BotPather. Ite ad paginam eius Telegram et /newbotes intra imperium. Instructiones in chat apparebit, secundum quas nomen automati scribere debes, et deinde eius oratio. Cum bot ratio creetur, nuntius acceptus continens tesseram in screen apparebit. Ad ulteriorem configurationem, his mandatis utere;

  • /setdescription - description;
  • /setabouttext - information about the new bot;
  • /setuserpic - profile photo;
  • /setinline - inline modus;
  • /Imperat - descriptio mandatorum.

In ultimo gradu configurationis, auxilium et commutationem describimus. Omnibus gradibus perfectis, tempus est ad coding transigendum.

Gradus III, constituendi et deducendi Bot

Faciamus file config.py. In eo, denotare debes unicum codicem bot et zonam temporis in qua programma informationes inveniet.

SIGNUM = '' # repone cum tessera autocineti temporis = 'Europae/Kioviae' TIMEZONE_COMMON_NAME = 'Kioviae'

Deinde alium fasciculum creamus cum importatione priorum scriptorum pb.py, bibliothecarum et aliorum componentium necessariorum. Desiderati sunt bibliothecae e systemate involucro installantur (pip).

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

Utamur argumento pyTelegramBotApi ad bot creare. Mittimus receptum signum in hoc codice utens:

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

Modulus nullus_stop efficit ut petitiones continenter mittantur. Operatio parametri methodo errores affici non debet.

Gradus IV scribe / satus Imperii Handler

Si omnes priores gradus recte fiunt, bot opus incepit. Progressio postulationes generat regulariter quia getUpdates methodo utitur. Ante lineam cum elementum none_stop, opus est fragmento codicis quod /incipiendi mandatum discurrit:

@ bot.message_handler(manda=['initium')) def start_command(nuntius): bot.send_message( message.chat.id, 'Salvete! Commutare possum tibi emere.n' + 'Ut mercaturas prelo / exchange.n' + 'Ad auxilium press /auxilium.' )

RџSЂRё imperat=['start'] exaequabo vera start_command appellatur. Summaque nuntii ibi pergit. Deinde, munus mittere debes efficiendum_message relate ad aliquem nuntium.

Step V: crea in / auxilium Imperii Handler

Auxilium mandatum potest impleri sicut puga pyga. In ea strepitando, user ratio telegraphi ad rationem capietur. Nomen ipsum da, ut "Quaere elit". Parametrum pone responsa_markup, quod usorem ad nexum redigit ad methodum mittendi_nuntii. In codice scribamus modulum qui tincidunt creat (InlineKeyboardMarkup). Aliquam eget nisi felis (InlineKeyboardButton).

Ad extremum mandatum tracto codice similis est:

@ bot.message_handler(manda=['auxilium')) def help_command(nuntius): tincidunt = telebot.types.InlineKeyboardMarkup() keyboard.add(telebot.types.InlineKeyboardButton" "Quae elit', url='ваша ссылка на профиль' ) ) bot.send_message( message.chat.id, '1) Accipere summam currencies prelo /exchange.n' + '2) Preme monetae quaeras in.n' + '3) Te nuntium accipiet in quo informationes de fonte ac scopo valūtās, " + "males emere ac rates vendentes" + '4) Click "Renova" ut hodiernam informationem de petitione accipias. ' + ' Bot etiam differentiam inter priorem et commutationem rates currentis ostendet.n ' + ' 5) Bot inlines sustinet. Typus @ in omni chat et prima littera monetae.', reply_markup=keyboard )

Codicis actio in telegrapho chat:

Telegram bot in Pythone. A duce completum rates ad scribere aut commutationem rates a VULNUS

Gradus VI, addens / commutationem Imperii Handler

Hic gradus est opus tesserae ostentandae cum symbolis currencies in chat. Claviaturae in screen cum optionibus te adiuvabit ut errores fugias. PrivatBank informationes praebet de rubla, pupa et eura. Optio InlineKeyboardButton opera sic:

  1. Usoris clicks in puga cum designatione desiderata.
  2. getUpdates accipit callback (CallbackQuery).
  3. Cognitum est quomodo tractandum urgeat tincidunt - informationes de Bulla pressa transmittitur.

/ Commutatio code tracto:

@ bot.message_handler(manda=['exchange')) def exchange_command(message): keyboard. keyboard.row(telebot.types.InlineKeyboardButton('EUR', callback_data='get-EUR'), telebot.types.InlineKeyboardButton('RUR', callback_data='get-RUR') ) bot.send_message( message.chat .id, 'Click on the currency of choice:', reply_markup=keyboard )

Eventus in codice in telegrapho:

Telegram bot in Pythone. A duce completum rates ad scribere aut commutationem rates a VULNUS

Step VII scribens tracto ad aedificatur in claviaturae fibulas

Involucrum pyTelegramBot Api continet munus decoratoris @bot.callback_query_handler. Hoc component destinatur ad callbackum transferendum in functionem, API devolvitur et vocationem recreat. Sic scriptum est:

def iq_callback(quaestio): data = query.data si data.startswith('get-'): get_ex_callback(quaestio)

Etiam scribemus modum get_ex_callback:

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

Alia methodus utilis est - answer_callback_query. Iuvat onus removere inter puga premente et eventum in velo ostendens. Epistulam mittere potes mittere ad mitte_exchange_query transeundo aliquo codice monetae et Nuntius. Send_exchange_result scribamus:

def send_exchange_result(nuntius, 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' )

Dum chatbotus accipit ex petitione ripae APIvisitator inscriptionem "typing nuntium" videt. Persona vera similis respondet. Ut tale signum in screen exhibeas, lineas status initus addere necesse erit. Deinde utemur get_excommutatione eius adiuvante, progressio designatio nummariae (rubles, nummi vel dollarii accipiet). send_message additis modis utitur: serialize_ex monetam in aliam formam convertit, et get_update_keyboard claviculas quae renovationis informationes constituit et monetam monetam aliis sermonibus mittunt.

Codicem pro get_update_keyboard scribamus. Duae globuli memorari necesse est - t et e pro specie et permutatione consistunt. In switch_inline_query item pro conjunctione Share opus est ut usor ex pluribus sermonibus eligere possit. Visitator eligere poterit cui mitteret commutationem rate monetae pupa, rublae vel euronis.

def get_update_keyboard(ex): keyboard. b': ex['emo], 's': ex['sale'], 'c': ex['ccy'] }}).repone('', '') ) telebot.types.InlineKeyboardButton ( 'Share', switch_inline_query=ex['ccy']) ) claviaturae reditus

Aliquando videre debes quantum rate commutatio brevi tempore mutata est. Duos modos scribamus pro conjunctione Update ut cursus in comparatione utentes videre possint.

Discrimen inter rates commutationis ad serializer per diss parametri transit.

Modi praescripti tantum laborant postquam notitia renovata est, primam curriculi ostensionem non afficiunt.

def serialize_ex(ex_json, diff=None): result = '' + ex_json ['base_ccy'] + ' -> ' + ex_json['ccy'] + ' :nn' + 'eme: 'ex_json ['emo] si diff: result += ' ' + serialize_exchange_diff(diff['buy_diff']) + 'n' + 'vende:' + ex_json['sale'] +' ' + serialize_exchange_diff(diff['sale_diff']) + 'n' else: result += 'nSell: ' + ex_json['sale'] + 'n' return result def serialize_exchange_diff(diff): result =' 0: result = '(' + str(diff) + ' " 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( 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">) eventus reditus

Finge visitatorem scire voluisse dollarorum commercium. Hic id accidit si USD in nuntio:

Telegram bot in Pythone. A duce completum rates ad scribere aut commutationem rates a VULNUS

Gradus VIII, deducentes Update Puga pyga Handler

Scribere codicem ad actiones cum Update bullis tractandis et iq_callback_methodi partem ei adde. Cum programmata rerum incipiunt cum parametro, scribere debebis get_ex_callback. In aliis adiunctis, parse JSON et key t obtinere conantur.

@ bot.callback_query_handler(func=lambda call: True) def iq_callback(query): data = query.data si data.startswith('get-'): get_ex_callback(query) else: try: if json.loads(data)[ 't'] == 'u': edit_message_callback(quaestio) nisi ValueError: pass

Si t pares u, scribere debebis programmata methodi recensionis. Dirumamus hunc processum gradatim:

  1. Download informationes sursum ut- balanus de re publica mercatus monetae (exchange_now = pb.get_exchange(data['c']).
  1. Epistulam novam scribens per serializer cum diff.
  2. Addito subscriptione (get_edited_signature).

Si nuntius initialis non mutat, methodum edit_message_text voca.

def edit_message_callback(quaery): 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), exchange_now ) ) + 'n' + get_edited_signature() si query.message: bot.edit_message_text(text, query.message.chat.id, query.message.message_id, reply_markup=get_update_keyboard(exchange_now), parse_modus='HTML' ) quaesitum.inline_message_id : bot.edit_message_text(text, inline_message_id=query.inline_message_id, reply_markup=get_update_keyboard(exchange_now), parse_modo='HTML' )

methodum get_ex_from_iq_data ad parse JSON scribamus:

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

Paucis pluribus modis opus est: exempli gratia, get_exchange_diff, quae vetera et nova informationes legit de pecunia currencies et differentiam ostendit.

def get_exchange_diff(last, now): return { 'sale_diff': supernatet("%.6f" % (natat(nunc['sale']) - float(last['sale']))), 'buy_diff': supernatet ("%.6f" % (natat(iam['emat'])) - supernatet(last['emat'])))}

Ultima, get_edita_signatura, ostendit tempus curriculi renovatiore renovatum est.

def get_edited_signature(): reditumRenovata ' + str(datetime.datetime.now(P_TIMEZONE).strftime('%H:%M:%S')) + ' (' + TIMEZONE_COMMON_NAME + ')'

Quam ob rem, nuntius renovatus ex autocineto stabili permutationis causa similis est:

Telegram bot in Pythone. A duce completum rates ad scribere aut commutationem rates a VULNUS

Cum in decursu mutatur, differentiae inter valores ostenduntur in nuntio ob parametri praescriptos.

Telegram bot in Pythone. A duce completum rates ad scribere aut commutationem rates a VULNUS

Gradus IX: Modus exsequendam Embedded

In modo constructum opus est ut cito informationes mittat ex programmatis ad quemlibet chat – nunc non debes addere colloquio tamquam participem. Cum usor Telegram bot nomen intrat cum signo @ ante illud, optiones conversionis supra input linea apparent. Si unum ex elementis premes, bot nuntium mittet ad colloquium cum eventibus et globulis ad augendas et mittendas notitias. Nomen mittentis continebit caption "via" ".

InlineQuery ad query_text per bibliothecam transmittitur. Codex solutionis munere utitur ut proventus investigationis accipias sicut aciem notitiarum et inline_query_id elementi. Utimur get_exchanges ut automati invenerit plures currencies in rogatu.

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)) )

Transimus ordinem notitiarum ad acquirendum_iq_articulos ut obiecti ab InlineQueryResultArticle per hanc methodum redire.

def get_iq_articles(commutationes): result = [] pro exc in commutationibus: result.append(telebot.types.InlineQueryResultArticle(id=exc['ccy'], title=exc['ccy'], input_message_content=telebot.types.InputTextMessageContent exc, parse_mode='HTML'), reply_markup=get_update_keyboard(exc), description='Convert ' + exc['base_ccy'] + ' -> ' + exc['ccy'], thumb_height=1 ) ) reditus eventus

Nunc si scribis @. et spatium in linea, eventus investigationis in velo apparebit - optiones convertendi in tres currencies promptos.

Telegram bot in Pythone. A duce completum rates ad scribere aut commutationem rates a VULNUS

Users eventus eliquare possunt intra monetam desideratam.

Post clicking in monetam desideratam ex indicem, chat idem nuntius accipit quod automatarii utentes recipiunt. Renovare deprimendo potes uti. Imago infra indicat nuntium updated per automati missum:

Telegram bot in Pythone. A duce completum rates ad scribere aut commutationem rates a VULNUS

Conclusio

Nunc scis quomodo autocinetum creare pro Telegram. Instrumenta utilia programmatis tuo addere potes: tesserae augendae et mittendae eventum aliis utentibus nuntii et in modo aedificato, qui te permittit uti functionibus autocinetorum extra chat cum eo. Ex hac instructione, aliquem simplicem autocinetum cum aliis functionibus creare potes – non solum id quod commutationem emere ostendet. Noli timere experiri cum bibliothecis, APIs, et codice adiutorem automatum creandi qui cum clientibus in Telegram confabulabitur et nexum hominum cum societatibus interest confirmabit.

Comment 1

  1. Fantástica publicación

Leave a Reply