Kuidas arendada IRC-bot

Kui olete Internet Relay Chati (IRC) kasutanud, olete tõenäoliselt mingil hetkel kokku puutunud robotiga. Botid on sõltumatud programmid või skriptid, mis ühenduvad võrku samamoodi nagu inimene. Neid saab programmeerida vastama kasutaja käskudele või isegi vestlema. Sellest juhendist leiate, millised on teie võimalused IRC-roti ehitamiseks ja kuidas seda nullist luua.

1
Kaaluge kliendiskripti installimist. Mõnikord soovite lihtsalt lihtsa ülesande tehtud ja ei taha, et see oleks iseseisev programm. Sel juhul saate skripti lisada IRC-kliendile. See on üsna tavaline mIRC-i puhul, millel on tugev skriptimismootor ja suur valik saadaolevaid skripte. See on lihtsaim valik ja väga soovitatav, kui teil pole palju programmeerimiskogemust või üldse mitte. Selle juhendi ülejäänud osas nõuavad juhised järgimiseks mõningaid teadmisi arvutiprogrammeerimisest.

2
Kaaluge oma roboti jaoks juba olemasolevat koodibaasi. On palju avatud lähtekoodiga ja tasuta programme, mis aitavad teil kiiresti oma kohandatud robotit seadistada. Üks selline näide on Eggdrop, vanim IRC-bot, mida endiselt hooldatakse.

3
Kaaluge oma roboti kirjutamist. Kogenud IRC-kasutajatele ja arendajatele, kes juba teavad programmeerimiskeelt, on see suurepärane võimalus. Saate kasutada peaaegu kõiki soovitud keeli, kui sellel on pistikupesa tugi, kuid populaarsete keelte hulka kuuluvad Python, Lua, PHP, C ja Perl. Kui te ei oska ühtki neist, kuid oskate mõnda teist keelt, pole see probleem. Tavaliselt leiate veebist näiteid mis tahes soovitud keeles. Selle artikli jaoks demonstreerime PHP kasutamist. PHP kasutamiseks peab teie arvutisse või serverisse olema installitud PHP-CLI. PHP-d saab alla laadida saidilt php.net.PHP-skripte saab käivitada käsurealt. Lisateabe ja abi saamiseks PHP kasutamisel vaadake seda PHP käsiraamatu lehte.

4
Koguge ühenduse üksikasjad. Edukaks võrguga ühenduse loomiseks peate hankima järgmise teabe.Server: IRC-ga ühenduse loomiseks kasutatud serveri domeeninimi, näiteks chat.freenode.netPort: Enamasti on see 6667, kuid kui te pole kindel, kontrollige oma IRC klienti või võrgu veebisaiti. Hüüdnimi: hüüdnimi, mida teie robot peaks kasutama. Pidage meeles, et mõned erimärgid pole tavaliselt lubatud (@#!~).Ident: identiteedi väli kuvatakse hüüdnime järel, kui keegi sooritab sellise WHOIS-i: hüüdnimi!ident@hostinimiGECOS: sellel väljal on tavaliselt kasutaja pärisnimi või boti üldine kirjeldus, kuid võite sinna panna kõike, mida soovite. Kanal: tavaliselt soovite, et teie robot oleks ühes või mitmes kanalis. Enamikus võrkudes on nende eesliide “#”, kuid see võib olla midagi muud.

5
Initsialiseerige konfiguratsioon oma skriptis. Kõige lihtsam viis seda teha on mõne muutuja nimetamine vastavalt ülaltoodud konfiguratsiooninimedele. Võite need salvestada ka konfiguratsioonifaili ja need välja sõeluda, kuid praegu jääme ainult hädavajalike asjade juurde.

6
Ühendage võrku. Selleks peate avama määratud pordi serverisse pistikupesa. Sellesse osasse peaksite lisama ka mõne veakäsitluse koodi juhuks, kui ühendus mingil põhjusel ebaõnnestub. Sel juhul pakub PHP meile mõned kenad funktsioonid vea tõhusaks käsitlemiseks.

7
Registreerige oma bot. See tähendab, et peate serverisse sisestama oma hüüdnime, identiteedi ja GECOS-i, mitte registreeruma NickServis. Selleks kirjuta lihtsalt serverisse käsud NICK ja USER, millele järgneb carriage return ja reavahetus. On hädavajalik, et teeksite seda täpselt nii, nagu näidatud, sest nii on see määratud IRC-protokolli spetsifikatsioonis RFC1459. Pange tähele, et kaks keskmist parameetrit (antud juhul * ja 8) tuleb määrata, kuid server ignoreerib neid. Neid kahte kasutatakse ainult lingitud serverite vahel, mitte otseselt ühendava kliendi poolt.

8
Jätkake andmete toomist pesast silmuse abil. Kui te tsüklit ei kasuta, katkeks teie skript kohe ja robot oleks põhimõtteliselt kasutu. Ühenduse säilitamiseks peate hankima serverist andmed, kontrollima soovitud voos sisendit ja vastama sellele, kui jah. Siin püüame andmeid socket_read() abil, et haarata meie jaoks saadaolevad andmed. Kui see on olemas, jätkame sellega, mis on ette nähtud. Abiks võib olla ka töötlemata andmete väljastamine konsooli, et saaksite näha, mis toimub roboti vaatenurgast.

9
Kirjutage pingi töötleja. See on tähtis. Kui te ei vasta pingidele õigeaegselt, katkestab server teie ühenduse. Hoolitseme selle eest kõigepealt. Pingid näevad serverist saadetud kujul välja järgmised: PING :rajaniemi.freenode.net. Server ei pea oma nime panema “:” järele, ta võib anda kõike, mida soovib. Peate * kordama* täpselt seda, mida server ütles, välja arvatud PONG-i kasutamine.

10
Liituge oma kanalitega. Olgu, meil on bot, mis loob ühenduse võrguga ja vastab pingitele, kuid muidu ei tee midagi. Et inimesed teie robotit näeksid ja kasutaksid, peab see asuma kanalis (muidu peate sellel privaatsõnumitele vastamiseks käskima). Selleks kontrollime serveri olekukoode 376 või 422. 376 tähendab MOTD (päeva sõnum) on lõppenud. 422 tähendab, et saatmiseks polnud MOTD-d. See MOTD on lihtsalt midagi, mille server saadab ühenduse loomisel, kuid see on hea indikaator, millal saame kanalitega liituma hakata. Peate väljastama käsu JOIN. Sellele käsule võib järgneda üks või mitu kanalit, mis on eraldatud komaga. Pange tähele, et serveri saadetavad andmed on mugavalt eraldatud tühikutega. Nii saame jagada andmed ja viidata neile massiiviindeksi abil.

11
Kanali sõnumitele vastamine. Nüüd lõbusast osast. Teie robot on kanaliga liitunud, nii et nüüd saate seda kasutada selleks, mida soovisite. Loome näitekäskluse nimega @moo. Pange tähele sõnumite alguse nihet (see kehtib nii kanalite kui ka privaatsõnumite kohta). See on alati samas kohas. Saate käsitseda käske, mille sees on tühikud, liites tükeldatud andmed uuesti kokku ($d). See ei kuulu selle artikli ulatusse. Kui sihtmärk on kanal (nt #botters-test), siis vastate sellele. Kui see on privaatsõnum, on see bitt teie roboti hüüdnimi! Seejärel peate vastama saatja, mitte enda hüüdnimega (muidu räägiksite iseendaga ja see on lihtsalt rumal).

12
Laiendage oma robotit. Ülaltoodud teostuse abil saate lisada palju uusi funktsioone. IRC-võrgule saab anda palju muid käske, näiteks operatsioonide haldamine, löömine ja keelamine, teema seadistamine ja paljude muude funktsioonide hulgas.