O kanałach

Rodzaje kanałów

Kanał to zbiór jednego lub więcej użytkowników, którzy otrzymują wiadomości adresowane do tego kanału. Kanał jest opisany przez jego nazwę, właściwości i aktualnych członków.

Kanał powstaje, gdy ktoś na niego wchodzi (komendą JOIN), a znika, jeśli z kanału wyjdzie ostatnia osoba (komendą PART -- wyjście z kanału lub komendą QUIT -- wyjście z IRC). Wyjątkową sytuacją jest split, kiedy to serwery pamiętają kanały przez pewien czas (mechanizm Channel Delay).

Nazwa kanału zaczyna się od jednego z 4 znaków: "&", "#", "!", "+". Może mieć maksymalnie 50 znaków; nie może zawierać spacji (' '), znaku CTRL-G (^G lub ASCII 7) ani przecinka (',').

Początkowy znak (tzw. prefiks kanału) definiuje niektóre właściwości kanału.

Typ kanałuLokalnyTrybyUwagi
&taktakkanał lokalny (istnieje tylko na jednym serwerze)
#nietakkanał globalny (istnieje na wszystkich serwerach)
+nieniekanał globalny bez trybów
!nietakkanał globalny z ochroną przeciw tzw. nethack

Nazwa kanału może zawierać maskę określającą serwery, na których kanał ma istnieć. Piszemy ją po ":", np. #pomoc:*.pl oznacza, że kanał ten istnieje tylko na serwerach pasujących do maski *.pl (czyli tylko na polskich).

Tryby kanałów

Tryby kanału określają zachowanie kanału i możliwości osób przebywających na kanale. Różne typy kanałów mogą mieć różne tryby, dlatego dla każdego trybu jest opisane, na jakich kanałach można go używać.

trybnazwaparametrkanałyopis
aanonymous-& !kanał anonimowy -- jego uczestnicy nie widzą nicków ani adresów innych uczestników; tego trybu nie można zdjąć z !kanałów
bbanmaska& # !ban -- użytkownicy pasujący do maski nie mogą wejść na ten kanał, a jeśli na nim są, to nie mogą nic mówić
eexemptmaska& # !na użytkowników pasujących do maski nie działa ban
iinvite-only-& # !na ten kanał można wejść tylko po zaproszeniu od operatora (komendą INVITE)
IInvitemaska& # !użytkownicy pasujący do maski nie potrzebują zaproszenia na kanał invite-only
kkeyklucz& # !do wejścia na taki kanał trzeba podać klucz przy komendzie JOIN
llimitliczba& # !na kanał nie można wejść, jeśli liczba jego użytkowników jest większa lub równa od limitu
mmoderated-& # !na kanał może pisać tylko operator lub osoba posiadająca voice (+v)
nno outside msgs-& # !na kanał mogą wysyłać teksty tylko ludzie przebywający na tym kanale
oopnick& # !nick jest operatorem kanału i ma prawo zmieniać tryby kanału
Ocreatornick!nick utworzył kanał i ma prawo ustawić tryby +a oraz +r (nie da się przekazać tego trybu, a także znika on po wyjściu z kanału)
pprivate-& # !kanał jest prywatny i nie pokazuje się w spisie kanałów (komenda LIST) ani w liście kanałów danego użytkownika (komenda WHOIS); komendy WHO kanał i NAMES kanał pokazują tych użytkowników kanału, którzy nie mają flagi użytkownika +i (invisible)
qquiet-&kanał jest uciszony -- nikt z użytkowników nie może nic na nim mówić (tylko serwer może ustawić ten tryb)
rreop-!jeśli kanał utraci wszystkich operatorów, to po pewnym czasie jeden z serwerów odda opa jednemu (losowo) lub wszystkim (jeśli mały kanał) użytkownikom kanału
Rreop listmaska& # !jeśli kanał utraci wszystkich operatorów, to po pewnym czasie jeden z serwerów odda opa jednemu użytkownikowi (lokalnemu, bez restrykcji) pasującemu do maski[1]
ssecret-& # !kanał jest tajny i nie pokazuje się ani w spisie kanałów (komenda LIST), ani w liście kanałów danego użytkownika (komenda WHOIS); komendy WHO kanał i NAMES kanał nic nie pokazują, niezależnie od flag użytkowników na tym kanale
ttopic opers only-& # !tylko operatorzy kanału mają prawo zmiany topica (komenda TOPIC)
vvoicenick& # !nick ma prawo odzywać się na kanale, jeśli ten jest moderowany (+m)

[1] W wersji 2.11.0 ircd klienci jeszcze nie mogą ustawiać +R. Ograniczenie to zostało zdjęte w następnej wersji.

Kolizje kanałów

Jako że kanały istnieją na wszystkich serwerach, w przypadku splitu (rozłączenia się dwóch serwerów IRC) powstaje sytuacja, że na różnych serwerach stan kanału przedstawia się inaczej. Po zakończeniu splitu, gdy serwery się łączą, takie dwie części kanału się łączą, co oznacza także sumowanie trybów kanałów i ich użytkowników. Taka sytuacja nazywa się kolizją kanału.

Czasami, jeśli serwery się rozłączyły w taki sposób, że po jednej stronie nie było żadnego użytkownika na kanale, kanał taki tam znikał, co powodowało, że jeśli ktoś tam w tym czasie wszedł na ten kanał, to dostawał opa. Po połączeniu się serwerów nagle się okazywało, że lista operatorów kanału się powiększyła.

Problem ten jest możliwy do rozwiązania na kilka sposobów. W sieci IRCnet przyjął się tzw. mechanizm Channel Delay (CD) -- przy zniknięciu kanału w wyniku splitu kanał ten jest zablokowany przez 30 minut, uniemożliwiając tym samym wejście i zdobycie opa.

Inny sposób został zaprezentowany przy implementacji !kanałów, gdzie tak naprawdę tworzy się unikalną nazwę kanału tak, że nie jest możliwe utworzenie takiej samej w trakcie splitu.

Problem kolizji na +kanałach nie jest istotny, a &kanały z definicji kolizji mieć nie mogą.

!Kanały

!Kanały są próbą rozwiązania problemu przejmowania kanałów na splicie (częsta metoda tzw. takeoveru). Sposób polega na tym, że jeśli dochodzi do splitu, a ktoś próbuje wejść na kanał na serwerze, na którym kanał w danej chwili nie istnieje, wówczas do podanej przez niego nazwy kanału dodawany jest losowy prefiks. Przykładowo: /JOIN !kanał spowoduje wejście na !<prefiks>kanal. Kanały takie tworzy się poprzez /JOIN !!kanał.

Na !kanale można ustawić nowy tryb +r (reop), co spowoduje, że jeśli żaden z użytkowników kanału nie będzie miał opa, a na kanale będzie nie więcej niż 5 osób, to po jakimś czasie serwer da opa wszystkim na kanale. Jeśli natomiast będzie więcej użytkowników, to opa dostanie ktoś losowo wybrany spośród nich.

Aby dowiedzieć się, kto stworzył !kanał (channel creator), nalezy wpisać /MODE !nazwa_kanału O. Komunikat No such nick/channel oznacza, że twórca kanału już z niego wyszedł (a nawet jeśli wrócił, nie będzie już rozpoznawany jako twórca kanału).

Krótka nazwa (czyli !kanal) działa wyłącznie z JOIN (pod warunkiem, że istnieje tylko jeden taki kanał) oraz LIST. Każda inna komenda wymaga podania pełnej nazwy kanału -- razem z prefiksem (np. !ABCDEkanal).

Więcej o !kanałach (po angielsku) przeczytasz na stronie http://www.irc.org/tech_docs/ircnet/!channels.html.