[Python] Cláraigh bot don IRC

Táim chun tú a mhúineadh inniu conas clár a bot do IRC. Ar an gcéad dul síos, dóibh siúd nach bhfuil a fhios acu, is clár é bot a nascann le cainéal IRC agus a idirghníomhaíonn leis, a ligeann dúinn, mar shampla, an cainéal a mhodhnú gan go bhfuil baint againn agus mar sin seachain turscar, nó go n-aithníonn sé sraith orduithe agus go ndéanann sé an cód comhfhreagrach a fhorghníomhú.
Cé go bhfuil bots réidh cheana féin, tá mé go hionraic ar dhuine díobh siúd ar mhaith leo a gcláir féin a dhéanamh le foghlaim agus an sásamh mór a thugann sé dúinn tar éis a fheiceáil go n-oibríonn sé ^^

É sin ráite, déanaimis bogadh ar aghaidh chuig an rang teagaisc.

Chun an bot a chlárú beidh gá againn le eagarthóir gnáth-théacs cualquiera (nano, gedit, medit, srl) agus ateangaire python (Beidh 2.6 nó 2.7 riachtanach, ní oibríonn sé le python 3.x.).

Ar dtús iompórtálaimid an modúil riachtanacha, sa chás seo ní bheidh de dhíth orainn ach dhá:

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

soicéad iompórtála
sreang iompórtála
[/ cód]

Anois leanaimid ar aghaidh go curtha ar bun an bot:

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

Míneoidh mé gach athróg:

  • HOST: URL an fhreastalaí a nascfaimid leis
  • PORT: Port an fhreastalaí. De réir réamhshocraithe is é 6667 é.
  • NICK, IDENT agus REALNAME: Freagraíonn siad do leasainm an bot, a shainaithint agus an fíor-ainm.
  • CHAN: An cainéal a rachaidh an bot isteach
  • inléitheoir: San athróg seo sábhálfar na sonraí a sheol an freastalaí.

Chomh luath agus a bheidh ár bot cumraithe leanaimid ar aghaidh chuig an nasc

[cód] s = socket.socket ()
s.connect ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("ÚSÁIDEOIR% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("JOIN:% s \ r \ n"% CHAN)
[/ cód]

Níl mórán rúndiamhair sa chéad líne, cruthaíonn an dara ceann an nasc freastalaí agus cuireann an triúr deireanach sonraí an bot chuig an bhfreastalaí chun dul ar aghaidh leis an logáil isteach.

Nuair a bheidh muid ceangailte cruthóimid a Lúb gan teorainn ina rachaimid sonraí a fháil agus a sheoladh ó / chuig an bhfreastalaí:

[cód] agus 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
don líne i dteocht:
líne = string.rstrip (líne)
líne = line.split (CHAN + ':')

más líne [0] .find ("PING")! = -1:
pingid = líne [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
[/ cód]

As na línte uile a scríobhadh thuas, ní dhéanfaidh mé trácht ach ar na cinn thábhachtacha.
le líne = line.split (CHAN + ':') is é an rud a dhéanaimid ná an méid a chuireann an freastalaí chugainn a roinnt faighimis rud éigin ón gcainéal.
Mar shampla léiríonn an líne seo a leanas gur scríobh duine éigin rud éigin ar an gcainéal:

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

Is é an chéad cheann leasainm agus sonraí ceangail an úsáideora (scartha le!), An t-ordú (sa chás seo léiríonn sé gur scríobh sé), an cainéal agus ar deireadh, tar éis an colon, an teachtaireacht a seoladh. Ní mhíneoidh mé i bhfad níos mó orduithe ós rud é nach dtagann sé sin laistigh den rang teagaisc seo.

Is iad na línte tábhachtacha eile na cinn atá tar éis an más. Is minic a sheolann an freastalaí an t-ordú PING chun a sheiceáil an bhfuil an t-úsáideoir fós ceangailte. Sa chás sin, seolann an bot an t-ordú PONG le haitheantas a sheol PING lena chur in iúl don fhreastalaí go bhfuil sé fós ceangailte.

Leis seo tá bun an bot againn cheana féin. Anois rachaidh mé ar aghaidh ag míniú conas a chur ar an bot freagairt de réir a bhfuil uainn d’orduithe áirithe, cibé acu ó IRC féin nó ó úsáideoirí iad.

Ag freagairt orduithe IRC:

Is samplaí iad PING agus PRIVMSG d’orduithe IRC. Tá go leor orduithe ann, ach mar a dúirt mé cheana, is rud é nach rachaidh mé isteach go mion faoi.
Mar shampla, is féidir linn a rá leis an bot Dia duit a rá le húsáideoirí a nascann:

[cód] más líne [0] .find ('JOIN')! = -1:
ainm = líne [0] .split ('!') [0] .split (':') [1] más ainm! = NICK agus ainm.find (HOST) == -1:
s.send ("PRIVMSG% s: Fáilte @% s ^^ \ n"% (CHAN, ainm))
[/ cód]

Ar dtús déanaimid seiceáil an seolann an freastalaí an t-ordú Join a thugann le fios go bhfuil duine éigin ceangailte leis an bhfreastalaí. Ansin bainimid an leasainm, seiceálaimid nach é an leasainm an url IRC (mura mbeidh sé chomh luath agus a rithfimid an bot cuirfidh sé beannacht ar an url) agus faoi dheireadh cuirimid an teachtaireacht beannachta.

Orduithe bot:

Anois, conas a dhéanfaidh mé mo bot freagra a thabhairt ar mo chuid orduithe féin? Is fearr breathnú ar shampla:

[cód] más líne [1] == '$ leagan':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Nasc Son \ n»% CHAN)
[/ cód]

Sa sampla seo má scríobhann duine $ leagan taispeánfaidh an bot an teachtaireacht ag léiriú a ainm, a leagan agus a údair. Is é seo cód iomlán an tsampla:

soicéad iompórtála [cód]
sreang iompórtála

HOST = »localhost»
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Baile»
readbuffer = »»
s = socket.socket ()
s.connect ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("ÚSÁIDEOIR% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("JOIN:% s \ r \ n"% CHAN)

agus 1:

readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
don líne i dteocht:
líne chlóite
líne = string.rstrip (líne)
líne = line.split (CHAN + ':')

más líne [0] .find ("PING")! = -1:
pingid = líne [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)

más líne [0] .find ('JOIN')! = -1:
ainm = líne [0] .split ('!') [0] .split (':') [1] más ainm! = NICK agus ainm.find (HOST) == -1:
s.send ("PRIVMSG% s: Fáilte @% s ^^ \ n"% (CHAN, ainm))

más len (líne) <1:
más líne [1] == '$ leagan':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Nasc Son \ n»% CHAN)
[/ cód]

Tá súil agam gur thaitin an rang teagaisc seo leat, agus ar ndóigh, fágaim an nasc le cód mo bot duit ionas go bhfeicfidh tú a chód ina iomláine agus go bhfeicfidh tú níos fearr conas a oibríonn sé (cé gur bhain mé roinnt orduithe le haghaidh úsáide pearsanta).

CalicoBot


Cloíonn ábhar an ailt lenár bprionsabail eitic eagarthóireachta. Chun earráid a thuairisciú cliceáil anseo.

12 trácht, fág mise

Fág do thrácht

Ní thabharfar do sheoladh r-phoist a fhoilsiú.

*

*

  1. Freagrach as na sonraí: Miguel Ángel Gatón
  2. Cuspóir na sonraí: SPAM a rialú, bainistíocht trácht.
  3. Legitimation: Do thoiliú
  4. Na sonraí a chur in iúl: Ní chuirfear na sonraí in iúl do thríú páirtithe ach amháin trí oibleagáid dhlíthiúil.
  5. Stóráil sonraí: Bunachar sonraí arna óstáil ag Occentus Networks (EU)
  6. Cearta: Tráth ar bith is féidir leat do chuid faisnéise a theorannú, a aisghabháil agus a scriosadh.

  1.   auroszx a dúirt

    Heh, ní fhéadfainn Bot an bullshit a thiománaíonn tú ar IRC a chailliúint article Alt an-spéisiúil.

  2.   scoirfidh a dúirt

    Míniú an-simplí agus soiléir.
    Cad a tharlaíonn má, tá an eangú in easnamh ar an gcód python.

  3.   Rafa a dúirt

    Alt den scoth agus chomh furasta agus atá sé ceangal le IRC chun bot a ríomhchlárú :)…

    Cuireann sé na hamanna sin i gcuimhne dom nuair a mhothaíomar mar ríomhchláraitheoirí ag scríobh scripteanna do mIRC i gcomhráite ar MSN nó MSNGroups.

  4.   trucail22 a dúirt

    Suimiúil coimeádaim é 😀

  5.   Genesis Vargas J. (@elprincipiodeto) a dúirt

    den scoth!

  6.   Eilín a dúirt

    An-úsáideach, go raibh maith agat Son_Link!

    Beannachtaí!

  7.   dbillyx a dúirt

    Cheers…

    ag leanúint do línte agus ag tástáil an t-aon rud a oibríonn
    soicéad iompórtála
    sreang iompórtála

    HOST = »localhost»
    PORT = 6667
    NICK = »CalicoBot»
    IDENT = »CalicoBot»
    REALNAME = »CalicoBot»
    CHAN = »# Baile»
    readbuffer = »»
    s = socket.socket ()
    s.connect ((HOST, PORT))
    s.send ("NICK% srn"% NICK)
    s.send ("ÚSÁIDEOIR% s% s bla:% srn"% (IDENT, HOST, REALNAME))
    s.send ("JOIN:% srn"% CHAN)

    ag athrú an chainéil agus an leasainm anois caitheann an thíos comhréir earráide dom

    Chuir mé ceist ar lucht aitheantais eile agus deir siad liom nach bhfuil cuma python air sin

    Níl a fhios agam cad atá á dhéanamh agam mícheart nó toisc go ndéanaim gach rud a chóipeáil agus a ghreamú isteach i python agus é a thabhairt isteach agus nascann sé leis an gcainéal ach tar éis 250 soicind baintear an cainéal as toisc nach bhfuarthas freagra ó pong ...

  8.   pionta a dúirt

    Ní oibríonn an cód iomlán domsa, is í an mhír dheiridh an rud a mhainníonn agus ní féidir liom an earráid a aimsiú. Má scriosaim an chuid sin, nascann sé agus oibríonn sé go foirfe. Tástáladh le Python 2.7.3 ar Windows 7.

    PS: I mo chás ceangailim le freastalaí le pasfhocal agus cuirim na línte seo leis:
    PASS = »Passdelbot»
    s.send ("PASS% s \ r \ n"% PASS)

  9.   Deilf a dúirt

    Hi Son Link, go raibh maith agat as an alt, tá sé an-suimiúil, ní féidir liom freagra a thabhairt ar na horduithe a seoladh. Ní théann an clár isteach sa chlár deireanach más rud é agus ní féidir liom a fháil amach cén fáth: "más len (líne)> 1:"
    Fanfaidh mé do fhreagra.
    Go raibh maith agat

bool (fíor)