[Python] Barnaamijka bot loogu talagalay IRC

Maanta waxaan ku barayaa sida loo barto barnaamijka a robot waayo, IRC. Marka hore, kuwa aan aqoon, bot waa barnaamij isku xira kanaalka IRC oo la falgala, kaas oo noo ogolaanaya, tusaale ahaan, inaan dhexdhexaad ka dhigno kanaalka in aan isku xirnahay oo markaa iska ilaali spam, ama inay aqoonsato amarro taxane ah oo ay fuliso nambarka u dhigma.
In kasta oo ay horey ujireen bots, hadana waxaan si daacad ah uga mid ahay kuwa jecel inay sameeyaan barnaamijyadooda u gaarka ah si ay wax u bartaan iyo qanacsanaanta weyn ee ay na siiso ka dib markay arkeen inay shaqeyneyso ^^

Intaas marka la dhaho, aan u gudubno casharka.

Si aan barnaamij u galino waxaan u baahan doonaa a Tifatiraha qoraalka cad cualquiera (nano, gedit, medit, iwm) iyo turjubaanka Python (2.6 ama 2.7 ayaa lagama maarmaan noqon doona, kuma shaqeeyo Python 3.x).

Marka hore waxaan soo waaridaa modules loo baahan yahay, kiiskan waxaan kaliya u baahanahay laba:

[koodh] #! / usr / bin / env Python
# - * - sireed: utf-8 - * -

soo gelinta koronto
soo dejiso xarig
[/ code]

Hadda waxaan u gudbeynaa dhigay bot:

[code] HOST=»irc.desdelinux.net»
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Home»
aqristaha = = »»
[/ code]

Waxaan sharxi doonaa isbeddel kasta:

  • HALKA: URL-ka adeegaha oo aan ku xirmi doonno
  • XIGASHO: Dekedda serverka. By ahaan waa 6667.
  • NICK, IDENT iyo REALNAME: Waxay u dhigmaan naanaysta bot, aqoonsigeeda iyo magaca dhabta ah.
  • CHAN: Kanaalka bot uu gali doono
  • aqrise: Isbeddelkaan ku jira xogta uu soo diray serverka waa la keydin doonaa.

Marka botkeena loo qaabeeyo waxaan kusii soconaa xiriirka

[koodh] s = socket.socket ()
s.concon ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("USER% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("JOIN:% s \ r \ n"% CHAN)
[/ code]

Sadarka koowaad ma laha qarsoodi badan, kan labaadna wuxuu abuuraa isku xirka serverka iyo saddexda ugu dambeysa waxay u diraan xogta bot-ka server-ka si ay ugu sii socdaan gelitaanka.

Markii aan isku xirno waxaan abuuri doonnaa a Wareeg aan xad lahayn taas oo aan gali doonno helitaanka iyo dirista xogta / adeegaha:

[koodh] halka 1:
akhrisbuffer = akhrisbuffer + s.recv (1024)
temp = string.split (aqristaha, "\ n")
Readbuffer = temp.pop ()
khadka tooska ah:
xariiq = string.rstrip (khadka)
sadar = line.split (CHAN + ':')

haddii khadka [0]. raadi ("PING")! = -1:
pingid = sadar [0] .laabid () [1] s.send ("PONG% s \ r \ n"% pingid)
[/ code]

Dhammaan khadadka kor ku qoran, kaliya waxaan ka faaloon doonaa kuwa muhiimka ah.
cunt sadar = line.split (CHAN + ':') waxa aan qabano ayaa ah kala qaybinta waxa adeeguhu noo soo diro goorta aan wax ka helno kanaalka.
Tusaale ahaan sadarka soo socdaa wuxuu tilmaamayaa in qof wax ku qoray kanaalka:

:son_link!sonlink@127.0.0.1 PRIVMSG #Home :Hola ^^

Midka hore waa naanaysta isticmaalaha iyo isku xidhka xogta (oo lagu kala saaray!), Amarka (xaaladdan waxay tilmaamaysaa inuu qoray), kanaalka iyo ugu dambayntii, xiidanka kadib, farriinta la diray. Ma sharixi doono amarro badan oo dheeri ah maadaama taasi aysan ku dhicin casharradan.

Khadadka kale ee muhiimka ah waa kuwa waa ka dib haddii. Server-ka marwalba wuxuu u diraa amarka PING si loo hubiyo in isticmaaleyaashu wali ku xiran yihiin. Xaaladdan oo kale, bot wuxuu u dirayaa amarka PONG oo leh aqoonsi uu PING u diray si uu ugu muujiyo server-ka inuu weli ku xiran yahay.

Tan waxaan horey u haysannay saldhigga bot. Hadda waxaan sii wadi doonaa inaan sharxo sida looga dhigo jawaabta bot-ka iyadoo loo eegayo waxa aan dooneyno amarrada qaarkood, ha ahaadeen kuwa IRC lafteeda ama kuwa isticmaala.

Kajawaabida amarrada IRC:

PING iyo PRIVMSG ayaa tusaale u ah amarrada IRC. Waxaa jira amarro badan, laakiin sidaan horay u sheegay, waa wax aanan si faahfaahsan uga hadli doonin.
Tusaale ahaan, waxaan ka dhigi karnaa bot-ka hello hello isticmaaleyaasha isku xira:

[koodh] haddii khadka [0]. raadi ('JOIN')! = -1:
magac = sadar [0] .laabid ('!') [0] .laabid (':') [1] haddii magac! = NICK iyo name.find (HOST) == -1:
s.send ("PRIVMSG% s: Soo dhawow @% s ^^ \ n"% (CHAN, magaca))
[/ code]

Marka hore waxaan hubinaynaa in adeeguhu diro amarka JOIN taas oo muujinaysa in qof ku xiran yahay serverka. Kadibna waxaan soosaaraynaa nickka, waxaan hubinaynaa in naanadu aysan ahayn urrurka IRC (haddii aysan ahayn sida ugu dhakhsaha badan ee aan u wadno bot-ka waxay salaami doontaa url-ka) ugu danbayna waxaan udiraynaa dhambaalka salaan.

Amarada bot:

Hadda sideen u sameeyaa bot-kayga amarradayda ka jawaab? Aan si fiican u eegno tusaalaha:

[koodh] haddii khadka [1] == '$ version':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ code]

Tusaalahan haddii qof wax qoro $ nooc bot ayaa tusi doonta farriinta tilmaamaysa magaceeda, nooca iyo qoraaga. Lambarka buuxa ee tusaaluhu waa tan:

[koodh] godka soo dejinta
soo dejiso xarig

HOST = »localhost»
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Home»
aqristaha = = »»
s = socket.socket ()
s.concon ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("USER% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("JOIN:% s \ r \ n"% CHAN)

halka 1:

akhrisbuffer = akhrisbuffer + s.recv (1024)
temp = string.split (aqristaha, "\ n")
Readbuffer = temp.pop ()
khadka tooska ah:
khadka daabacan
xariiq = string.rstrip (khadka)
sadar = line.split (CHAN + ':')

haddii khadka [0]. raadi ("PING")! = -1:
pingid = sadar [0] .laabid () [1] s.send ("PONG% s \ r \ n"% pingid)

haddii qadka [0]. raadi ('JOIN')! = -1:
magac = sadar [0] .laabid ('!') [0] .laabid (':') [1] haddii magac! = NICK iyo name.find (HOST) == -1:
s.send ("PRIVMSG% s: Soo dhawow @% s ^^ \ n"% (CHAN, magaca))

haddii layn (xariiq) <1:
haddii khadka [1] == '$ version':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ code]

Waxaan rajeynayaa inaad ka heshay casharkaan, dabcan, waxaan kuu daayay isku xirka koodhka botkeyga si aad u aragto koodhkiisa oo buuxa waxaadna si fiican u arki kartaa sida ay u shaqeyso (in kastoo aan ka saaray amarrada qaar si shaqsiyeed).

CalicoBot


12 faallooyin, ka tag taada

Ka tag faalladaada

cinwaanka email aan la daabacin doonaa. Beeraha loo baahan yahay waxaa lagu calaamadeeyay la *

*

*

  1. Masuul ka ah xogta: Miguel Ángel Gatón
  2. Ujeedada xogta: Xakamaynta SPAM, maaraynta faallooyinka.
  3. Sharci: Oggolaanshahaaga
  4. Isgaarsiinta xogta: Xogta looma gudbin doono dhinacyada saddexaad marka laga reebo waajibaadka sharciga ah.
  5. Kaydinta xogta: Macluumaadka ay martigelisay Shabakadaha Occentus (EU)
  6. Xuquuqda: Waqti kasta oo aad xadidi karto, soo ceshan karto oo tirtiri karto macluumaadkaaga.

  1.   auroszx dijo

    Heh, ma seegi karin Dufcadii weyne ee aad ku fuushay IRC article Maqaal aad u xiiso badan.

  2.   Cesar dijo

    Sharaxaad aad u fudud oo cad.
    Maxaa dhacaya haddii, koodhka Python uu ka maqan yahay dhammaan galka.

  3.   rafa dijo

    Maqaal aad u fiican iyo sida ay u fududahay in lagu xiro IRC si loogu diyaariyo barnaamij bot:)…

    Waxay i xasuusineysaa waqtiyadaas markii aan dareemeynay sida barnaamijyo u qoraya qoraallo loogu talagalay mIRC sheekaysiga MSN ama MSNGroups.

  4.   tuka 22 dijo

    Xiiso leh waan hayaa 😀

  5.   Biisho Vargas J. (@abdihakin_abdi) dijo

    aad u fiican!

  6.   elynx dijo

    Aad u faa'iido badan, mahadsanid Son_Link!

    Waad ku mahadsan tahay!

  7.   dbillyx dijo

    Farxad…

    inaad raacdo khadadkaaga oo aad tijaabiso waxa kaliya ee shaqeeya waa
    soo gelinta koronto
    soo dejiso xarig

    HOST = »localhost»
    PORT = 6667
    NICK = »CalicoBot»
    IDENT = »CalicoBot»
    REALNAME = »CalicoBot»
    CHAN = »# Home»
    aqristaha = = »»
    s = socket.socket ()
    s.concon ((HOST, PORT))
    s.send ("NICK% srn"% NICK)
    s.send ("USER% s% s bla:% srn"% (IDENT, HOST, REALNAME))
    s.send ("JOIN:% srn"% CHAN)

    badalaada kanaalka iyo Nick hada hoosta ayaa igu tuuraya qalad syntax

    Waxaan weydiiyay dad kale oo aan is naqaano waxayna ii sheegaan in taasi aysan u muuqan Python

    Ma aqaano waxa aan qaldayo ama sababta aan wax walba u koobiyo oo aan ugu dhajiyo Python oo aan u siiyo iyada oo ay ku xirmaan kanaalka laakiin 250 ilbidhiqsi kadib channelka ayaa ka saaraya maxaa yeelay wax jawaab ah kama helin pong ...

  8.   sifeyn dijo

    Koodhka dhammeystiran aniga ima shaqeynayo, sadarka ugu dambeeya ayaa ah waxa fashilmay mana heli karo qaladka. Haddii aan tirtiro qaybtaas, waxay isku xirmaysaa oo si fiican u shaqaysaa. Waxaa lagu tijaabiyay Python 2.7.3 on Windows 7.

    PS: Xaaladdayda waxaan ku xiraa server leh lambarka sirta oo waxaan ku daraa xariiqyadan:
    PASS = »Passdelbot»
    s.send ("PASS% s \ r \ n"% PASS)

  9.   Xayeysiis dijo

    Hi Son Link, aad baad ugu mahadsantahay maqaalka, waa mid aad u xiiso badan, kaliya kama jawaabi karo amarrada la soo diray. Barnaamijku ma galayo kan ugu dambeeya haddii aanan garan karin sababta: "if len (line)> 1:"
    Jawaabtaada waan sugayaa.
    Gracias