Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

levensta/IRC-Server

Repository files navigation

IRC-server

V dalekom 1998 godu, v seti DALnet, na odnom populiarnom togda russkoiazychnom kanale, na vopros novichka <>, odin chelovek otvetil imenno tak: <>

IRC (Internet Relay Chat) - ustarevshii protokol prikladnogo urovnia dlia obmena soobshcheniiami v rezhime real'nogo vremeni. Razrabotan v 1988 godu i prednaznachen dlia gruppovogo obshcheniia, takzhe pozvoliaet obshchat'sia cherez lichnye soobshcheniia i obmenivat'sia failami. Nesmotria na ustarelost', na osnove IRC v dal'neishem razrabotano mnozhestvo messendzherov, takie kak: ICQ, Skype, Discord, Telegram, Slack, etc...

Proekt predstavliaet soboi IRC-server, napisannyi na osnove standarta rfc1459.

Nachalo

Ustanovka:

git clone https://github.com/levensta/IRC-Server.git
cd IRC-Server/
make

Zapusk servera:

./ircserv 6667 secretpassword

Zapusk klienta:

  • nc localhost 6667
  • Graficheskii klient Pidgin (Linux)
  • Graficheskii klient Adium (MacOS)

Pri neobkhodimosti mozhno meniat' konfig servera IRConf.json


K serveru prilagaetsia bot, kotoryi, ispol'zuia api.intra.42.fr, vozvrashchaet mestopolozhenie cheloveka s otpravlennym nikneimom.
Zapusk bota:

./bot/bot IRCatBot.conf.json

Primer komandy dlia bota:

PRIVMSG wherebot :levensta
// :wherebot!where_is_bot@127.0.0.1 PRIVMSG lev :"Location: Russian Federation, Kazan, Spartakovskaya, 2b2 -> et-e1"

Dokumentatsiia rfc1459 (red.)

PRIMEChANIE: Cerver ne podderzhivaet kommunikatsiiu server-server. Nizhe predstavlena sokrashchennaia dokumentatsiia standarta rfc1459.

Soderzhanie:

  1. Soobshcheniia
  2. Registratsiia soedineniia
    • PASS
    • NICK
    • USER
    • OPER
    • QUIT
  3. Pol'zovateli
    • PRIVMSG
    • AWAY
    • NOTICE
    • WHO
    • WHOIS
    • WHOWAS
  4. Kanaly
    • Operator kanala
    • MODE
    • TOPIC
    • JOIN
    • INVITE
    • KICK
    • PART
    • NAMES
    • LIST
  5. Prochee
    • IRC-operatory i konfig
    • WALLOPS
    • PING / PONG
    • ISON
    • USERHOST
    • VERSION
    • INFO
    • ADMIN
    • TIME
  6. Chislovye otvety
    • Oshibki
    • Otvety na komandy
    • Zarezervirovannye chisla
  7. Ssylki na poleznye materialy

Soobshcheniia

Kazhdoe IRC-soobshchenie mozhet soderzhat' do trekh chastei, razdelennykh odnim (ili bolee) simvolom probela:

  • Prefiks (optsional'no)
  • Komanda
  • Parametry komandy (do 15).

Prefiks ispol'zuetsia serverami dlia oboznacheniia istochnika poiavleniia soobshcheniia. Oboznachaetsia odnim simvolom :, stoiashchim vnachale, kotoryi dolzhen byt' pervym simvolom v soobshchenii. Mezhdu prefiksom i : ne dolzhno byt' nikakikh probelov.

Komanda dolzhna soderzhat' pravil'nuiu IRC-komandu ili trekhznachnoe chislo, predstavlennoe v ASCII-tekste. Maksimal'naia dlina stroki dlia komand i parametrov - 510 simvolov. Perenos stroki oznachaet konets komandy. Na kazhdoe uspeshnoe vypolnenie komandy klientu otpravliaetsia chislovoi otvet. Esli v soobshchenii nepravil'no ukazana komanda i/ili parametry, na etape parsinga server mozhet vydat' klientu soobshchenie ob oshibke.

Dlia obespecheniia kontrolia ot fluda, rekomenduetsia proveriat' chastotu soobshchenii. Naprimer, ne prinimat' soobshcheniia bolee, chem raz v 2 sekundy i esli etot limit prevyshaetsia, to uvelichivat' zaderzhku dlia klienta na 2 sekundy za kazhdoe soobshchenie.

Registratsiia soedineniia

Obiazatel'nye usloviia dlia registratsii pol'zovatelia:

  • PASS-soobshchenie
  • NICK-soobshchenie
  • USER-soobshchenie

PASS-soobshchenie ne dolzhno byt' vvedeno klientom v posledniuiu ochered'. Esli registratsiia proshla uspeshna, klientu otpravliaetsia MOTD (message of the day) s sootvetstvuiushchimi chislovymi otvetami:

375 RPL_MOTDSTART ":- Message of the day - "
372 RPL_MOTD ":- "
376 RPL_ENDOFMOTD ":End of /MOTD command"

PASS

Parametry:

Komanda PASS ispol'zuetsia dlia ustanovki 'parol'nogo soedineniia', v kachestve parolia vystupaet vtoroi argument, peredannyi pri zapuske servera. Parol' mozhet i dolzhen byt' ustanovlen pered liuboi popytkoi registratsii soedineniia. V tekushchii moment, eto trebovaniia k klientam otpravliat' komandu PASS pered otpravkoi kombinatsii NICK/USER.

Chislovye otvety:

ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED

Primer:

PASS secretpassword

NICK

Parametry: [ ]

Ofitsial'naia dokumentatsiia glasit, chto esli server poluchit NICK, kotoryi uzhe sushchestvuet, to proizoidet konflikt i komandoi KILL udalit etot nikneim iz bazy dannykh servera. Na dele zhe klient ne smozhet podkliuchit'sia k serveru, poka vvedennyi im nik zaniat pol'zovatelem, kotoryi nakhoditsia v seti. Esli soobshchenie NICK stanet prichinoi izmeneniia nikneima, to original'nyi (staryi) nikneim udalitsia.

Chislovye otvety:

ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME
ERR_NICKNAMEINUSE ERR_NICKCOLLISION

Primer:

NICK Wiz // Vstuplenie novogo nikneima "Wiz".
:WiZ NICK Kilroy // WiZ izmeniaet svoi nikneim na Kilroy.

USER

Parametry:

Komanda USER ispol'zuetsia v nachale soedineniia dlia ukazaniia imeni pol'zovatelia, nazvaniia khosta, nazvaniia servera i real'nogo imeni novogo pol'zovatelia.

Parametry ne proveriaiutsia IRC-serverom, kogda oni ispol'zuiutsia klientom, no mogut ispol'zovat'sia pri kommunikatsii server-server. Dolzhno byt' ob'iavleno, chto parametr dolzhen byt' poslednim, potomu chto on mozhet soderzhat' probely i pered nim dolzhen byt' prefiks :, delaiushchim raspoznavanie luchshim.

Chislovye otvety:

RR_NEEDMOREPARAMS ERR_ALREADYREGISTRED

Primer:

USER guest tolmoon tolsun :Ronnie Reagan
// Pol'zovatel' zaregistriroval sebia pod imenem "guest" i ego real'noe imia "Ronnie Reagan"

OPER

Parametry:

Komanda OPER ispol'zuetsia avtorizatsii za IRC-operatora (ne putat' s operatorom kanala). Parametry i ispol'zuiutsia dlia identifikatsii pol'zovatelia, zaprashivaiushchego prava IRC-operatora.

Pri kommunikatsii server-server, esli pol'zovatel' poslal komandu OPER s korrektnym parolem dlia tekushchego pol'zovatelia, server informiruet set' o novom operatore, ispol'zuia MODE +o dlia nikneima klienta.

Chislovye otvety:

ERR_NEEDMOREPARAMS RPL_YOUREOPER
ERR_NOOPERHOST ERR_PASSWDMISMATCH

Primer:

OPER foo bar
// Popytka zaregistrirovat'sia kak IRC-operator, ispol'zuia imia pol'zovatelia "foo" i parol' "bar".

QUIT

Parametry: []

Sessiia pol'zovatelia zakanchivaetsia s QUIT-soobshcheniem. Server dolzhen zavershit' soedinenie s klientom, kogda uvidit poslannoe soobshchenie. Esli, po kakoi-libo prichine, soedinenie klienta zakrylos' bez vvedeniia pol'zovatelem komandy QUIT (naprimer, obryv sviazi), server potrebuet zapasa v quit-soobshcheniiakh s nekotoroi sortirovkoi soobshcheniia, v poiskakh prichiny razryva.

Primer:

QUIT :Gone to have lunch // Obychnyi format soobshcheniia.

Pol'zovateli

Kazhdyi pol'zovatel' imeet nikneim dlinoi ne bol'she deviati (9) simvolov. Dostupnye simvoly v nike: a-z, A-Z, 0-9 i spets. simvoly -, [, ], \, ^, {, }

Server dolzhen znat' o kliente:

  • imia khosta, s kotorogo zapustilsia pol'zovatel'.
  • imia pol'zovatelia na etom khoste.
  • server, k kotoromu prisoedinilsia pol'zovatel'.

Kogda klient zakryvaet soedinenie, sozdaetsia QUIT-soobshchenie ot imeni klienta serverom.

PRIVMSG

Parametry: {,}

PRIVMSG ispol'zuetsia dlia chastnoi perepiski mezhdu pol'zovateliami. - nikneim poluchatelia soobshcheniia. Tak zhe tam mozhno ukazat' spisok imen ili kanalov, razdelennykh zapiatymi.

Chislovye otvety:

ERR_NORECIPIENT ERR_NOTEXTTOSEND
ERR_CANNOTSENDTOCHAN ERR_NOTOPLEVEL
ERR_WILDTOPLEVEL ERR_TOOMANYTARGETS
ERR_NOSUCHNICK
RPL_AWAY

Primery:

(768u+1n) .br // Soobshchenie k Angel;"> :Angel PRIVMSG Wiz :Hello are you receiving this message ?
// Soobshchenie ot Angel k Wiz;

PRIVMSG Angel :yes I'm receiving it !receiving it !'u>(768u+1n) .br
// Soobshchenie k Angel;

AWAY

Parametry: [message]

Komanda AWAY ustanavlivaet avtomaticheskii otvet na soobshchenie tipa PRIVMSG, napravlennoe klientu Ispol'zovanie AWAY bez ukazaniia parametra, snimaet avtomaticheskii otvet, esli ranee on byl ustanovlen.

Chislovye otvety:

RPL_UNAWAY RPL_NOWAWAY

Primery:

AWAY :Gone to lunch. Back in 5 // ustanovka away-soobshcheniia "Gone to lunch. Back in 5".
:WiZ AWAY // sniatie pol'zovatelem WiZ soobshcheniia AWAY.

NOTICE

Parametry:

Eta komanda rabotaet tak zhe, kak PRIVMSG, za iskliucheniem togo, chto avtomaticheskii otvet AWAY ne mozhet byt' otpravlen v otvet na soobshchenie. Soobshchenie NOTICE ne otpravitsia, esli u poluchatelia stoit rezhim +s.

WHO

Parametry: [ []]

Vozvrashchaet spisok pol'zovatelei, sovpadaiushchikh s parametrom name, za iskliucheniem nevidimykh pol'zovatelei (+i) Esli ustanovlen flag o, vozvrashchaetsia informatsiia tol'ko ob IRC-operatorakh.

Chislovye otvety:

ERR_NOSUCHSERVER
RPL_WHOREPLY RPL_ENDOFWHO

Primery:

WHO *.fi // Spisok pol'zovatelei, sootvetstvuiushchie maske "*.fi";
WHO jto* o // Spisok pol'zovatelei, sootvetstvuiushchie maske "jto*", esli oni iavliaiutsia operatorami.

WHOIS

Parametry:

Cerver otvetit na eto soobshchenie neskol'kimi chislovymi soobshcheniiami s ukazaniem raznykh statusov kazhdogo pol'zovatelia. Esli v ne ukazana nikakaia informatsiia o tom, kakoi nikneim oprosit', vy poluchite informatsiiu o vsekh dostupnykh nikneimakh. Zapiataia razdeliaet spisok nikneimov.

Chislovye otvety:

ERR_NOSUCHSERVER ERR_NONICKNAMEGIVEN
RPL_WHOISUSER RPL_WHOISCHANNELS
RPL_WHOISCHANNELS RPL_WHOISSERVER
RPL_AWAY RPL_WHOISOPERATOR
RPL_WHOISIDLE ERR_NOSUCHNICK
RPL_ENDOFWHOIS

Primery:

WHOIS wiz // vozvrat pol'zovateliu informatsiiu o nikneime WiZ

WHOWAS

Parametry: []

Vozvrashchaet informatsiiu ob imeni pol'zovatelia, kotoroe seichas ne ispol'zuetsia (v sviazi s otkliucheniem pol'zovatelia ili izmeneniem ego imeni). Esli opredelen parametr , vozvrashchaetsia informatsiia o poslednikh sluchaiakh ispol'zovaniia nika.

Chislovye otvety:

ERR_NONICKNAMEGIVEN ERR_WASNOSUCHNICK
RPL_WHOWASUSER RPL_WHOISSERVER
RPL_ENDOFWHOWAS

Primery:

WHOWAS Wiz // vozvrat vsei informatsii v istorii o nikneime "WiZ"
WHOWAS Mermaid 9 // vozvrat 9 naibolee zaprashivaemykh vvodov v nikneim-istorii dlia "Mermaid"

Kanaly

Kanal sozdaetsia pri soedinenii pervogo klienta s nim i kanal ischezaet, kogda ego pokidaet poslednii pol'zovatel'. Poka kanal otsutstvuet, liuboi pol'zovatel' mozhet zavladet' kanalom, nazvav svoi takim zhe imenem. Imia kanala - stroka (nachinaiushchaiasia s simvola & ili #) dlinnoi do 200 simvolov.

Dlia sozdaniia novogo kanala ili vkhoda v sushchestvuiushchii, pol'zovatel' dolzhen zaprosit' JOIN kanala. Esli kanal otsutstvoval, to kanal sozdaetsia, i voshedshii pol'zovatel' stanovitsia operatorom kanala. Esli kanal uzhe sushchestvuet, no tak ili inache on ne otvechaet na popytki voiti, znachit v nastroikakh kanala ustanovlen kakoi-libo iz nizheprivedennykh rezhimov. Vozmozhno, etot kanal tol'ko dlia priglashennykh (invite-only), (rezhim +i), i vy smozhete na ego voiti tol'ko buduchi priglashennym. Pol'zovatel' mozhet nakhodit'sia v neskol'kikh kanalakh odnovremenno, no rekomenduetsia ogranichit'sia desiat'iu (10) kanalami.

Nazvanie kanal mozhet v sebe soderzhat' liuboi ASCII-simvol, krome \r, \n, \g, SPACE, \0, ,.

Protokolom predostavliaetsia dva tipa kanalov:

  • Odin rasprostraniaemyi kanal, kotoryi izvesten vsem serveram, podsoedinennym k seti. Eti kanaly dostupny tol'ko tem klientam, na servere kotorykh on sushchestvuet. Takie kanaly otlichaiutsia simvolom & pered nazvaniem.
  • Ostal'nye kanaly pomecheny simvolom #.

Tak kak v etom proekte ne realizovano podkliuchenie server-server, eti kanaly nichem ne budut otlichat'sia.

Operator kanala

Operator kanala, identifitsiruetsia simvolom @, sleduiushchim za ego nikneimom, vsiakii raz, kak on assotsiiruetsia s kanalom (naprimer, otvety na komandy NAMES, WHO i WHOIS). Esli sozdatel' kanala pokinet ego, to prava operatora nasleduiutsia samomu staromu po vremeni nakhozhdeniia pol'zovateliu ili operatoru, esli takovoi sushchestvuet. Operator kanala imeet vozmozhnost' vypolniat' komandy:

  • MODE
  • TOPIC (+t)
  • INVITE (+i)
  • KICK

MODE

Komanda MODE pozvoliaet nastroit' rezhim imen pol'zovatelei ili kanalov.

Chislovye otvety:

ERR_NEEDMOREPARAMS RPL_CHANNELMODEIS
ERR_CHANOPRIVSNEEDED ERR_NOSUCHNICK
ERR_NOTONCHANNEL ERR_KEYSET
RPL_BANLIST RPL_ENDOFBANLIST
ERR_UNKNOWNMODE ERR_NOSUCHCHANNEL

ERR_USERSDONTMATCH RPL_UMODEIS
ERR_UMODEUNKNOWNFLAG

Rezhimy kanala

Parametry: {[+|-]|o|p|s|i|t|n|b|v} [] [] []

Rezhimy i kharakteristiku kanala mozhet izmenit' tol'ko operator kanala t.e. tot, kto ego sozdal.
Spisok dostupnykh rezhimov kanala:

  • o - brat'/davat' privilegii operatorov kanala
  • p - flag privatnosti kanala;
  • s - flag sekretnosti kanala;
  • i - flag kanala invite-only;
  • t - pri ustanovke etogo flaga, meniat' topik mogut tol'ko operatory;
  • n - zapreshchaet soobshcheniia na kanal ot postoronnikh klientov;
  • m - moderiruemyi kanal;
  • l - ustanovka ogranicheniia na kolichestvo pol'zovatelei;
  • b - ustanovka maski bana;
  • v - brat'/davat' vozmozhnost' golosa pri moderiruemom rezhime;
  • k - ustanovka parolia na kanal.

Primery ispol'zovaniia rezhimov kanala:

MODE #Finnish +im // Delaet kanal #Finnish moderiruemym i 'invite-only'.
MODE #Finnish +o Kilroy // Daet privilegii operatora Kilroy na kanale #Finnish.
MODE #Finnish +v Wiz // Daet WiZ pravo golosa na kanale #Finnish.
MODE #Fins -s // Ubiraet flag 'secret' s kanala #Fins.
MODE #42 +k oulu // Ustanavlivaet na kanal parol' "oulu".
MODE #eu-opers +l 10 // Ustanavlivaet maksimal'noe kolichestvo pol'zovatelei na kanale (10).
MODE &oulu +b // Vyvod spiska masok bana dlia kanala.
MODE &oulu +b *!*@* // Predotvrashchaet vkhod na kanal dlia liubogo pol'zovatelia.
MODE &oulu +b *!*@*.edu // Predotvrashchaet vkhod liubogo pol'zovatelia podkhodiashchego pod masku khosta *.edu.

Rezhimy pol'zovatelia

Parametry: {[+|-]|i|w|s|o}

Rezhimy pol'zovatelia obychny takimi izmeneniiami, kotorye vozdeistvuiut na to, kakim vidiat klienta ili kakie 'eksta'-soobshcheniia posylaet pol'zovatel'. Pol'zovatel'skaia komanda MODE mozhet otnosit'sia ili k otpraviteliu soobshcheniia ili k tomu, chei nikneim ukazali v kachestve parametra.
Dostupnye rezhimy:

  • i - delaet pol'zovatelia nevidimym;
  • s - pol'zovatel' (ne)poluchaet NOTICE soobshcheniia;
  • o - flag IRC-operatora;
  • w - pol'zovatel' (ne)poluchaet WALLOPS soobshcheniia;

Esli pol'zovatel' pytaetsia sdelat' sebia IRC-operatorom, ispol'zuia +o flag, ego popytka budet proignorirovana. Eto ne razresheno, v otlichie ot sbrosa sebia samogo (ispol'zuia -o).

Primery ispol'zovaniia pol'zovatel'skikh rezhimov:

:MODE WiZ -w // otkliuchaet priem soobshchenii WALLOPS dlia WiZ.
:Angel MODE Angel +i // Soobshchenie ot Angel dalaet ego nevidimym.
MODE WiZ -o // WiZ sbrasyvaet sebe status operatora.

TOPIC

Parametry: []

Ispol'zuetsia dlia izmeneniia ili prosmotra topika kanala. Topik kanala ostanetsia prezhnim, esli ne budet zadan novyi topik . Esli parametr podstavlen - topik kanala izmenitsia, esli rezhim kanala pozvoliaet eto sdelat'. Esli u kanala stoit flag t, topik mogut meniat' tol'ko operatory.

Chislovye otvety:

ERR_NEEDMOREPARAMS ERR_NOTONCHANNEL
RPL_NOTOPIC RPL_TOPIC
ERR_CHANOPRIVSNEEDED

Primery:

:Wiz TOPIC #test :New topic // Pol'zovatel' Wiz ustanavlivaet topik.
TOPIC #test :another topic // Ustanovka na #test topika "another topic".
TOPIC #test // Proverka topika na #test.

JOIN

Parametry: {,} [{,}]

Komanda JOIN ispol'zuetsia klientom dlia vkhoda na kanal. Dlia vkhoda v kanal, dolzhny sobliudat'sia sleduiushche usloviia:

  1. Pol'zovatel' mozhet byt' priglashen, esli kanal invite-only.
  2. Nikneim/imia pol'zovatelia/imia khosta ne dolzhny byt' zabanenymi.
  3. Esli ustanovlen parol', no dolzhen byt' vernym.

Kogda pol'zovateli zakhodiat na kanal, oni poluchat uvedomlenie o vsekh komandakh ikh servera. Ono vmeshchaet v sebe MODE, KICK, PART, QUIT i, konechno zhe, PRIVMSG/NOTICE.

Esli JOIN vypolnilsia uspeshno, pol'zovatel' poluchaet topik kanala(ispol'zuia RPL_TOPIC) i spisok pol'zovatelei, kotorye nakhodiatsia na kanale (ispol'zuia RPL_NAMREPLY).

Chislovye otvety:

ERR_NEEDMOREPARAMS ERR_BANNEDFROMCHAN
ERR_INVITEONLYCHAN ERR_BADCHANNELKEY
ERR_CHANNELISFULL ERR_BADCHANMASK
ERR_NOSUCHCHANNEL ERR_TOOMANYCHANNELS
RPL_TOPIC

Primery:

JOIN #foobar // vkhod na kanal #foobar.
JOIN &foo fubar // vkhod na kanal &foo, ispol'zuia kliuch "fubar".
JOIN #foo,&bar fubar // vkhod na kanal #foo, ispol'zuia kliuch "fubar" i na kanal &bar bez ispol'zovaniia kliucha.
JOIN #foo,#bar fubar,foobar // vkhod na kanal #foo, ispol'zuia kliuch "fubar" i na kanal #bar, ispol'zuia kliuch "foobar".
JOIN #foo,#bar // vkhod na kanaly #foo i #bar.
:WiZ JOIN #Twilight_zone // JOIN-soobshchenie ot WiZ

INVITE

Parametry:

Komanda INVITE ispol'zuetsia dlia priglasheniia pol'zovatelei na kanal. Parametr - ukazanie pol'zovatelia, kotorogo trebuetsia priglasit' v kanal . Esli kanal iavliaetsia invite-only (MODE +i), priglashat' v nego mozhet tol'ko operator kanala.

Chislovye otvety:

ERR_NEEDMOREPARAMS ERR_NOSUCHNICK
ERR_NOTONCHANNEL ERR_USERONCHANNEL
ERR_CHANOPRIVSNEEDED
RPL_INVITING RPL_AWAY

Primery:

:Angel INVITE Wiz #Dust // Pol'zovatel' Angel priglasil WiZ v kanal #Dust
INVITE Wiz #Twilight_Zone // Komanda priglasheniia WiZ v kanal #Twilight_zone

KICK

Parametry: []

Komanda KICK iskliuchaet pol'zovatelia iz kanala mozhet byt' ispol'zovana tol'ko operatorom kanala.

Chislovye otvety:

ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL
ERR_BADCHANMASK ERR_CHANOPRIVSNEEDED
ERR_NOTONCHANNEL

Primery:

KICK &Melbourne Matthew // Kik Matthew s kanala &Melbourne
KICK #Finnish John :Speaking English // Kik John s #Finnish, ukazav kommentarii/prichinu "Speaking English".
:WiZ KICK #Finnish John // KICK-soobshchenie WiZ udaliaet John s kanala #Finnish

PART

Parametry: {,}

S pomoshch'iu komandy PART pol'zovatel' mozhet pokinut' kanaly, kotorye on ukazhet v parametrakh.

Chislovye otvety:

ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL
ERR_NOTONCHANNEL

Primery:

PART #twilight_zone // pokinut' kanal "#twilight_zone"
PART #oz-ops,&group5 // pokinut' kanaly "&group5" i "#oz-ops".

NAMES

Parametry: [{,}]

Ispol'zuia komandu NAMES, pol'zovatel' mozhet poluchit' spisok vsekh pol'zovatelei, sostoiashchikh v kanale (pri uslovii, chto kanal viden otpraviteliu komandy). Kanaly, kotorye ne vidny pol'zovateliu - eto privatnye (+p), sekretnye (+s) i v kotorykh on uzhe sostoit. Eta komanda ne vozvrashchaet koda oshibki iz-za nepravil'nykh nazvanii kanalov.

Esli parametr ne zadan, vyvoditsia spisok vsekh kanalov i imen tekh, kto v nikh sostoit. I k kontsu vyvodimogo spiska - list pol'zovatelei, kotorye ne sostoiat ni v odnom vidimom kanale.

Chislovye otvety:

RPL_NAMREPLY RPL_ENDOFNAMES

Primery:

NAMES #twilight_zone,#42 // Spisok vidimykh pol'zovatelei na kanale #twilight_zone i #42, esli kanaly vidimy vam.
NAMES // Spisok vsekh vidimykh kanalov i pol'zovatelei.

LIST

Parametry: [{,} []]

LIST ispol'zuetsia dlia vyvoda spiska kanalov i ikh topikov. Esli ispol'zuetsia parametr , to vyvoditsia tol'ko status etogo kanala.

Privatnye kanaly ukazany (bez ikh topikov) kak kanaly "Prv", bez ukazaniia kolichestva klientov, sidiashchikh na etom kanale. Sekretnye kanaly ne vyvodiatsia v spiske, esli pol'zovatel' ne iavliaetsia chlenom podobnogo kanala.

Chislovye otvety:

ERR_NOSUCHSERVER RPL_LISTSTART
RPL_LIST RPL_LISTEND

Primery:

LIST // Spisok vsekh kanalov.
LIST #twilight_zone,#42 // Spisok kanalov #twilight_zone i #42

Prochee

IRC-operatory i konfig

IRC-operatory - spetsial'nyi klass klientov, imeiushchii vozmozhnost' vypolniat' komandy:

  • RESTART - perezapuskaet server.
    Chislovye otvety:

    ERR_NOPRIVILEGES
  • KILL - otkliuchaet pol'zovatelia ot servera. Prinimaet dva obiazatel'nykh parametra i
    Chislovye otvety:

    ERR_NOPRIVILEGES ERR_NEEDMOREPARAMS
    ERR_NOSUCHNICK ERR_CANTKILLSERVER
  • REHASH - perechityvaet konfiguratsionnyi fail, v kotorom soderzhatsia nikneimy i paroli IRC-operatorov.
    Chislovye otvety:

    RPL_REHASHING ERR_NOPRIVILEGES

IRC-operatory, v otlichie ot ostal'nykh pol'zovatelei, imeiut naivysshie prava i sobstvennye paroli. Chtoby proizvesti pol'zovateliu avtorizatsiiu v kachestve IRC-operatora, trebuetsia vypolnit' komandu OPER.

Konfiguratsionnyi fail

Predostavliaia gibkost' nastroiki i zapuska servera, rekomenduetsia ispol'zovat' konfiguratsionnyi fail. Minimal'nye trebovaniia k soderzhaniiu konfiga:

  • S kakikh khostov dopuskat' soedineniia klientov.
  • S kakikh khostov dopuskat' servernye soedineniia.
  • Mestopolozhenie servera(universitet, gorod/raion, kompaniia i t.p.).
  • Administrator servera i ego e-mail.
  • Nikneimy i paroli IRC-operatorov.

Paroli IRC-operatorov rekomenduetsia khranit' v zashifrovannom vide. Naprimer, s pomoshch'iu SHA256

WALLOPS

Parametry:

Komanda otpravliaet soobshcheniia vsem IRC-operatoram, nakhodiashchimsia v seti, krome tekh, kto otkliuchil uvedomleniia s pomoshch'iu MODE -w. Chtoby izbezhat' zloupotrebleniia komandoi WALLOPS, rekomenduetsia ogranichit' ego ispol'zovanie dlia obychnykh pol'zovatelei.

Chislovye otvety:

ER_NEEDMOREPARAMS

PING / PONG

Parametry: []

PING ispol'zuetsia dlia proverki nalichiia aktivnosti klienta na drugom kontse soedineniia. Eto soobshchenie posylaetsia s reguliarnymi intervalami, esli ne zamecheno drugoi aktivnosti, iskhodiashchei ot soedineniia. Esli klient ne posylaet PONG v otvet na PING - soedinenie zakryvaetsia.

Chislovye otvety:

ERR_NOORIGIN ERR_NOSUCHSERVER

ISON

Parametry: {}

Prinimaet v kachestve parametra spisok pol'zovatelei, razdelennykh probelami. Server vozvrashchaet spisok tekh iz nikh, kotorye v dannyi moment nakhodiatsia v seti, v vide razdelennogo probelami spiska. Esli ni odin iz nikh ne nakhoditsia v seti, server vozvrashchaet pustoi spisok.

Chislovye otvety:

RPL_ISON ERR_NEEDMOREPARAMS

USERHOST

Parametry: {}

Komanda USERHOST trebuet spisok do 5-ti nikneimov, razdelenykh probelami i vozvrashchaet informatsiiu o kazhdom nikneime, kotoryi byl naiden.

Chislovye otvety:

RPL_USERHOST ERR_NEEDMOREPARAMS

Primery:

USERHOST Wiz Michael Marty p // USERHOST zapros informatsii o nikneimakh "Wiz", "Michael", "Marty" i "p"

VERSION

Parametry: []

Vozvrashchaet versiiu servera , ili tekushchego servera, esli etot parametr ne opredelen.

Chislovye otvety:

ERR_NOSUCHSERVER RPL_VERSION

INFO

Parametry: []

Vozvrashchaet informatsiiu o tekushchem servere. Informatsiiu vkliuchaet versiiu servera, datu ego kompiliatsii, informatsiiu o nalozhennykh patchakh, date zapuska, i liubuiu druguiu informatsiiu, kotoraia mozhet iavliat'sia nuzhnoi.

Chislovye otvety:

ERR_NOSUCHSERVER
RPL_INFO RPL_ENDOFINFO

ADMIN

Parametry: []

Vozvrashchaet informatsiiu ob administratore ukazannogo ili tekushchego servera, kotoraia soderzhitsia v konfig-faile.

Chislovye otvety:

ERR_NOSUCHSERVER
RPL_ADMINME RPL_ADMINLOC
RPL_ADMINLOC2 RPL_ADMINEMAIL

TIME

Parametry: []

Vozvrashchaet lokal'noe vremia ukazannogo ili tekushchego servera.

Chislovye otvety:

ERR_NOSUCHSERVER RPL_TIME

Chislovye otvety

Nizhe privoditsia spisok chislovykh otvetov, kotorye generiruiutsia v otvet na komandy.

Oshibki

:You're not on that channel" 443 ERR_USERONCHANNEL " :is already on channel" 444 ERR_NOLOGIN " :User not logged in" 445 ERR_SUMMONDISABLED ":SUMMON has been disabled" 446 ERR_USERSDISABLED ":USERS has been disabled" 451 ERR_NOTREGISTERED ":You have not registered" 461 ERR_NEEDMOREPARAMS " :Not enough parameters" 462 ERR_ALREADYREGISTRED ":You may not reregister" 463 ERR_NOPERMFORHOST ":Your host isn't among the privileged" 464 ERR_PASSWDMISMATCH ":Password incorrect" 465 ERR_YOUREBANNEDCREEP ":You are banned from this server" 467 ERR_KEYSET " :Channel key already set" 471 ERR_CHANNELISFULL " :Cannot join channel (+l)" 472 ERR_UNKNOWNMODE " :is unknown mode char to me" 473 ERR_INVITEONLYCHAN " :Cannot join channel (+i)" 474 ERR_BANNEDFROMCHAN " :Cannot join channel (+b)" 475 ERR_BADCHANNELKEY " :Cannot join channel (+k)" 481 ERR_NOPRIVILEGES ":Permission Denied- You're not an IRC operator" 482 ERR_CHANOPRIVSNEEDED " :You're not channel operator" 483 ERR_CANTKILLSERVER ":You cant kill a server!" 491 ERR_NOOPERHOST ":No O-lines for your host" 501 ERR_UMODEUNKNOWNFLAG ":Unknown MODE flag" 502 ERR_USERSDONTMATCH ":Cant change mode for other users"">401 ERR_NOSUCHNICK " :No such nick/channel"
402 ERR_NOSUCHSERVER " :No such server"
403 ERR_NOSUCHCHANNEL " :No such channel"
404 ERR_CANNOTSENDTOCHAN " :Cannot send to channel"
405 ERR_TOOMANYCHANNELS " :You have joined too many channels"
406 ERR_WASNOSUCHNICK " :There was no such nickname"
407 ERR_TOOMANYTARGETS " :Duplicate recipients. No message delivered"
409 ERR_NOORIGIN ":No origin specified"
411 ERR_NORECIPIENT ":No recipient given ()"
412 ERR_NOTEXTTOSEND ":No text to send"
413 ERR_NOTOPLEVEL " :No toplevel domain specified"
414 ERR_WILDTOPLEVEL " :Wildcard in toplevel domain"
421 ERR_UNKNOWNCOMMAND " :Unknown command"
422 ERR_NOMOTD ":MOTD File is missing"
423 ERR_NOADMININFO " :No administrative info available"
424 ERR_FILEERROR ":File error doing on "
431 ERR_NONICKNAMEGIVEN ":No nickname given"
432 ERR_ERRONEUSNICKNAME " :Erroneus nickname"
433 ERR_NICKNAMEINUSE " :Nickname is already in use"
436 ERR_NICKCOLLISION " :Nickname collision KILL"
441 ERR_USERNOTINCHANNEL " :They aren't on that channel"
442 ERR_NOTONCHANNEL " :You're not on that channel"
443 ERR_USERONCHANNEL " :is already on channel"
444 ERR_NOLOGIN " :User not logged in"
445 ERR_SUMMONDISABLED ":SUMMON has been disabled"
446 ERR_USERSDISABLED ":USERS has been disabled"
451 ERR_NOTREGISTERED ":You have not registered"
461 ERR_NEEDMOREPARAMS " :Not enough parameters"
462 ERR_ALREADYREGISTRED ":You may not reregister"
463 ERR_NOPERMFORHOST ":Your host isn't among the privileged"
464 ERR_PASSWDMISMATCH ":Password incorrect"
465 ERR_YOUREBANNEDCREEP ":You are banned from this server"
467 ERR_KEYSET " :Channel key already set"
471 ERR_CHANNELISFULL " :Cannot join channel (+l)"
472 ERR_UNKNOWNMODE " :is unknown mode char to me"
473 ERR_INVITEONLYCHAN " :Cannot join channel (+i)"
474 ERR_BANNEDFROMCHAN " :Cannot join channel (+b)"
475 ERR_BADCHANNELKEY " :Cannot join channel (+k)"
481 ERR_NOPRIVILEGES ":Permission Denied- You're not an IRC operator"
482 ERR_CHANOPRIVSNEEDED " :You're not channel operator"
483 ERR_CANTKILLSERVER ":You cant kill a server!"
491 ERR_NOOPERHOST ":No O-lines for your host"
501 ERR_UMODEUNKNOWNFLAG ":Unknown MODE flag"
502 ERR_USERSDONTMATCH ":Cant change mode for other users"

Otvety na komandy

" 392 RPL_USERSSTART ":UserID Terminal Host" 393 RPL_USERS ":%-8s %-9s %-8s" 394 RPL_ENDOFUSERS ":End of users" 395 RPL_NOUSERS ":Nobody logged in" 200 RPL_TRACELINK "Link " 201 RPL_TRACECONNECTING "Try. " 202 RPL_TRACEHANDSHAKE "H.S. " 203 RPL_TRACEUNKNOWN "???? []" 204 RPL_TRACEOPERATOR "Oper " 205 RPL_TRACEUSER "User " 206 RPL_TRACESERVER "Serv S C @" 208 RPL_TRACENEWTYPE " 0 " 261 RPL_TRACELOG "File " 211 RPL_STATSLINKINFO "

Zarezervirovannye chisla

209 RPL_TRACECLASS 217 RPL_STATSQLINE
231 RPL_SERVICEINFO 232 RPL_ENDOFSERVICES
233 RPL_SERVICE 234 RPL_SERVLIST
235 RPL_SERVLISTEND
316 RPL_WHOISCHANOP 361 RPL_KILLDONE
362 RPL_CLOSING 363 RPL_CLOSEEND
373 RPL_INFOSTART 384 RPL_MYPORTIS
466 ERR_YOUWILLBEBANNED 476 ERR_BADCHANMASK
492 ERR_NOSERVICEHOST

Ssylki na poleznye materialy

  1. https://datatracker.ietf.org/doc/html/rfc1459 - dokumentatsiia rfc1459 na angliiskom
  2. https://www.lissyara.su/doc/rfc/rfc1459/ - dokumentatsiia rfc1459, perevedennaia na russkii
  3. https://ru.wikipedia.org/wiki/Spisok_IRC-komand - wiki s osnovnymi komandami IRC bolee prostymi slovami
  4. https://masandilov.ru/network/guide_to_network_programming - gaid po setevomu programmirovaniiu
  5. https://ncona.com/2019/04/building-a-simple-server-with-cpp/ - pro sokety i TCP-server na C++
  6. https://youtu.be/cNdlrbZSkyQ - eshche nemnogo pro sokety