[Питхон] Програмирајте бота за ИРЦ

Данас ћу вас научити како да програмирате а њушка пар ИРЦ. Пре свега, за оне који не знају, бот је програм који се повезује на ИРЦ канал и комуницира с њим, омогућавајући нам, на пример, модерирање канала без да смо повезани и на тај начин избегавајте нежељену пошту или да препознаје низ налога и извршава одговарајући код.
Иако већ постоје ботови, искрено сам један од оних који воле да израђују сопствене програме за учење и велико задовољство које нам пружа након што види да то ради ^^

Уз то, пређимо на туториал.

За програмирање бота требат ће нам уредник обичног текста цуалкуиера (нано, гедит, медит, итд.) и питхон интерпретер (Биће потребно 2.6 или 2.7, не ради са питхон 3.к).

Прво увозимо потребни модули, у овом случају ће нам требати само два:

[код] #! / уср / бин / енв питхон
# - * - кодирање: утф-8 - * -

импорт соцкет
стринг за увоз
[/ код]

Сада прелазимо на поставити бот:

[code] HOST=»irc.desdelinux.net»
ЛУКА = 6667
НИЦК = »ЦалицоБот»
ИДЕНТ = »ЦалицоБот»
РЕАЛНАМЕ = »ЦалицоБот»
ЦХАН = »# Почетна»
реадбуффер = »»
[/ код]

Објаснићу сваку променљиву:

  • ДОМАЋИН: УРЛ сервера на који ћемо се повезати
  • ЛУКА: Сервер порт. Подразумевано је 6667.
  • НИК, ИДЕНТИТЕТ И ПРАВО ИМЕ: Они одговарају надимку бота, његовој идентификацији и правом имену.
  • ЦХАН: Канал у који ће бот ући
  • реадбуффер: У овој променљивој подаци који су послати од стране сервера биће сачувани.

Једном када је наш бот конфигурисан, прелазимо на веза

[код] с = соцкет.соцкет ()
с.цоннецт ((ХОСТ, ПОРТ))
с.сенд ("НИЦК% с \ р \ н"% НИЦК)
с.сенд ("КОРИСНИК% с% с бла:% с \ р \ н"% (ИДЕНТ, ХОСТ, ПРАВО ИМЕ))
с.сенд ("ПРИДРУЖИТЕ СЕ:% с \ р \ н"% ЦХАН)
[/ код]

Први ред нема пуно мистерије, други ствара веза са сервером а последња три шаљу податке бота серверу да би наставили са пријавом.

Једном када се повежемо, креираћемо Бесконачна петља у коју ћемо ићи пријем и слање података са / на сервер:

[код] док 1:
реадбуффер = реадбуффер + с.рецв (1024)
темп = стринг.сплит (реадбуффер, "\ н")
реадбуффер = темп.поп ()
за линију у темп:
линија = стринг.рстрип (линија)
линија = лине.сплит (ЦХАН + ':')

ако је линија [0] .финд ("ПИНГ")! = -1:
пингид = линија [0] .сплит () [1] с.сенд ("ПОНГ% с \ р \ н"% пингид)
[/ код]

Од свих горе написаних редова, коментарисаћу само важне.
са лине = лине.сплит (ЦХАН + ':') оно што радимо је да поделимо оно што нам сервер шаље када узмимо нешто са канала.
На пример, следећи ред означава да је неко нешто написао на каналу:

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

Прва је корисников надимак и подаци о вези (одвојени знаком!), Команда (у овом случају означава да је написао), канал и на крају, после двотачке, порука послата. Нећу објашњавати још много наредби, јер то не спада у овај водич.

Остале важне линије су оне су после иф. Сервер свако толико шаље команду ПИНГ да провери да ли је корисник још увек повезан. У том случају бот шаље наредбу ПОНГ са ИД-ом који је ПИНГ послао да би назначио серверу да је и даље повезан.

Са овим већ имамо основу бота. Сада ћу наставити да објашњавам како да натерам бота да реагује у складу са оним што желимо на одређене команде, било да су од самог ИРЦ-а или од корисника.

Одговор на ИРЦ наредбе:

ПИНГ и ПРИВМСГ су примери ИРЦ наредби. Постоји много наредби, али као што сам већ рекао, то је нешто о чему нећу улазити у детаље.
На пример, можемо натерати бота да поздрави кориснике који се повезују:

[код] ако је линија [0] .финд ('ПРИДРУЖИ СЕ')! = -1:
наме = лине [0] .сплит ('!') [0] .сплит (':') [1] иф наме! = НИЦК анд наме.финд (ХОСТ) == -1:
с.сенд ("ПРИВМСГ% с: Добродошли @% с ^^ \ н"% (ЦХАН, име))
[/ код]

Прво проверавамо да ли сервер шаље команду ЈОИН што указује на то да се неко повезао са сервером. Затим издвајамо надимак, проверавамо да надимак није ИРЦ УРЛ (ако не чим извршимо бота, поздравиће урл) и на крају шаљемо поздравну поруку.

Команде бота:

Сад како да направим свог бота одговорите на моје сопствене команде? Погледајмо боље пример:

[код] ако је линија [1] == '$ верзија':
с.сенд («ПРИВМСГ% с: ЦалицоБот 0.1.2 (ц) 2012 Сон Линк \ н»% ЦХАН)
[/ код]

У овом примеру ако неко пише $ верзија бот ће приказати поруку која наводи његово име, верзију и аутора. Комплетни код примера је следећи:

[код] импорт соцкет
стринг за увоз

ХОСТ = »лоцалхост»
ЛУКА = 6667
НИЦК = »ЦалицоБот»
ИДЕНТ = »ЦалицоБот»
РЕАЛНАМЕ = »ЦалицоБот»
ЦХАН = »# Почетна»
реадбуффер = »»
с = соцкет.соцкет ()
с.цоннецт ((ХОСТ, ПОРТ))
с.сенд ("НИЦК% с \ р \ н"% НИЦК)
с.сенд ("КОРИСНИК% с% с бла:% с \ р \ н"% (ИДЕНТ, ХОСТ, ПРАВО ИМЕ))
с.сенд ("ПРИДРУЖИТЕ СЕ:% с \ р \ н"% ЦХАН)

док 1:

реадбуффер = реадбуффер + с.рецв (1024)
темп = стринг.сплит (реадбуффер, "\ н")
реадбуффер = темп.поп ()
за линију у темп:
линија за штампу
линија = стринг.рстрип (линија)
линија = лине.сплит (ЦХАН + ':')

ако је линија [0] .финд ("ПИНГ")! = -1:
пингид = линија [0] .сплит () [1] с.сенд ("ПОНГ% с \ р \ н"% пингид)

ако је линија [0] .финд ('ЈОИН')! = -1:
наме = лине [0] .сплит ('!') [0] .сплит (':') [1] иф наме! = НИЦК анд наме.финд (ХОСТ) == -1:
с.сенд ("ПРИВМСГ% с: Добродошли @% с ^^ \ н"% (ЦХАН, име))

ако је дужина (линија) <1:
иф лине [1] == '$ верзија':
с.сенд («ПРИВМСГ% с: ЦалицоБот 0.1.2 (ц) 2012 Сон Линк \ н»% ЦХАН)
[/ код]

Надам се да вам се свидео овај водич, и наравно, остављам вам везу до кода мог бота како бисте могли да видите његов код у целости и како бисте могли боље да видите како то функционише (иако сам уклонио неке команде за личну употребу).

ЦалицоБот


Оставите свој коментар

Ваша емаил адреса неће бити објављена. Обавезна поља су означена са *

*

*

  1. За податке одговоран: Мигуел Ангел Гатон
  2. Сврха података: Контрола нежељене поште, управљање коментарима.
  3. Легитимација: Ваш пристанак
  4. Комуникација података: Подаци се неће преносити трећим лицима, осим по законској обавези.
  5. Похрана података: База података коју хостује Оццентус Нетворкс (ЕУ)
  6. Права: У било ком тренутку можете ограничити, опоравити и избрисати своје податке.

  1.   АуросЗк дијо

    Хех, нисам могао да пропустим Бота срања којим се возиш на ИРЦ-у 😛 Врло занимљив чланак.

  2.   Престати дијо

    Врло једноставно и јасно објашњење.
    Шта ако, питхон коду недостају сва удубљења.

  3.   Рафа дијо

    Одличан чланак и како је лако повезати се са ИРЦ-ом за програмирање бота:) ...

    Подсећа ме на она времена када смо се осећали као програмери када смо писали скрипте за мИРЦ у ћаскању на МСН или МСНГроупс.

  4.   труко22 дијо

    Занимљиво чувам је 😀

  5.   Генесис Варгас Ј. (@елпринципиодето) дијо

    одлично!

  6.   Елинк дијо

    Врло корисно, хвала Сон_Линк!

    Поздрав!

  7.   дбиллик дијо

    Живели…

    пратећи ваше линије и тестирајући једино што функционише је
    импорт соцкет
    стринг за увоз

    ХОСТ = »лоцалхост»
    ЛУКА = 6667
    НИЦК = »ЦалицоБот»
    ИДЕНТ = »ЦалицоБот»
    РЕАЛНАМЕ = »ЦалицоБот»
    ЦХАН = »# Почетна»
    реадбуффер = »»
    с = соцкет.соцкет ()
    с.цоннецт ((ХОСТ, ПОРТ))
    с.сенд ("НИЦК% срн"% НИЦК)
    с.сенд ("КОРИСНИК% с% с бла:% срн"% (ИДЕНТ, ХОСТ, ПРАВО ИМЕ))
    с.сенд ("ПРИДРУЖИТЕ СЕ:% срн"% ЦХАН)

    промена канала и надимак сада доле ми доноси синтаксу грешке

    Питао сам друге познанике и они ми кажу да то не личи на питон

    Не знам у чему грешим или зашто све копирам и залепим у питхон и дам да уђе и повеже се са каналом, али након 250 секунди канал га уклања јер није било одговора од понг-а ...

  8.   пинфри дијо

    Комплетни код ми не одговара, последњи одломак је оно што не успева и не могу да пронађем грешку. Ако избришем тај део, он се савршено повезује и функционише. Тестирано са Питхон 2.7.3 на Виндовс 7.

    ПС: У мом случају се повежем на сервер помоћу лозинке и додам ове редове:
    ПАСС = »Пассделбот»
    с.сенд ("ПАСС% с \ р \ н"% ПАСС)

  9.   Делфин дијо

    Здраво, Сон Линк, хвала вам пуно на чланку, веома је занимљив, једноставно не могу да одговорим на послате команде. Програм не улази у последњу верзију иф и не могу да схватим зашто: "иф лен (лине)> 1:"
    Чекам ваш одговор.
    хвала