[Python] Prògram bot airson IRC

An-diugh tha mi a ’dol a theagasg dhut mar a nì thu prògram a bot gu IRC. An toiseach, dhaibhsan nach eil eòlach air, is e prògram a th ’ann am bot a tha a’ ceangal ri seanal IRC agus ag eadar-obrachadh leis, a ’leigeil leinn, mar eisimpleir, an sianal a mhodaladh às aonais gu bheil sinn ceangailte agus mar sin seachain spama, no gu bheil e ag aithneachadh sreath de òrdughan agus a ’cur an gnìomh a’ chòd fhreagarrach.
Ged a tha botaichean deiseil mu thràth, tha mi gu h-onarach mar aon den fheadhainn a tha dèidheil air na prògraman aca fhèin a dhèanamh airson ionnsachadh agus an sàsachadh mòr a bheir e dhuinn às deidh dhuinn faicinn gu bheil e ag obair ^^

Le sin air a ràdh, gluaisidh sinn air adhart chun oideachadh.

Gus am bot a phrògramachadh feumaidh sinn a deasaiche teacsa sìmplidh cualquiera (nano, gedit, medit, msaa) agus an eadar-theangair python (Bidh feum air 2.6 no 2.7, chan eil e ag obair le python 3.x.).

An toiseach bidh sinn a ’toirt a-steach an modalan riatanach, anns a ’chùis seo cha bhith feum againn air ach dà:

[còd] #! / usr / bin / env python
# - * - còdadh: utf-8 - * -

socaid in-mhalairt
sreang ion-phortadh
[/ còd]

A-nis thèid sinn air adhart gu stèidheachadh am bot:

[còd] HOST = »irc.fromlinux.net»
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Dachaigh»
readbuffer = »»
[/ còd]

Mìnichidh mi gach caochlaideach:

  • HOST: URL an fhrithealaiche ris am bi sinn a ’ceangal
  • PORT: Port an fhrithealaiche. Gu gnàthach is e 6667 a th ’ann.
  • NICK, IDENT agus REALNAME: Tha iad a ’freagairt ri far-ainm a’ bot, a chomharrachadh agus an fhìor ainm.
  • CHAN: An sianal a thèid am bot a-steach
  • leughadair: Anns an caochlaideach seo thèid an dàta a chuir an frithealaiche a shàbhaladh.

Cho luath ‘s a thèid am bot againn a rèiteachadh thèid sinn air adhart gu an ceangal

[code] s = socket.socket ()
s.connect ((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)
[/ còd]

Chan eil mòran dìomhaireachd aig a ’chiad loidhne, tha an dàrna fear a’ cruthachadh an ceangal ris an fhrithealaiche agus bidh na trì mu dheireadh a ’cur dàta a’ bot chun t-seirbheisiche gus a dhol air adhart leis an logadh a-steach.

Aon uair 's gu bheil sinn ceangailte cruthaichidh sinn a Lùb neo-chrìochnach anns an tèid sinn a ’faighinn agus a’ cur dàta bho / chun t-seirbheisiche:

[còd] fhad 'sa tha 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
airson loidhne ann an temp:
loidhne = string.rstrip (loidhne)
loidhne = line.split (CHAN + ':')

ma tha loidhne [0] .find ("PING")! = -1:
pingid = loidhne [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
[/ còd]

De na loidhnichean gu h-àrd, cha toir mi beachd ach air an fheadhainn chudromach.
Con loidhne = line.split (CHAN + ':') is e na bhios sinn a ’dèanamh a bhith a’ roinn na tha an frithealaiche a ’cur thugainn cuin gheibh sinn rudeigin bhon t-sianal.
Mar eisimpleir tha an loidhne a leanas a ’nochdadh gun do sgrìobh cuideigin rudeigin air an t-sianal:

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

Is e a ’chiad fhear far-ainm an neach-cleachdaidh agus dàta ceangail (air a sgaradh le!), An àithne (sa chùis seo tha e a’ nochdadh gun do sgrìobh e), an sianal agus mu dheireadh, às deidh a ’choloin, chuir an teachdaireachd. Cha mhìnich mi mòran a bharrachd òrdughan bho nach eil sin a ’tighinn a-steach don oideachadh seo.

Is e na loidhnichean cudromach eile an fheadhainn tha iad an deidh an if. Bidh an frithealaiche cho tric a ’cur an àithne PING gus faighinn a-mach a bheil an neach-cleachdaidh fhathast ceangailte. Anns a ’chùis sin, bidh am bot a’ cur an àithne PONG le ID a chuir PING a chuir an cèill don t-seirbheisiche gu bheil e fhathast ceangailte.

Le seo tha bunait a ’bot againn mu thràth. A-nis thèid mi air adhart gus mìneachadh mar a bheir thu air am bot freagairt mar a tha sinn airson òrdughan sònraichte, ge bith an ann bho IRC fhèin no bho luchd-cleachdaidh.

A ’freagairt òrdughan IRC:

Tha PING agus PRIVMSG nan eisimpleirean de òrdughan IRC. Tha mòran àitheantan ann, ach mar a thuirt mi roimhe, tha e na rudeigin nach tèid mi a-steach gu mionaideach mu dheidhinn.
Mar eisimpleir, is urrainn dhuinn toirt air a ’bhot hello a ràdh ri luchd-cleachdaidh a tha a’ ceangal:

[còd] ma tha loidhne [0] .find ('JOIN')! = -1:
ainm = loidhne [0] .split ('!') [0] .split (':') [1] ma tha ainm! = NICK agus ainm.find (HOST) == -1:
s.send ("PRIVMSG% s: Fàilte @% s ^^ \ n"% (CHAN, ainm))
[/ còd]

An toiseach nì sinn sgrùdadh a bheil an frithealaiche a ’cur an àithne Co-aoinn a tha a ’nochdadh gu bheil cuideigin ceangailte ris an fhrithealaiche. An uairsin bidh sinn a ’toirt a-mach am far-ainm, bidh sinn a’ sgrùdadh nach e am nic an url IRC (mura h-eil e cho luath ‘s a ruitheas sinn am bot cuiridh e fàilte air an url) agus mu dheireadh cuiridh sinn an teachdaireachd fàilte.

Òrdughan bot:

A-nis ciamar a nì mi bot freagairt do na h-òrdughan agam fhèin? Bheir sinn sùil nas fheàrr air eisimpleir:

[còd] ma tha loidhne [1] == '$ dreach':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Ceangal Son \ n»% CHAN)
[/ còd]

San eisimpleir seo ma sgrìobhas cuideigin $ dreach seallaidh am bot an teachdaireachd a ’nochdadh ainm, dreach agus ùghdar. Is e còd iomlan an eisimpleir seo:

socaid in-mhalairt [còd]
sreang ion-phortadh

HOST = »localhost»
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Dachaigh»
readbuffer = »»
s = socket.socket ()
s.connect ((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)

fhad 'sa tha 1:

readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
airson loidhne ann an temp:
loidhne clò-bhualaidh
loidhne = string.rstrip (loidhne)
loidhne = line.split (CHAN + ':')

ma tha loidhne [0] .find ("PING")! = -1:
pingid = loidhne [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)

ma tha loidhne [0] .find ('JOIN')! = -1:
ainm = loidhne [0] .split ('!') [0] .split (':') [1] ma tha ainm! = NICK agus ainm.find (HOST) == -1:
s.send ("PRIVMSG% s: Fàilte @% s ^^ \ n"% (CHAN, ainm))

ma len (loidhne) <1:
ma loidhne [1] == '$ dreach':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Ceangal Son \ n»% CHAN)
[/ còd]

Tha mi an dòchas gun còrd an oideachadh seo riut, agus gu dearbh, fàgaidh mi an ceangal gu còd mo bot gus am faic thu a chòd gu h-iomlan agus gum faic thu nas fheàrr mar a tha e ag obair (ged a thug mi air falbh cuid de òrdughan airson cleachdadh pearsanta).

CalicoBot


Tha susbaint an artaigil a ’cumail ri na prionnsapalan againn de moraltachd deasachaidh. Gus aithris a dhèanamh air mearachd cliog an seo.

12 bheachd, fàg do chuid fhèin

Fàg do bheachd

Seòladh-d cha tèid fhoillseachadh. Feum air achaidhean air an comharrachadh le *

*

*

  1. Uallach airson an dàta: Miguel Ángel Gatón
  2. Adhbhar an dàta: Smachd air SPAM, riaghladh bheachdan.
  3. Dìleab: Do chead
  4. Conaltradh an dàta: Cha tèid an dàta a thoirt do threas phàrtaidhean ach a-mhàin fo dhleastanas laghail.
  5. Stòradh dàta: Stòr-dàta air a chumail le Occentus Networks (EU)
  6. Còraichean: Aig àm sam bith faodaidh tu am fiosrachadh agad a chuingealachadh, fhaighinn air ais agus a dhubhadh às.

  1.   auoszx thuirt

    Heh, cha b ’urrainn dhomh a bhith ag ionndrainn Bot an bullshit a mharcaicheas tu air IRC article Artaigil glè inntinneach.

  2.   Cesar thuirt

    Mìneachadh gu math sìmplidh agus soilleir.
    Dè ma tha, tha an còd python ag ionndrainn a h-uile indentation.

  3.   rafa thuirt

    Artaigil sgoinneil agus cho furasta ‘s a tha e ceangal a dhèanamh ri IRC gus bot a phrògramadh :)…

    Tha e a ’cur nam chuimhne na h-amannan sin nuair a bha sinn a’ faireachdainn mar luchd-prògramaidh a ’sgrìobhadh sgriobtaichean airson mIRC ann an cabadaich air MSN no MSNGroups.

  4.   truc22 thuirt

    Ùidh tha mi ga chumail 😀

  5.   Genesis Vargas J. (@elprincipiodeto) thuirt

    sàr mhath!

  6.   Eilidh thuirt

    Gu math feumail, taing Son_Link!

    Tapadh leibh!

  7.   dbillyx thuirt

    Slàinte…

    a ’leantainn do loidhnichean agus a’ dèanamh deuchainn air an aon rud a tha ag obair
    socaid in-mhalairt
    sreang ion-phortadh

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

    ag atharrachadh an t-seanail agus am far-ainm a-nis tha an gu h-ìosal a ’tilgeil mearachd mearachd dhomh

    Dh ’iarr mi air luchd-eòlais eile agus tha iad ag innse dhomh nach eil sin a’ coimhead coltach ri python

    Chan eil fios agam dè a tha mi a ’dèanamh ceàrr no carson a bhios mi a’ dèanamh leth-bhreac de gach nì agus ga phasgadh ann am python agus ga thoirt a-steach agus bidh e a ’ceangal ris an t-sianal ach às deidh 250 diog tha an sianal ga thoirt air falbh oir cha robh freagairt ann bho pong ...

  8.   pinfraidh thuirt

    Chan eil an còd iomlan ag obair dhòmhsa, is e am paragraf mu dheireadh a tha a ’fàilligeadh agus chan urrainn dhomh a’ mhearachd a lorg. Ma sguabas mi às a ’phàirt sin, bidh e a’ ceangal agus ag obair gu foirfe. Deuchainn le Python 2.7.3 air Windows 7.

    PS: Anns a ’chùis agam tha mi a’ ceangal ri frithealaiche le facal-faire agus cuir na loidhnichean sin:
    PASS = »Passdelbot»
    s.send ("PASS% s \ r \ n"% PASS)

  9.   DoLpHiN thuirt

    Hi Son Link, mòran taing airson an artaigil, tha e glè inntinneach, chan urrainn dhomh dìreach freagairt a thoirt dha na h-òrdughan a chaidh a chuir. Cha bhith am prògram a ’dol a-steach don fhear mu dheireadh ma tha agus chan urrainn dhomh faighinn a-mach carson:" if len (line)> 1: "
    Fuirichidh mi do fhreagairt.
    Gracias