Telegrammas robots Python. Pilnīgs ceļvedis robotprogrammatūras rakstīšanai ar valūtas maiņas kursiem no nulles

Boti telegrammā ir programmas, kas palīdz nodibināt kontaktu ar auditoriju vai vienkāršo darbības, kas iepriekš bija jāveic manuāli. Šīs programmas ir rakstītas īpaši Messenger platformai. Boti darbojas šādi: lietotājs nosūta komandu caur ievades līniju, un sistēma atbild ar teksta vai interaktīvu ziņojumu. Dažkārt programma pat atdarina reālas personas darbības – šāds bots iedveš lielāku uzticību klientu vidū.

Ir vairāki sistēmu veidi, kas nodrošina automātisku palīdzību lietotājiem. Daži boti vienkārši sazinās ar klientiem, citi regulāri sniedz informāciju. Programmas nav iespējams skaidri iedalīt tipos – bieži vien izstrādātāji vienā botā apvieno vairākas funkcijas.

9 soļos varat uzrakstīt vienkāršu Telegram robotprogrammu ar interaktīviem elementiem ekrāna pogu veidā. Apskatīsim katru no tiem sīkāk un atbildēsim uz dažiem jautājumiem:

  • kā palaist robotprogrammu;
  • kā reģistrēt iebūvēto tastatūru no vienas vai vairākām pogām;
  • kā ieprogrammēt pogas vēlamajām funkcijām;
  • kas ir iekļautais režīms un kā to iestatīt esošam robotam.

0. darbība: teorētiskā informācija par Telegram robotprogrammatūras API

Galvenais rīks, ko izmanto, lai izveidotu Telegram robotus, ir HTML lietojumprogrammu saskarne jeb HTML API. Šis elements pieņem apmeklētāju pieprasījumus un nosūta atbildes informācijas veidā. Gatavie dizaini vienkāršo darbu pie programmas. Lai rakstītu robotu Telegram, jums jāizmanto šī e-pasta adrese: https://api.telegram.org/bot/METHOD_NAME

Bota pareizai darbībai ir nepieciešams arī marķieris – rakstzīmju kombinācija, kas aizsargā programmu un atver tai piekļuvi uzticamiem izstrādātājiem. Katrs žetons ir unikāls. Virkne tiek piešķirta robotam pēc izveides. Metodes var būt dažādas: getUpdates, getChat un citas. Metodes izvēle ir atkarīga no tā, kādu algoritmu izstrādātāji sagaida no robota. Tokena piemērs:

123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

Boti izmanto GET un POST pieprasījumus. Metodes parametri bieži ir jāpapildina – piemēram, kad sendMessage metodei paredzēts nosūtīt tērzēšanas id un kādu tekstu. Metodes precizēšanas parametrus var nodot kā URL vaicājuma virkni, izmantojot application/x-www-form-urlencoded vai application-json. Šīs metodes nav piemērotas failu lejupielādei. Nepieciešams arī UTF-8 kodējums. Nosūtot pieprasījumu API, jūs varat iegūt rezultātu JSON formātā. Apskatiet programmas reakciju uz informācijas izgūšanu, izmantojot metodi getME:

IEGŪT https://api.telegram.org/bot/getMe{ ok: true, rezultāts: { id: 231757398, first_name: "Maiņas kursa robots", lietotājvārds: "exchangetestbot" } }

Rezultāts tiks iegūts, ja ok ir vienāds patiess. Pretējā gadījumā sistēma parādīs kļūdu.

Ir divi veidi, kā iegūt pielāgotus ziņojumus robotprogrammatūrās. Abas metodes ir efektīvas, taču ir piemērotas dažādos gadījumos. Lai saņemtu ziņojumus, varat manuāli uzrakstīt pieprasījumu ar metodi getUpdates – programma ekrānā parādīs datu masīvu Update. Pieprasījumi jāsūta regulāri, pēc katra masīva analīzes sūtīšana tiek atkārtota. Nobīde ir parametrs, kas nosaka izlaisto ierakstu skaitu pirms jauna rezultāta ielādes, lai izvairītos no pārbaudīto objektu atkārtotas parādīšanās. GetUpdates metodes priekšrocības tiks izmantotas, ja:

  • nav iespējams konfigurēt HTTPS;
  • tiek izmantotas sarežģītas skriptu valodas;
  • bot serveris laiku pa laikam mainās;
  • robots ir piekrauts ar lietotājiem.

Otra metode, ko var rakstīt, lai saņemtu lietotāja ziņojumus, ir setWebhook. Tas tiek izmantots vienu reizi, nav nepieciešams pastāvīgi sūtīt jaunus pieprasījumus. Tīmekļa aizķere nosūta datu atjauninājumus uz norādīto URL. Šai metodei nepieciešams SSL sertifikāts. Web aizķere būs noderīga šādos gadījumos:

  • tiek izmantotas tīmekļa programmēšanas valodas;
  • bots nav pārslogots, lietotāju nav pārāk daudz;
  • serveris nemainās, programma ilgu laiku paliek tajā pašā serverī.

Turpmākajos norādījumos mēs izmantosim getUpdates.

Pakalpojums @BotFather Telegram ir paredzēts tērzēšanas robotu izveidei. Caur šo sistēmu tiek iestatīti arī pamata iestatījumi – BotFather palīdzēs izveidot aprakstu, ieliks profila fotoattēlu, pievienos atbalsta rīkus. Bibliotēkas – HTML pieprasījumu kopas Telegram robotiem – ir pieejamas internetā, to ir diezgan daudz. Veidojot piemēra programmu, tika izmantots pyTelegramBotApi.

1. darbība. Valūtas kursa pieprasījumu ieviešana

Vispirms jums jāieraksta kods, kas veic vaicājumus. Mēs izmantosim, rakstot PrivatBank API, zemāk ir saite uz to: https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5. Kodā ir jāizmanto šādas metodes:

  • load_exchange – atrod valūtas kursus un parāda kodētu informāciju;
  • get_exchange – parāda datus par konkrētu valūtu;
  • get_exchanges – parāda valūtu uzskaitījumu atbilstoši paraugam.

Rezultātā kods failā pb.py izskatās šādi:

importēt atkārtoti importēšanas pieprasījumus importēt 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) ): exc in load_exchange(): if ccy_key == exc['ccy']: return exc return False def get_exchanges(ccy_pattern): rezultāts = [] ccy_pattern = re.escape(ccy_pattern) + '.*' exc in load_exchange(): ja re.match(ccy_pattern, exc['ccy'], re.IGNORECASE) nav Nav: result.append(exc) atgriež rezultātu

Programma var sniegt šādu atbildi uz norādītajiem pieprasījumiem:

[ {ccy:"USD", base_ccy:"UAH", pirkt:"25.90000", izpārdošana:"26.25000" }, {ccy:"EUR", base_ccy:"UAH", pirkt:"29.10000", izpārdošana:"29.85000" " }, {ccy:"RUR", base_ccy:"UAH", pirkt:"0.37800", izpārdošana:"0.41800" }, {ccy:"BTC", base_ccy:"USD", pirkt:"11220.0384", izpārdošana: "12401.0950" } ]

2. darbība: izveidojiet telegrammas robotu ar @BotFather

Varat izveidot programmu ziņojumu saņemšanai un atbildēšanai uz tiem, izmantojot pakalpojumu @BotFather. Dodieties uz viņa Telegram lapu un ievadiet komandu /newbot. Tērzēšanā parādīsies norādījumi, saskaņā ar kuriem vispirms ir jāpieraksta robota nosaukums un pēc tam tā adrese. Kad robota konts ir izveidots, ekrānā parādīsies sveiciena ziņojums ar marķieri. Lai veiktu papildu konfigurāciju, izmantojiet šīs komandas:

  • /setdescription – apraksts;
  • /setabouttext – informācija par jauno botu;
  • /setuserpic – profila fotogrāfija;
  • /setinline – iekļautais režīms;
  • /setcommands – komandu apraksts.

Pēdējā konfigurācijas darbībā mēs aprakstām /help un /exchange. Kad visas darbības ir pabeigtas, ir pienācis laiks pāriet uz kodēšanu.

3. darbība: Bota iestatīšana un palaišana

Izveidosim failu config.py. Tajā jānorāda unikālais bota kods un laika josla, kurā programma atradīs informāciju.

TOKEN = '' # aizstāt ar jūsu robota marķieriTIMEZONE = 'Eiropa/Kijeva' TIMEZONE_COMMON_NAME = 'Kijeva'

Tālāk mēs izveidojam citu failu ar iepriekš uzrakstīto pb.py, bibliotēku un citu nepieciešamo komponentu importu. Trūkstošās bibliotēkas tiek instalētas no pakotņu pārvaldības sistēmas (pip).

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

Lai izveidotu robotu, izmantosim pyTelegramBotApi saturu. Mēs nosūtām saņemto marķieri, izmantojot šādu kodu:

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

Parametrs none_stop nodrošina nepārtrauktu pieprasījumu sūtīšanu. Parametra darbību neietekmēs metodes kļūdas.

4. darbība: ierakstiet /start komandu apdarinātāju

Ja visas iepriekšējās darbības ir veiktas pareizi, robots ir sācis darboties. Programma regulāri ģenerē pieprasījumus, jo tā izmanto metodi getUpdates. Pirms rindas ar elementu none_stop mums ir nepieciešams koda fragments, kas apstrādā komandu /start:

@bot.message_handler(commands=['sākt']) def start_command(message): bot.send_message( message.chat.id, 'Sveicināti! Es varu parādīt valūtas kursus.n' + 'Lai uzzinātu valūtas kursus, nospiediet / Exchange.n' + 'Lai saņemtu palīdzību, nospiediet /help.')

RџSЂRё commands=['sākt'] vienāds ar True tiek izsaukta start_command. Ziņas saturs nonāk tur. Tālāk jums jāievieš sūtīšanas funkcija_ziņa saistībā ar konkrētu ziņojumu.

5. darbība. Izveidojiet /help komandu apdarinātāju

Komandu /help var realizēt kā pogu. Noklikšķinot uz tā, lietotājs tiks novirzīts uz izstrādātāja Telegram kontu. Piešķiriet pogai nosaukumu, piemēram, “Jautā izstrādātājam”. Iestatiet parametru reply_markup, kas novirza lietotāju uz saiti, metodei send_message. Kodā ierakstīsim parametru, kas veido tastatūru (InlineKeyboardMarkup). Jums ir nepieciešama tikai viena poga (InlineKeyboardButton).

Pēdējais komandu apstrādātāja kods izskatās šādi:

@bot.message_handler(commands=['help']) def help_command(message): keyboard = telebot.types.InlineKeyboardMarkup() keyboard.add( telebot.types.InlineKeyboardButton( 'Jautāt izstrādātājam', url='валкаа насы профиль' ) ) bot.send_message( message.chat.id, '1) Lai saņemtu pieejamo valūtu sarakstu, nospiediet /exchange.n' + '2) Noklikšķiniet uz valūtas, kas jūs interesē.n' + '3) Jūs saņems ziņojumu ar informāciju par avotu un mērķa valūtām, ' + 'pirkšanas kursi un pārdošanas kursi.n' + '4) Noklikšķiniet uz "Atjaunināt", lai saņemtu aktuālo informāciju par pieprasījumu. ' + 'Bots arī parādīs starpību starp iepriekšējo un pašreizējo valūtas kursu.n' + '5) Bots atbalsta iekļauto. Ierakstiet @ jebkurā tērzēšanā un valūtas pirmajiem burtiem.', reply_markup=keyboard )

Koda darbība Telegram tērzēšanā:

Telegrammas robots Python. Pilnīgs ceļvedis robotprogrammatūras rakstīšanai ar valūtas maiņas kursiem no nulles

6. darbība. /exchange komandu apdarinātāja pievienošana

Šī darbība ir nepieciešama, lai tērzēšanā parādītu pogas ar pieejamo valūtu simboliem. Ekrāna tastatūra ar opcijām palīdzēs izvairīties no kļūdām. PrivatBank sniedz informāciju par rubli, dolāru un eiro. Opcija InlineKeyboardButton darbojas šādi:

  1. Lietotājs noklikšķina uz pogas ar vajadzīgo apzīmējumu.
  2. getUpdates saņem atzvanu (CallbackQuery).
  3. Kļūst zināms, kā rīkoties ar tastatūras nospiešanu – tiek pārraidīta informācija par nospiesto pogu.

/exchange apstrādātāja kods:

@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, 'Noklikšķiniet uz izvēlētās valūtas:', reply_markup=keyboard )

Koda rezultāts telegrammā:

Telegrammas robots Python. Pilnīgs ceļvedis robotprogrammatūras rakstīšanai ar valūtas maiņas kursiem no nulles

7. darbība. Apdarinātāja rakstīšana iebūvētajām tastatūras pogām

PyTelegramBot Api pakotnē ir @bot.callback_query_handler dekoratora funkcija. Šis komponents ir paredzēts, lai pārvērstu atzvanīšanu funkcijā — API izsauks un atkārtoti izveido zvanu. Tas ir uzrakstīts šādi:

@bot.callback_query_handler(func=lambda call: True) def iq_callback(query): data = query.data, ja data.startswith('get-'): get_ex_callback(query)

Uzrakstīsim arī metodi get_ex_callback:

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

Ir vēl viena noderīga metode – answer_callback_query. Tas palīdz noņemt slodzi starp pogas nospiešanu un rezultāta parādīšanu ekrānā. Varat nosūtīt ziņojumu uz send_exchange_query, nosūtot valūtas kodu un ziņojumu. Uzrakstīsim send_exchange_result:

def send_exchange_result(message, ex_code): bot.send_chat_action(message.chat.id, 'rakstīt') ex = pb.get_exchange(ex_code) bot.send_message( message.chat.id, serialize_ex(ex), reply_markup=get_up ), parse_mode='HTML')

Kamēr tērzēšanas robots saņem pieprasījuma rezultātu no bankas API, apmeklētājs redz uzrakstu “rakstot ziņojumu”. Izskatās, ka atbild reāls cilvēks. Lai ekrānā parādītu šādu indikatoru, jums būs jāpievieno ievades statusa rindas. Tālāk izmantosim get_exchange – ar tā palīdzību programma saņems valūtas apzīmējumu (rubļi, eiro vai dolāri). send_message izmanto papildu metodes: serialize_ex konvertē valūtu citā formātā, un get_update_keyboard iestata programmtaustiņus, kas atjaunina informāciju un nosūta valūtas tirgus datus uz citām tērzēšanas sarunām.

Ierakstīsim kodu get_update_keyboard. Jāpiemin divas pogas – t un e apzīmē veidu un maiņu. Pogai Kopīgot ir nepieciešams vienums switch_inline_query, lai lietotājs varētu izvēlēties kādu no vairākām tērzēšanas sarunām. Apmeklētājs varēs izvēlēties, kam nosūtīt aktuālo dolāra, rubļa vai eiro kursu.

def get_update_keyboard(ex): keyboard = telebot.types.InlineKeyboardMarkup() keyboard.row( telebot.types.InlineKeyboardButton( 'Atjaunināt', callback_data=json.dumps({ 't': 'u', 'e': { ' b': ex['pirkt'], 's': ex['izpārdošana'], 'c': ex['ccy'] } }).replace(' ', '') ), telebot.types.InlineKeyboardButton ('Kopīgot', switch_inline_query=ex['ccy']) ) atgriezt tastatūru

Dažreiz jums ir jāredz, cik ļoti valūtas kurss ir mainījies īsā laikā. Pogai Atjaunināt uzrakstīsim divas metodes, lai lietotāji varētu salīdzināt kursus.

Valūtas kursu starpība tiek nodota serializatoram, izmantojot diff parametru.

Norādītās metodes darbojas tikai pēc datu atjaunošanas, tās neietekmēs kursa pirmo attēlojumu.

def serialize_ex(ex_json, diff=Nav): rezultāts = '' + ex_json['base_ccy'] + ' -> ' + ex_json['ccy'] + ':nn' + 'Pirkt: ' + ex_json['pirkt'] if diff: result += ' ' + serialize_exchange_diff(diff['buy_diff']) + 'n' + 'Pārdod: ' + ex_json['izpārdošana'] +' ' + serialize_exchange_diff(diff['sale_diff']) + 'n' else: rezultāts += 'nPārdod: ' + ex_json['sale'] + 'n' atgriež rezultātu def serialize_exchange_diff(diff): rezultāts = '' if diff > 0: rezultāts = '(' + 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: rezultāts = '(' + 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">)" atgriešanas rezultāts

Iedomājieties, ka apmeklētājs vēlējās uzzināt dolāra kursu. Lūk, kas notiek, ja ziņojumā atlasāt USD:

Telegrammas robots Python. Pilnīgs ceļvedis robotprogrammatūras rakstīšanai ar valūtas maiņas kursiem no nulles

8. darbība. Atjaunināšanas pogas apdarinātāja ieviešana

Ierakstīsim kodu apstrādes darbībām ar pogu Atjaunināt un pievienosim tam daļu iq_callback_method. Kad programmas vienumi sākas ar parametru get, jums ir jāieraksta get_ex_callback. Citās situācijās mēs parsējam JSON un cenšamies iegūt atslēgu t.

@bot.callback_query_handler(func=lambda call: 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(query), izņemot ValueError: nokārtot

Ja t ir vienāds ar u, jums būs jāraksta programma edit_message_callback metodei. Soli pa solim sadalīsim šo procesu:

  1. Lejupielādējiet jaunāko informāciju par valūtas tirgus stāvokli (exchange_now = pb.get_exchange(data['c']).
  1. Jaunas ziņas rakstīšana, izmantojot serializētāju ar dif.
  2. Paraksta pievienošana (get_edited_signature).

Ja sākotnējais ziņojums nemainās, izsauciet metodi 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_ + 'n' + get_edited_signature(), ja query.message: bot.edit_message_text( text, query.message.chat.id, query.message.message_id, reply_markup=get_update_keyboard(exchange_now), parse_mode_idline_if_HTML'ssage. : bot.edit_message_text( text, inline_message_id=query.inline_message_id, reply_markup=get_update_keyboard(exchange_now), parse_mode='HTML' )

Ierakstīsim metodi get_ex_from_iq_data, lai parsētu JSON:

def get_ex_from_iq_data(exc_json): return { 'pirkt': exc_json['b'], 'pārdošana': exc_json['s']}

Jums būs nepieciešamas vēl dažas metodes: piemēram, get_exchange_diff, kas nolasa veco un jauno informāciju par valūtu izmaksām un parāda starpību.

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

Pēdējais, get_edited_signature, parāda laiku, kad kurss pēdējo reizi tika atjaunināts.

def get_edited_signature(): return 'Atjaunināts ' + str(datetime.datetime.now(P_TIMEZONE).strftime('%H:%M:%S')) + ' (' + TIMEZONE_COMMON_NAME + ')'

Rezultātā atjauninātais ziņojums no robota ar stabilu valūtas maiņas kursu izskatās šādi:

Telegrammas robots Python. Pilnīgs ceļvedis robotprogrammatūras rakstīšanai ar valūtas maiņas kursiem no nulles

Kad kurss mainās, atšķirības starp vērtībām tiek parādītas ziņojumā noteikto parametru dēļ.

Telegrammas robots Python. Pilnīgs ceļvedis robotprogrammatūras rakstīšanai ar valūtas maiņas kursiem no nulles

9. darbība: iegultā režīma ieviešana

Iebūvētais režīms ir nepieciešams, lai ātri nosūtītu informāciju no programmas uz jebkuru tērzēšanu – tagad jums nav jāpievieno sarunai kā dalībniekam robots. Kad Telegram lietotājs ievada robota nosaukumu ar @ zīmi pirms tā, virs ievades rindas jāparādās konvertēšanas opcijām. Ja noklikšķināsit uz kāda no vienumiem, robots sarunai nosūtīs ziņojumu ar rezultātiem un pogām datu atjaunināšanai un nosūtīšanai. Sūtītāja vārdā būs uzraksts “izmantojot ".

InlineQuery tiek nodots query_text, izmantojot bibliotēku. Kods izmanto funkciju answer_line, lai izgūtu meklēšanas rezultātus kā datu masīvu un elementu inline_query_id. Mēs izmantojam get_exchanges, lai robots pēc pieprasījuma atrastu vairākas valūtas.

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

Mēs nododam datu masīvu get_iq_articles, lai, izmantojot šo metodi, atgrieztu objektus no InlineQueryResultArticle.

def get_iq_articles(exchanges): result = [] for exc apmaiņās: 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='Convert ' + exc['base_ccy'] + ' -> ' + exc['ccy'], thumb_height=1 ) ) atgriezt rezultātu

Tagad, ja tu raksti @ un atstarpi rindā, ekrānā parādīsies meklēšanas rezultāti – opcijas konvertēšanai trīs pieejamās valūtās.

Telegrammas robots Python. Pilnīgs ceļvedis robotprogrammatūras rakstīšanai ar valūtas maiņas kursiem no nulles

Lietotāji var filtrēt rezultātus, ievadot vēlamo valūtu.

Pēc noklikšķināšanas uz vajadzīgās valūtas sarakstā, tērzēšana saņem to pašu ziņojumu, ko saņem robotu lietotāji. Varat arī izmantot pogu Atjaunināt. Tālāk esošajā attēlā ir parādīts atjauninātais ziņojums, kas nosūtīts, izmantojot robotu:

Telegrammas robots Python. Pilnīgs ceļvedis robotprogrammatūras rakstīšanai ar valūtas maiņas kursiem no nulles

Secinājumi

Tagad jūs zināt, kā izveidot telegrammas robotprogrammu. Programmai varat pievienot noderīgus rīkus: pogas rezultāta atjaunināšanai un nosūtīšanai citiem kurjera lietotājiem un iebūvētu režīmu, kas ļauj izmantot bota funkcijas ārpus tērzēšanas ar to. Pamatojoties uz šo instrukciju, varat izveidot jebkuru vienkāršu robotprogrammatūru ar citām funkcijām – ne tikai to, kas rādīs valūtas maiņas kursus. Nebaidieties eksperimentēt ar bibliotēkām, API un kodu, lai izveidotu automatizētu palīgu, kas tērzēs ar klientiem Telegram un stiprinās interesentu saikni ar uzņēmumu.

1 Komentārs

  1. Fantastica Publicación

Atstāj atbildi