የቴሌግራም ቦት በፓይዘን። ከባዶ ምንዛሬ ተመኖች ጋር ቦት ለመጻፍ የተሟላ መመሪያ

ቦቶች በቴሌግራም ከተመልካቾች ጋር ግንኙነት ለመፍጠር ወይም ከዚህ ቀደም በእጅ መከናወን የነበረባቸውን ድርጊቶች ለማቃለል የሚረዱ ፕሮግራሞች ናቸው። እነዚህ ፕሮግራሞች የተጻፉት በተለይ ለመልእክተኛው መድረክ ነው። ቦቶች በዚህ መንገድ ይሰራሉ፡ ተጠቃሚው በግቤት መስመር በኩል ትዕዛዝ ይልካል፣ እና ስርዓቱ በጽሁፍ ወይም በይነተገናኝ መልዕክት ምላሽ ይሰጣል። አንዳንድ ጊዜ ፕሮግራሙ የእውነተኛ ሰው ድርጊቶችን እንኳን ሳይቀር ይኮርጃል - እንዲህ ዓይነቱ ቦት በደንበኞች መካከል የበለጠ መተማመንን ያነሳሳል.

ለተጠቃሚዎች አውቶማቲክ እገዛ ብዙ አይነት ስርዓቶች አሉ። አንዳንድ ቦቶች ከደንበኞች ጋር ብቻ ይገናኛሉ፣ ሌሎች ደግሞ በመደበኛነት መረጃ ይሰጣሉ። ፕሮግራሞችን ወደ ዓይነቶች በግልፅ ለመከፋፈል የማይቻል ነው - ገንቢዎች ብዙውን ጊዜ በአንድ ቦት ውስጥ በርካታ ተግባራትን ያጣምራሉ.

ለቴሌግራም ቀላል ቦቶን በይነተገናኝ አካላት በስክሪኑ ላይ ባሉ አዝራሮች መልክ በ9 ደረጃዎች መፃፍ ይችላሉ። እያንዳንዳቸውን በዝርዝር እንመልከታቸው እና ጥቂት ጥያቄዎችን እንመልስ።

  • ቦት እንዴት እንደሚጀመር;
  • አብሮ የተሰራ የቁልፍ ሰሌዳ ከአንድ ወይም ብዙ አዝራሮች እንዴት እንደሚመዘገብ;
  • ለተፈለጉት ተግባራት አዝራሮችን እንዴት ማዘጋጀት እንደሚቻል;
  • የውስጠ-መስመር ሁነታ ምንድን ነው እና ለነባር ቦት እንዴት ማዋቀር እንደሚቻል።

ደረጃ 0፡ ስለ ቴሌግራም ቦቶች ኤፒአይ ቲዎሬቲካል ዳራ

የቴሌግራም ቦቶችን ለመፍጠር ዋናው መሳሪያ የኤችቲኤምኤል መተግበሪያ ፕሮግራሚንግ በይነገጽ ወይም HTML API ነው። ይህ አካል የጎብኝ ጥያቄዎችን ይቀበላል እና ምላሾችን በመረጃ መልክ ይልካል። ዝግጁ የሆኑ ዲዛይኖች በፕሮግራሙ ላይ ስራውን ቀላል ያደርጉታል. ለቴሌግራም ቦት ለመጻፍ ይህን ኢሜል አድራሻ መጠቀም አለቦት፡ https://api.telegram.org/bot/METHOD_NAME

ለቦቱ ትክክለኛ አሠራር ማስመሰያም ያስፈልጋል - ፕሮግራሙን የሚከላከለው እና የታመኑ ገንቢዎች መዳረሻን የሚከፍት የቁምፊዎች ጥምረት። እያንዳንዱ ማስመሰያ ልዩ ነው። ሕብረቁምፊው ሲፈጠር ለቦት ተመድቧል። ዘዴዎች የተለያዩ ሊሆኑ ይችላሉ፡ getUpdates፣ getChat እና ሌሎች። የስልቱ ምርጫ የሚወሰነው ገንቢዎቹ ከቦቱ በሚጠብቁት አልጎሪዝም ላይ ነው። የማስመሰያ ምሳሌ፡-

123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

ቦቶች የGET እና የPOST ጥያቄዎችን ይጠቀማሉ። የስልት መለኪያዎች ብዙ ጊዜ መሟላት አለባቸው - ለምሳሌ የመልእክት መላኪያ ዘዴ የውይይት መታወቂያውን እና አንዳንድ ፅሁፎችን ለመላክ ሲታሰብ። ዘዴን የማጣራት መለኪያዎች አፕሊኬሽን/x-www-form-urlencoded ወይም በመተግበሪያ-json በመጠቀም እንደ URL መጠይቅ ሕብረቁምፊ ሊተላለፉ ይችላሉ። እነዚህ ዘዴዎች ፋይሎችን ለማውረድ ተስማሚ አይደሉም. UTF-8 ኮድ ማድረግም ያስፈልጋል። ጥያቄ ወደ ኤፒአይ በመላክ ውጤቱን በJSON ቅርጸት ማግኘት ይችላሉ። በgetME ዘዴ መረጃን ለማምጣት የፕሮግራሙን ምላሽ ይመልከቱ፡-

https://api.telegram.org/bot ያግኙ/getMe{ እሺ፡ እውነት፡ ውጤት፡ {መታወቂያ፡ 231757398፡ የመጀመሪያ ስም፡ "የልውውጥ ተመን ቦት"፣ የተጠቃሚ ስም፡ "exchangetestbot"}}

ከሆነ ውጤቱ ይገኛል ok እኩል ናቸው እውነተኛ. አለበለዚያ ስርዓቱ ስህተትን ያሳያል.

በቦቶች ውስጥ ብጁ መልዕክቶችን ለማግኘት ሁለት መንገዶች አሉ። ሁለቱም ዘዴዎች ውጤታማ ናቸው, ግን በተለያዩ ሁኔታዎች ተስማሚ ናቸው. መልዕክቶችን ለማግኘት በ getUpdates ዘዴ ጥያቄን እራስዎ መጻፍ ይችላሉ - ፕሮግራሙ በማያ ገጹ ላይ የዝማኔ ውሂብ ድርድር ያሳያል። ጥያቄዎች በየጊዜው መላክ አለባቸው፣ እያንዳንዱን ድርድር ከመረመሩ በኋላ መላክ ይደገማል። Offset አዲስ ውጤት ከመጫንዎ በፊት የተዘለሉ መዝገቦችን ቁጥር የሚወስን የተፈተሹ ነገሮች እንደገና እንዳይታዩ የሚወስን መለኪያ ነው። የgetUpdates ዘዴ ጥቅማጥቅሞች ከሚከተሉት ጋር ይመጣሉ።

  • HTTPS ለማዋቀር ምንም መንገድ የለም;
  • ውስብስብ የስክሪፕት ቋንቋዎች ጥቅም ላይ ይውላሉ;
  • የ bot አገልጋይ ከጊዜ ወደ ጊዜ ይለዋወጣል;
  • ቦት በተጠቃሚዎች ተጭኗል።

የተጠቃሚ መልዕክቶችን ለመቀበል ሊጻፍ የሚችለው ሁለተኛው ዘዴ setWebhook ነው። አንድ ጊዜ ጥቅም ላይ ይውላል, አዲስ ጥያቄዎችን ያለማቋረጥ መላክ አያስፈልግም. የድር መንጠቆው የውሂብ ማሻሻያዎችን ወደተገለጸው ዩአርኤል ይልካል። ይህ ዘዴ የSSL እውቅና ማረጋገጫ ያስፈልገዋል። Webhook በነዚህ ሁኔታዎች ጠቃሚ ይሆናል፡

  • የድር ፕሮግራሚንግ ቋንቋዎች ጥቅም ላይ ይውላሉ;
  • ቦት ከመጠን በላይ አልተጫነም ፣ ብዙ ተጠቃሚዎች የሉም ፣
  • አገልጋዩ አይለወጥም, ፕሮግራሙ በተመሳሳይ አገልጋይ ላይ ለረጅም ጊዜ ይቆያል.

ተጨማሪ መመሪያዎች ላይ፣ getUpdates እንጠቀማለን።

የ @BotFather ቴሌግራም አገልግሎት የውይይት ቦቶችን ለመፍጠር የተነደፈ ነው። መሰረታዊ ቅንጅቶችም በዚህ ስርዓት ተዘጋጅተዋል - BotFather መግለጫ እንዲሰጡ, የመገለጫ ፎቶግራፍ ለማስቀመጥ, የድጋፍ መሳሪያዎችን ለመጨመር ይረዳዎታል. ቤተ-መጽሐፍት - የቴሌግራም ቦቶች የኤችቲኤምኤል ጥያቄዎች ስብስቦች - በበይነመረብ ላይ ይገኛሉ ፣ በጣም ብዙ ናቸው። የምሳሌ ፕሮግራሙን ሲፈጥሩ 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) ይመለሱ get_exchange(ccy_key) ): ለኤክ በሎድ_ልውውጥ(): ccy_key ከሆነ = exc ['ccy']: መመለስ exc return የውሸት የልውውጦች (ccy_pattern): ውጤት = [] ccy_pattern = ዳግም ማምለጥ(ccy_pattern) + '.*' ለኤክ ኢን load_exchange(): re.match (ccy_pattern, exc ['ccy'], re.IGNORECASE) ካልሆነ ምንም አይደለም: result.append(exc) መመለሻ ውጤት

ፕሮግራሙ ለተገለጹት ጥያቄዎች የሚከተለውን ምላሽ መስጠት ይችላል፡-

[ {ccy:"USD"፣base_ccy:"UAH"፣ግዛ፡"25.90000"፣ሽያጭ፡"26.25000"}፣ {ccy:"EUR"፣base_ccy:"UAH"፣ግዛ፡"29.10000"፣ሽያጭ፡"29.85000 " }፣ {ccy:"RUR"፣base_ccy:"UAH"፣ግዛ፡"0.37800"፣ሽያጭ፡"0.41800"}፣ {ccy:"BTC"፣base_ccy:"USD"፣ግዛ፡"11220.0384"፣ሽያጭ፡ "12401.0950"}]

ደረጃ 2፡ በ @BotFather የቴሌግራም ቦት ይፍጠሩ

የ @BotFather አገልግሎትን በመጠቀም መልዕክቶችን ለመቀበል እና ለእነሱ ምላሽ ለመስጠት ፕሮግራም መፍጠር ይችላሉ። ወደ ቴሌግራም ገጹ ይሂዱ እና /newbot የሚለውን ትዕዛዝ ያስገቡ። መመሪያዎች በቻት ውስጥ ይታያሉ, በዚህ መሠረት በመጀመሪያ የቦቱን ስም እና ከዚያም አድራሻውን መጻፍ ያስፈልግዎታል. የቦት መለያው ሲፈጠር ቶከን የያዘ የእንኳን ደህና መጣችሁ መልእክት በስክሪኑ ላይ ይታያል። ለተጨማሪ ውቅር እነዚህን ትዕዛዞች ተጠቀም፡-

  • / setdescription - መግለጫ;
  • / setabouttext - ስለ አዲሱ ቦት መረጃ;
  • / ሴቱዘርፒክ - የመገለጫ ፎቶ;
  • / ሴቲንላይን - የመስመር ውስጥ ሁነታ;
  • /setcommands - የትዕዛዝ መግለጫ.

በመጨረሻው የማዋቀር ደረጃ፣/እርዳታ እና/ልውውጡን እንገልፃለን። ሁሉም እርምጃዎች ሲጠናቀቁ፣ ወደ ኮድ ማድረግ ለመቀጠል ጊዜው አሁን ነው።

ደረጃ 3፡ ቦትን ማዋቀር እና ማስጀመር

config.py ፋይል እንፍጠር። በእሱ ውስጥ, ልዩ የሆነውን የ bot ኮድ እና ፕሮግራሙ መረጃ የሚያገኝበትን የሰዓት ሰቅ መግለጽ ያስፈልግዎታል.

ቶከን = '' # በቦትዎ ማስመሰያ TIMEZONE = 'አውሮፓ/ኪየቭ' TIMEZONE_COMMON_NAME = 'ኪየቭ' ይተኩ

በመቀጠል, ቀደም ሲል የተጻፈውን pb.py, ቤተ-መጻሕፍት እና ሌሎች አስፈላጊ ክፍሎችን በማስመጣት ሌላ ፋይል እንፈጥራለን. የጎደሉት ቤተ-መጻሕፍት ከጥቅል አስተዳደር ሥርዓት (ፒፒ) ተጭነዋል።

telebotimport አስመጣ ውቅረት pbimport datetimeimport pytzimport jsonimport መከታተያ P_TIMEZONE = pytz.timezone(config.TIMEZONE) TIMEZONE_COMMON_NAME = ውቅር.TIMEZONE_COMMON_NAME

ቦት ለመፍጠር የ pyTelegramBotApi ይዘትን እንጠቀም። የተቀበለውን ማስመሰያ በሚከተለው ኮድ እንልካለን።

bot = telebot.TeleBot(config.TOKEN) bot.polling(none_stop=እውነት)

የማያቆም መለኪያው ጥያቄዎች ያለማቋረጥ እንደሚላኩ ያረጋግጣል። የመለኪያው አሠራር በስልት ስህተቶች ተጽዕኖ አይኖረውም.

ደረጃ 4፡ የትእዛዝ ተቆጣጣሪውን/ጀምርን ይፃፉ

ሁሉም የቀደሙት እርምጃዎች በትክክል ከተከናወኑ, ቦት መሥራት ጀምሯል. ፕሮግራሙ የgetUpdates ዘዴን ስለሚጠቀም በየጊዜው ጥያቄዎችን ያመነጫል። ከማያስቆመው ኤለመንት ጋር ከመስመሩ በፊት የ/ጀምር ትዕዛዙን የሚያስኬድ ኮድ ያስፈልገናል፡-

@bot.message_handler(ትዕዛዞች=['ጀምር']) ጀምር start_command(መልእክት)፡ bot.send_message( message.chat.id፣ 'ሰላምታ! ምንዛሪ ዋጋዎችን ላሳይዎት እችላለሁ።n' + 'የምንዛሪ ተመኖችን ለማግኘት / ይጫኑ exchange.n' + 'እርዳታ ለማግኘት /helpን ይጫኑ።')

RџSЂRё ትዕዛዞች=['ጀምር'] ከእውነት ጋር እኩል ነው። start_command ይባላል። የመልእክቱ ይዘት ወደዚያ ይሄዳል። በመቀጠል የመላክ ተግባርን መተግበር ያስፈልግዎታል_መልእክት። ከአንድ የተወሰነ መልእክት ጋር በተያያዘ።

ደረጃ 5፡ የእርዳታ ትዕዛዝ ተቆጣጣሪ ይፍጠሩ

የ/እርዳታ ትዕዛዙ እንደ ቁልፍ ሊተገበር ይችላል። እሱን ጠቅ በማድረግ ተጠቃሚው ወደ ገንቢው ቴሌግራም መለያ ይወሰዳል። አዝራሩን ስም ስጠው፣ ለምሳሌ “ገንቢውን ጠይቅ”። ለመልእክት_መልእክት ዘዴ ተጠቃሚውን ወደ አገናኝ የሚያዞረው የምላሽ_ምልክት መለኪያ ያዘጋጁ። የቁልፍ ሰሌዳውን የሚፈጥረውን መለኪያ (InlineKeyboardMarkup) በኮዱ ውስጥ እንፃፍ። የሚያስፈልግህ አንድ አዝራር ብቻ ነው (የኢንላይን ቁልፍ ሰሌዳ አዝራር)።

የመጨረሻው የትእዛዝ ተቆጣጣሪ ኮድ ይህንን ይመስላል።

@bot.message_handler(ትዕዛዞች=['እገዛ']) እገዛ_ትእዛዝ(መልእክት)፡ ኪቦርድ = 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) ቦት በመስመር ውስጥ ይደግፋል። @ ይተይቡ በማንኛውም ውይይት እና የመገበያያ ገንዘብ የመጀመሪያ ፊደሎች።', reply_markup=ቁልፍ ሰሌዳ )

በቴሌግራም ውይይት ውስጥ የኮድ እርምጃ፡-

የቴሌግራም ቦት በፓይዘን። ከባዶ ምንዛሬ ተመኖች ጋር ቦት ለመጻፍ የተሟላ መመሪያ

ደረጃ 6፡ የትእዛዝ ተቆጣጣሪውን/exchangeን ማከል

ይህ እርምጃ በቻት ውስጥ የሚገኙ ምንዛሬዎች ምልክቶች ያላቸውን ቁልፎች ለማሳየት ያስፈልጋል። አማራጮች ያሉት የማያ ገጽ ላይ ቁልፍ ሰሌዳ ስህተቶችን ለማስወገድ ይረዳዎታል። PrivatBank ስለ ሩብል፣ ዶላር እና ዩሮ መረጃ ይሰጣል። የ InlineKeyboardButton አማራጭ እንደዚህ ይሰራል፡-

  1. ተጠቃሚው በተፈለገው ስያሜ አዝራሩን ጠቅ ያደርጋል።
  2. getUpdates የመልሶ ጥሪ (የጥሪ ጥሪ) ይቀበላል።
  3. የቁልፍ ሰሌዳውን እንዴት እንደሚይዝ ይታወቃል - ስለተጫኑት ቁልፍ መረጃ ይተላለፋል.

/ የመለዋወጫ ኮድ

@bot.message_handler(ትዕዛዞች=['ልውውጥ']) ዲፍ exchange_ትእዛዝ(መልእክት)፡ ኪቦርድ = telebot.types.InlineKeyboardMarkup() keyboard.row( telebot.types.InlineKeyboardButton('USD'፣ callback_data='get-USD') ) ኪቦርድ.row( telebot.types.InlineKeyboardButton('EUR', callback_data='get-EUR'), telebot.types.InlineKeyboardButton('RUR', callback_data='get-RUR') ) bot.send_message( message.chat .መታወቂያ፣ 'በምርጫ ምንዛሬ ላይ ጠቅ ያድርጉ፡'፣ reply_markup=የቁልፍ ሰሌዳ)

በቴሌግራም ውስጥ ያለው ኮድ ውጤት:

የቴሌግራም ቦት በፓይዘን። ከባዶ ምንዛሬ ተመኖች ጋር ቦት ለመጻፍ የተሟላ መመሪያ

ደረጃ 7፡ አብሮ የተሰሩ የቁልፍ ሰሌዳ አዝራሮችን ተቆጣጣሪ በመጻፍ ላይ

የ pyTelegramBot Api ጥቅል @bot.callback_query_handler የማስዋቢያ ተግባር ይዟል። ይህ አካል መልሶ መደወልን ወደ ተግባር ለመተርጎም የተነደፈ ነው - ኤፒአይ ይከፍታል እና ጥሪውን እንደገና ይፈጥራል። እንዲህ ተብሎ ተጽፏል።

@bot.callback_query_handler(func=lambda ጥሪ፡ እውነት) def iq_callback(ጥያቄ)፡ data = query.data if data.startswith('get-'): get_ex_callback(ጥያቄ)

የማግኘት_የቀድሞ ጥሪ ዘዴን እንፃፍ፡-

def get_ex_callback(መጠይቅ)፡ bot.answer_callback_query(query.id) send_exchange_result(ጥያቄ.መልእክት, ጥያቄ.ዳታ[4:])

ሌላ ጠቃሚ ዘዴ አለ - የመልሶ መደወል_ጥያቄ። አዝራሩን በመጫን እና ውጤቱን በስክሪኑ ላይ በማሳየት መካከል ያለውን ጭነት ለማስወገድ ይረዳል. አንዳንድ የምንዛሪ ኮድ እና መልእክት በማስተላለፍ ለመላክ_exchange_query መልእክት መላክ ይችላሉ። የመላክ_የልውውጥ_ውጤትን እንፃፍ፡-

def send_exchange_result(መልእክት፣ ex_code)፡ bot.send_chat_action(message.chat.id፣ 'ትየባ') ex = pb.get_exchange(ex_code) bot.send_message( message.chat.id፣ serialize_ex(ለምሳሌ) reply_markup=get_update_keyboard( ex ), parse_mode='HTML')

ቻትቦት የጥያቄውን ውጤት ከባንክ ሲቀበል ኤ ፒ አይጎብኚው "መልእክት መተየብ" የሚለውን ጽሑፍ ይመለከታል. እውነተኛ ሰው የሚመልስ ይመስላል። በስክሪኑ ላይ እንደዚህ ያለ አመልካች ለማሳየት የግቤት ሁኔታ መስመሮችን መጨመር ያስፈልግዎታል. በመቀጠል get_exchangeን እንጠቀማለን - በእሱ እርዳታ ፕሮግራሙ የገንዘብ ስያሜ (ሩብል, ዩሮ ወይም ዶላር) ይቀበላል. send_message ተጨማሪ ዘዴዎችን ይጠቀማል፡ serialize_ex ገንዘቡን ወደ ሌላ ፎርማት ይቀይራል፣ እና Get_update_keyboard መረጃን የሚያዘምኑ እና የምንዛሬ ገበያ ውሂብን ወደ ሌሎች ቻቶች የሚልኩ ሶፍት keyዎችን ያዘጋጃል።

የ Get_update_keyboard ኮድ እንፃፍ። ሁለት አዝራሮችን መጥቀስ ያስፈልጋል - t እና e ለአይነት እና ልውውጥ ይቆማሉ. ተጠቃሚው ከበርካታ ውይይቶች መምረጥ እንዲችል ለማጋራት የመቀየሪያ_inline_query ንጥል ያስፈልጋል። ጎብኚው አሁን ያለውን የዶላር፣ ሩብል ወይም ዩሮ የምንዛሪ ዋጋ ለማን እንደሚልክ መምረጥ ይችላል።

def get_update_keyboard(ለምሳሌ)፡ ኪቦርድ = telebot.types.InlineKeyboardMarkup() keyboard.row( telebot.types.InlineKeyboardButton( 'አዘምን'፣ callback_data=json.dumps({'t': 'u'፣ 'e': {' b': ex['ግዛ'], 's': ex['ሽያጭ'], 'c': ex['ccy']}} }) ተካ('', '')), telebot.types.InlineKeyboardButton ('አጋራ'፣ switch_inline_query=ex['ccy'])) የቁልፍ ሰሌዳ ተመለስ

አንዳንድ ጊዜ በአጭር ጊዜ ውስጥ የምንዛሪ ተመን ምን ያህል እንደተቀየረ ማየት ያስፈልግዎታል። ተጠቃሚዎች ኮርሶችን በንፅፅር ማየት እንዲችሉ ለማዘመኛ ቁልፍ ሁለት ዘዴዎችን እንፃፍ።

የምንዛሬ ተመኖች መካከል ያለው ልዩነት ወደ serializer በ diff ግቤት በኩል ይተላለፋል.

የተደነገጉ ዘዴዎች የሚሠሩት መረጃው ከተዘመነ በኋላ ብቻ ነው, የኮርሱ የመጀመሪያ ማሳያ ላይ ተጽዕኖ አይኖራቸውም.

def serialize_ex(ex_json, diff=ምንም): ውጤት = ''+ ex_json['base_ccy'] +' -> '+ ex_json['ccy'] + ':n' ' + serialize_exchange_diff(diff['sale_diff']) + 'n' ሌላ፡ ውጤት += 'nሽጥ፡' + ex_json['ሽያጭ'] + 'n' የመመለሻ ውጤት serialize_exchange_diff(diff): ውጤት = '' ከሆነ ልዩነት > 0: ውጤት = '(' + 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">)' የመመለሻ ውጤት

ጎብኚው የዶላር ምንዛሪ ዋጋን ለማወቅ ፈልጎ እንደሆነ አስብ። በመልእክቱ ውስጥ ዶላርን ከመረጡ ምን እንደሚፈጠር እነሆ፡-

የቴሌግራም ቦት በፓይዘን። ከባዶ ምንዛሬ ተመኖች ጋር ቦት ለመጻፍ የተሟላ መመሪያ

ደረጃ 8፡ የዝማኔ አዝራር ተቆጣጣሪን በመተግበር ላይ

በዝማኔ አዝራሩ የእርምጃዎችን አያያዝ ኮድ እንፃፍ እና የ iq_የመልሶ ጥሪ_ዘዴ ክፍሉን እንጨምርበት። የፕሮግራም እቃዎች በግቤት መለኪያ ሲጀምሩ get_ex_callback መፃፍ አለቦት። በሌሎች ሁኔታዎች፣ JSONን እንመረምራለን እና ቁልፉን ለማግኘት እንሞክራለን።

@bot.callback_query_handler (func=lambda ጥሪ: እውነት) def iq_callback (ጥያቄ): data = query.data if data.startswith ('get-'): get_ex_callback (ጥያቄ) ሌላ: ይሞክሩ: json.loads (ውሂብ) ከሆነ[ 't'] == 'u': edit_message_rellback(መጠይቅ) ከValueError በስተቀር፡ ማለፍ

ከአንተ ጋር እኩል ከሆነ፣ ለአርትዕ_መልእክት_መልሶ መደወል ዘዴ ፕሮግራም መፃፍ አለብህ። ይህንን ሂደት ደረጃ በደረጃ እንከፋፍል-

  1. ስለ ምንዛሪ ገበያው ሁኔታ ወቅታዊ መረጃን በማውረድ ላይ (exchange_now = pb.get_exchange(ዳታ['c']))።
  1. አዲስ መልእክት በሴሪያላይዘር ከዲፍ ጋር በመፃፍ ላይ።
  2. ፊርማ ማከል (የተስተካከለ_ፊርማ)።

የመጀመሪያው መልእክት ካልተቀየረ ወደ edit_message_text ዘዴ ይደውሉ።

def edit_message_callback(መጠይቅ)፡ ዳታ = json.loads(ጥያቄ.ዳታ)['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() if query.message: bot.edit_message_text(ጽሑፍ, query.message.chat.id, query.message.message_id, query.message.message_id, reply_markup=get_update_keyboard(exchange_now),parse_mode='HTML') _elifmesageinline. : bot.edit_message_text(ጽሑፍ፣ inline_message_id=query.inline_message_id፣ reply_markup=get_update_keyboard(exchange_now)፣parse_mode='HTML')

JSONን ለመተንተን get_ex_from_iq_data የሚለውን ዘዴ እንፃፍ፡-

def get_ex_from_iq_data(exc_json): ተመለስ {'ግዛ': exc_json['b'], 'ሽያጭ': exc_json['s']}

ጥቂት ተጨማሪ ዘዴዎች ያስፈልጉዎታል፡ ለምሳሌ get_exchange_diff፣ ስለ ምንዛሪ ዋጋ አሮጌውን እና አዲስ መረጃን የሚያነብ እና ልዩነቱን ያሳያል።

def get_exchange_diff(የመጨረሻ፣ አሁን)፡ ተመለስ {'sale_diff'፡float("%6f"% (float(አሁን['ሽያጭ']])) - ተንሳፋፊ(የመጨረሻ['ሽያጭ']))))፣"ግዛ_ዲፍ"፡ ተንሳፋፊ ("%6f" % (ተንሳፋፊ(አሁን['ግዛ'])) - ተንሳፋፊ(የመጨረሻ['ግዛ']))))}

የመጨረሻው፣ get_edited_signature፣ ኮርሱ ለመጨረሻ ጊዜ የዘመነበትን ጊዜ ያሳያል።

def get_edited_signature()፡ ተመለስተዘምኗል '+ str(datetime.datetime.now(P_TIMEZONE))።strftime('%H:%M:%S')) + '('+ TIMEZONE_COMMON_NAME +')'

በውጤቱም የተረጋጋ የምንዛሪ ተመን ያለው ከቦት የተሻሻለው መልእክት ይህን ይመስላል።

የቴሌግራም ቦት በፓይዘን። ከባዶ ምንዛሬ ተመኖች ጋር ቦት ለመጻፍ የተሟላ መመሪያ

ትምህርቱ በሚቀየርበት ጊዜ በእሴቶቹ መካከል ያለው ልዩነት በተደነገገው ግቤቶች ምክንያት በመልእክቱ ውስጥ ይታያል።

የቴሌግራም ቦት በፓይዘን። ከባዶ ምንዛሬ ተመኖች ጋር ቦት ለመጻፍ የተሟላ መመሪያ

ደረጃ 9፡ የተከተተ ሞድ ትግበራ

ከፕሮግራሙ ወደ ማንኛውም ውይይት መረጃን በፍጥነት ለመላክ አብሮ የተሰራው ሁነታ ያስፈልጋል - አሁን እንደ ተሳታፊ ወደ ውይይቱ ቦት ማከል አያስፈልግዎትም። አንድ የቴሌግራም ተጠቃሚ ከፊት ለፊት ያለው የ @ ምልክት ያለበትን የቦት ስም ሲያስገባ የመቀየሪያ አማራጮች ከግቤት መስመሩ በላይ መታየት አለባቸው። ከንጥሎቹ ውስጥ አንዱን ጠቅ ካደረጉ ቦት መረጃን ለማዘመን እና ለመላክ ከውጤቶቹ እና አዝራሮች ጋር ወደ ውይይቱ መልእክት ይልካል። የላኪው ስም “በኩል” የሚል መግለጫ ይይዛል ".

InlineQuery በቤተ-መጽሐፍት በኩል ወደ ጥያቄ_ጽሑፍ ተላልፏል። ኮዱ የፍለጋ ውጤቶቹን እንደ የውሂብ ድርድር እና የ inline_query_id አባል ለማምጣት የመልስ_መስመር ተግባርን ይጠቀማል። ቦቱ በጠየቀ ጊዜ ብዙ ምንዛሬዎችን እንዲያገኝ get_exchanges እንጠቀማለን።

@bot.inline_handler(func=lambda መጠይቅ፡ እውነት) def query_text(inline_query): bot.answer_inline_query( inline_query.id, get_iq_articles(pb.get_exchanges(inline_query.query))) )

ከInlineQueryResultArticle እቃዎችን በዚህ ዘዴ ለመመለስ_iq_articles ለማግኘት ብዙ አይነት ዳታ እናስተላልፋለን።

def get_iq_articles(ልውውጦች)፡ ውጤት = [] ለኤክስ ልውውጥ፡ result.append( telebot.types.InlineQueryResultArticle( id=exc['ccy'], title=exc['ccy'], input_message_content=telebot.types.InputTextMessageContent ( serialize_ex(exc)፣ parse_mode='HTML')፣ reply_markup=get_update_keyboard(exc), description='ቀይር' + exc['base_ccy'] + ' -> '+ exc['ccy']፣ thumb_height=1 )) ውጤት መመለስ

አሁን @ ከፃፉ እና በመስመሩ ውስጥ ያለው ቦታ, የፍለጋ ውጤቶቹ በስክሪኑ ላይ ይታያሉ - ወደ ሶስት የሚገኙ ምንዛሬዎች ለመለወጥ አማራጮች.

የቴሌግራም ቦት በፓይዘን። ከባዶ ምንዛሬ ተመኖች ጋር ቦት ለመጻፍ የተሟላ መመሪያ

ተጠቃሚዎች የሚፈለገውን ገንዘብ በማስገባት ውጤቱን ማጣራት ይችላሉ።

ከዝርዝሩ ውስጥ የተፈለገውን ምንዛሪ ጠቅ ካደረጉ በኋላ ቻቱ የቦት ተጠቃሚዎች የሚቀበሉትን መልእክት ይቀበላል። እንዲሁም አዘምን የሚለውን ቁልፍ መጠቀም ይችላሉ። ከታች ያለው ምስል በቦት በኩል የተላከውን የዘመነ መልእክት ያሳያል፡-

የቴሌግራም ቦት በፓይዘን። ከባዶ ምንዛሬ ተመኖች ጋር ቦት ለመጻፍ የተሟላ መመሪያ

መደምደሚያ

አሁን ለቴሌግራም ቦት እንዴት መፍጠር እንደሚችሉ ያውቃሉ። በፕሮግራምዎ ላይ ጠቃሚ መሳሪያዎችን ማከል ይችላሉ: ውጤቱን ለማዘመን እና ለሌሎች የመልእክተኛው ተጠቃሚዎች ለመላክ ቁልፎች እና አብሮ የተሰራ ሁነታ ከቻት ውጭ የቦት ተግባራትን እንዲጠቀሙ ያስችልዎታል ። በዚህ መመሪያ ላይ በመመስረት ማንኛውንም ቀላል ቦት ከሌሎች ተግባራት ጋር መፍጠር ይችላሉ - የምንዛሪ ዋጋዎችን የሚያሳይ ብቻ አይደለም. በቴሌግራም ከደንበኞች ጋር የሚወያይ እና ፍላጎት ያላቸውን ሰዎች ከኩባንያው ጋር ያለውን ግንኙነት የሚያጠናክር አውቶማቲክ ረዳት ለመፍጠር በቤተ-መጽሐፍት፣ ኤፒአይ እና ኮድ ለመሞከር አትፍሩ።

1 አስተያየት

መልስ ይስጡ