Portál AbcLinuxu, 3. května 2025 17:34

IRC a skriptování irssi

29. 3. 2004 | Jindřich Skupa
Články - IRC a skriptování irssi  

Seznámení se základními IRC příkazy. Ukázky skriptů zjednodušujících práci s klientem irssi.

Lehký úvod do IRC

Většina čtenářů bude určitě IRC znát, minimálně alespoň vědět, že existuje a asi tak k čemu to je. Nuže i pro ty neznalé řeknu, že IRC je zkratka Internet Relay Chat a jde o chatovací systém. Připojit se k IRC serveru na port 6667 můžete buď pomocí IRC klienta, např. xchat nebo irssi, o kterém bude druhá část článku. Pokud nechcete instalovat klienta nebo jste náhodou někde, kde to není možné, tak některé servery nabízí webové rozhraní. IRC je možné provozovat i pomocí telnetu, ovšem tento způsob je poměrně nepřehledný.

Komunikace spočívá v připojení se k serveru, zvolení přezdívky (/nick <prezdivka>) a ve výběru kanálu. To můžeme učinit příkazem /list. Některé servery to však mají z důvodu velkého počtu kanálů zakázané. To ale nevadí, na internetu je mnoho seznamů IRC kanálů a serverů (případně sítí - několik IRC serverů se spojí v jednu síť a přeposílají si mezi sebou komunikaci).

Po vstupu do kanálu příkazem /join #<nazev kanalu> můžete v klidu komunikovat s ostatními. Kanál je možné opustit příkazem /part #<nazev kanalu> [zprava pri odchodu] nebo /quit #<nazev kanalu> [zprava]. Nemusíte ale komunikovat jen v jednom kanálu, ale klidně ve více najednou nebo jen s jedním uživatelem. Pokud si chcete s někým promluvit soukromě, napíšete /query <nick uzivatele>.

Praxe

Každý kanál má tzv. operátory a jinak privilegované uživatele, kteří mají práva např. měnit téma (/topic <nový topic>) kanálu nebo vyhazovat (/kick <nick>) či rovnou zakazovat (/ban <nick> [cas]) nebo privilegovat jiné uživatele (/op <nick>).

Tím se dostáváme k tomu, kterak se zbavit otravných či jinak nepříjemných spoluchatujících. To lze buď jejich vyhozením z kanálu (mohou se potom vrátit), nebo rovnou zákazem, tím je kanál pro uživatele zablokován. Pokud vám píše "otravák" přes query nebo pomocí msg (/msg <nick> <zprava> nebo /query <nick>), je možné se ho zbavit příkazem /ignore <nick> a máme pokoj. Opět můžeme daný nick "vnímat" příkazem /unignore <nick>.

Pokud nejsme u počítače, ale jsme připojeni k IRC (např. screen), tak to můžeme dát vědět pomocí /away <komentář> nebo pomocí /me <zpráva>, které se zobrazuje, že něco říkáme o sobě z pohledu jiné osoby, např. "jindra prave odchazi".

Irssi

Irssi je poměrně oblíbený terminálový IRC klient. Každý kanál/uživatel, ve kterém jste přítomni, má vlastní okno (okno 1 slouží pro zprávy od irssi nebo od IRC serveru). Mezi okny přepínáte příkazem /window <cislo okna> nebo klávesami alt+ <cislo okna>. Irssi podporuje doplňování příkazů a jejich přehled (/help), kde - pokud umíte anglicky - většinu příkazů pochopíte.

Skripty

Větsina IRC klientů podporuje skriptování pro ulehčení komunikace. Otázkou je, do jaké míry je to potřebné a k čemu je to dobré. Pomocí scriptu si můžete napsat např. nějak formátovaný logger komunikace, automatický odpovídač, posílání zpráv na e-mail/mobil, pokud jste nedostižní a další. Skripty se většinou píší v jazyce perl, stačí použít balíček Irssi.

Velké množství už hotových skriptů lze stáhnout z http://irssi.org/scripts. Stažené nebo vlastní skripty nahrajte do adresáře $HOME/.irssi/scripts nebo do $HOME/.irssi/scripts/autorun, pokud je budete chtít spouštět automaticky. Poté je načteme pomocí /script load <nazev skriptu>, odstranit jej můžeme příkazem /script unload <nazev skriptu>. Pokud vás pouze zajímá, jaké skripty máte spuštěné, napište /script list.

Jak tedy irssi skriptovat?

Irssi obsahuje signály (události) nebo commandy (příkazy - /<command>). Události irrsi je možné vytvářet nebo odstraňovat. Začneme signály, které budeme asi používat častěji než příkazy (záleži na tom, co budeme psát). Nasledující řádky ukazují, jak přiřadit/odstranit funkci události nebo příkazu irssi.

Signály :

Příkazy :

Myslím si, že tohle pro tvorbu základních skriptů stačí. Není cílem tohoto článku opsat /usr/share/doc/irssi/. Pokud ovšem máte zájem dozvědět se víc, tak se to dozvíte v /usr/share/doc/irssi/perl.txt. Seznam signálů naleznete ve stejném adresáři v souboru signals.txt.

Signály se třídí do několika kategorií - podle toho na co reagují. Například následující reagují na zprávy.

message public veřejná zpráva
message own_public veřejná zpráva psaná námi
message private soukromá komunikace
message own_private soukromá komunikace psaná námi
message part zpráva při odchodu uživatele z kanálu (oznámení odchodu)
message join zpráva při vstupu do kanálu (oznámení vstupu)
message nick změna nicku
message kick informace o vyhození uživatele z kanálu

Tyto události se nám hodí například k automatizaci návratu do kanálu po vyhození.

Většina psavců skriptů dává na začátek kódu hlavičku, ve které říkají, o jakou verzi scriptu se jedná, kdo ho napsal, homepage skriptu atd.

#!/usr/bin/perl

use vars ($VERSION %IRSSI);
$VERSION = "0.0.1";
%IRSSI = (
authors => 'jindra',
contact => 'skupaj@wo.cz',
name => 'rejoin',
description => 'return to channel after kick',
url => 'none',
license => 'no licence',
changed => '$VERSION',
);
my $mynick=jindra;

use Irssi;

sub rejoin
{
($server, $channel, $nick, $kicker, $adress, $reason)=@_;
#přijmeme informace o vyhození pomocí parametrů fce rejoin

if ($nick = $mynick) {Irssi::Server::channels_join($channel, automatic);}
#pokud jsme byli vyhozeni my, provede rejoin
}

Irssi:signal_add("message kick", \&rejoin);
#pokud bude někdo z kanálu vyhozen, zavoláme fci rejoin.

print CLIENTCRAP '%B>>%n '.$IRSSI{name}.' '.$VERSION.' (c) '.$IRSSI{authors}.' loaded';

To byl malý příklad psaní funkce pro signál. Další příklad bude ukazovat tvorbu nového příkazu pro irssi.

#!/usr/bin/perl

use vars ($VERSION %IRSSI);
$VERSION = "0.0.1";
%IRSSI = (
authors => 'jindra',
contact => 'skupaj@wo.cz',
name => 'topics',
description => 'loging topics',
url => 'none',
license => 'no licence',
changed => '$VERSION',
);
my $mynick=jindra;

use Irssi;

sub chtopic
{
($server, $channel, $topic, $nick)=@_;
#přijme informace o změně topicu

$topics[scalar @topics]="$channel : $topic by $nick";
#přidá topic do pole
}

sub lstopic
{
print CLIENTCRAP @topics;
}

Irssi:signal_add("message topic", \&chtopic);
#při změně topicu zavoláme fci pro přidání topicu do seznamu
Irssi::command_bind("topics", \&lstopics);
#připojí fci lstopic k příkazu topics

print CLIENTCRAP '%B>>%n '.$IRSSI{name}.' '.$VERSION.' (c) '.$IRSSI{authors}.' loaded';

Doufám, že vám tyto jednoduché ukázky pomohou sžít se s IRC i klientem irssi.

Diskuse k tomuto článku

29.3.2004 14:31 maleprase | skóre: 28
Rozbalit Rozbalit vše message topic - priklad 2.
>> Irssi:signal_add("message topic", \&chtopic);
>> #pokud bude někdo z kanálu vyhozen zavoláme fci chtopic

nemelo by tam byt spis:
#pokud nekdo zmeni topic zavolame fci chtopic
?
29.3.2004 16:08 social | skóre: 20 | Plzeň
Rozbalit Rozbalit vše message topic - priklad 2.
omlouvam, se vzhledem k tomu ze scripty byly dost podobne tak jsem to jen zkopiroval a upravil
29.3.2004 18:27 vaclavsteiner | skóre: 4 | Praha
Rozbalit Rozbalit vše RE
Tenhle clanek musel psat nekdo asi kolem 23:56 :o))) Ale jinak super a irc zkusim....:o)
29.3.2004 20:43 Mortal | skóre: 26 | blog: mortals_log
Rozbalit Rozbalit vše RE
jo IRC je good....bacha da se na tom vypestovat zavislost :-)
V pekle jsou samé diskety a ďábel je velká disketová mechanika
29.3.2004 21:33 Michal Karas | skóre: 45 | blog: /dev/random
Rozbalit Rozbalit vše dalsi moznost prepinani oken
Ja bych jen doplnil, ze okna je mozne prepinat jeste pomoci CTRL + P a CTRL + N. Tento zpusob je rychlejsi nez pomoci prikazu /window a zaroven mi funguje na rozdil od zkratky ALT + 'cislo_okna', kterou uz pouzivam v ramci window manageru.

Jinak to vypada na fajn clanek. Diky.
5.4.2004 18:02 Pavel Trůbl
Rozbalit Rozbalit vše Re: dalsi moznost prepinani oken
Okna se daji prepinat take pomoc Alt+sipka doprava nebo doleva. V nejhorsim pripade take ESC a nasledne cislo okna.
11.1.2005 10:38 Pepo
Rozbalit Rozbalit vše Kompletny zoznam?
Ja by som rad vedel kde najdem kompletny zoznam prikazov pre skripty do irssi lebo napriklad nech som sa akokolvek snazil a googlil a neviemco este nikde som nenasiel napriklad vysvetlenie funkcie Irssi::statusbar_item_register() a jak sa vlastne celkovo statusbary skriptuju.

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.