IRC server based on TCP/IP protocol to rfc1459 standard
MIT License
1998 , DALnet, , IRC?, : IRC , , , , , . IRC , , , !
IRC (Internet Relay Chat) . 1988 , . , IRC , : ICQ, Skype, Discord, Telegram, Slack, etc...
IRC-, rfc1459.
:
git clone https://github.com/levensta/IRC-Server.git
cd IRC-Server/
make
:
./ircserv 6667 secretpassword
:
nc localhost 6667
Pidgin (Linux)
Adium (MacOS)
IRConf.json
, , api.intra.42.fr, . :
./bot/bot IRCatBot.conf.json
:
PRIVMSG wherebot :levensta
// :[email protected] PRIVMSG lev :"Location: Russian Federation, Kazan, Spartakovskaya, 2b2 -> et-e1"
: C -. rfc1459.
IRC- , ( ) :
**** . :
, , . :
.
** ** IRC- , ASCII-. - 510 . . . / , .
, . , , 2 , 2 .
:
PASS- . , MOTD (message of the day) :
375 RPL_MOTDSTART ":- <server> Message of the day - "
372 RPL_MOTD ":- <text>"
376 RPL_ENDOFMOTD ":End of /MOTD command"
: <password>
PASS
' ', ,
. .
, PASS
NICK
/USER
.
:
ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
:
PASS secretpassword
: <nickname>
[ <hopcount> ]
, NICK, , KILL . , , . NICK , () .
:
ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME
ERR_NICKNAMEINUSE ERR_NICKCOLLISION
:
NICK Wiz // "Wiz".
:WiZ NICK Kilroy // WiZ Kilroy.
: <username>
<hostname>
<servername>
<realname>
USER
, , .
<hostname>
<servername>
IRC-, , -.
, <realname>
, :
, .
:
RR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
:
USER guest tolmoon tolsun :Ronnie Reagan
// "guest" "Ronnie Reagan"
: <user>
<password>
OPER
IRC- ( ). <user>
<password>
, IRC-.
-, OPER
, , MODE +o
.
:
ERR_NEEDMOREPARAMS RPL_YOUREOPER
ERR_NOOPERHOST ERR_PASSWDMISMATCH
:
OPER foo bar
// IRC-, "foo" "bar".
: [<Quit message>]
QUIT-. , .
, - , QUIT (, ), quit- , .
:
QUIT :Gone to have lunch // .
(9) .
: a-z
, A-Z
, 0-9
. -
, [
, ]
, \
, ^
, {
, }
:
, .
.
, .
, QUIT- .
: <receiver>{,<receiver>}
<text to be sent>
PRIVMSG
.
<receiver>
.
, .
:
ERR_NORECIPIENT ERR_NOTEXTTOSEND
ERR_CANNOTSENDTOCHAN ERR_NOTOPLEVEL
ERR_WILDTOPLEVEL ERR_TOOMANYTARGETS
ERR_NOSUCHNICK
RPL_AWAY
:
:Angel PRIVMSG Wiz :Hello are you receiving this message ?
// Angel Wiz;
PRIVMSG Angel :yes I'm receiving it !receiving it !'u>(768u+1n) .br
// Angel;
: [message]
AWAY
PRIVMSG
,
AWAY
, , .
:
RPL_UNAWAY RPL_NOWAWAY
:
AWAY :Gone to lunch. Back in 5 // away- "Gone to lunch. Back in 5".
:WiZ AWAY // WiZ AWAY.
: <nickname>
<text>
, `PRIVMSG`, , `AWAY` .
NOTICE
, +s
.
: [<nickmask> [<o>]]
, name
, (+i)
o
, IRC-.
:
ERR_NOSUCHSERVER
RPL_WHOREPLY RPL_ENDOFWHO
:
WHO *.fi // , "*.fi";
WHO jto* o // , "jto*", .
: <nickmask>
C .
<nickmask>
, ,
. .
:
ERR_NOSUCHSERVER ERR_NONICKNAMEGIVEN
RPL_WHOISUSER RPL_WHOISCHANNELS
RPL_WHOISCHANNELS RPL_WHOISSERVER
RPL_AWAY RPL_WHOISOPERATOR
RPL_WHOISIDLE ERR_NOSUCHNICK
RPL_ENDOFWHOIS
:
WHOIS wiz // WiZ
: <nickname>
[<count>]
, ( ).
<count>
, <count>
.
:
ERR_NONICKNAMEGIVEN ERR_WASNOSUCHNICK
RPL_WHOWASUSER RPL_WHOISSERVER
RPL_ENDOFWHOWAS
:
WHOWAS Wiz // "WiZ"
WHOWAS Mermaid 9 // 9 - "Mermaid"
, . , , .
** ** ( &
#
) 200 .
, [`JOIN`](#join) . , , . , , - . , (invite-only), ( +i), .
, (10) .
ASCII-, `\r`, `\n`, `\g`, `SPACE`, `\0`, `,`.
:
&
.`#`.
*-*, .
, @
, , , (, NAMES
, WHO
WHOIS
).
, , .
:
MODE
TOPIC
(+t)INVITE
(+i)KICK
MODE
.
:
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
: <channel>
{[+|-]|o|p|s|i|t|n|b|v}
[<limit>]
[<user>]
[<ban mask>]
.. , .
:
:
MODE #Finnish +im // #Finnish 'invite-only'.
MODE #Finnish +o Kilroy // Kilroy #Finnish.
MODE #Finnish +v Wiz // WiZ #Finnish.
MODE #Fins -s // 'secret' #Fins.
MODE #42 +k oulu // "oulu".
MODE #eu-opers +l 10 // (10).
MODE &oulu +b // .
MODE &oulu +b *!*@* // .
MODE &oulu +b *!*@*.edu // *.edu.
: <nickname>
{[+|-]|i|w|s|o}
, , ''- .
MODE
, .
:
:
:MODE WiZ -w // WALLOPS WiZ.
:Angel MODE Angel +i // Angel .
MODE WiZ -o // WiZ .
: <channel>
[<topic>]
. `<channel>` , `<topic>`.
<topic>
, . t
, .
:
ERR_NEEDMOREPARAMS ERR_NOTONCHANNEL
RPL_NOTOPIC RPL_TOPIC
ERR_CHANOPRIVSNEEDED
:
:Wiz TOPIC #test :New topic // Wiz .
TOPIC #test :another topic // #test "another topic".
TOPIC #test // #test.
: <channel>{,<channel>}
[<key>{,<key>}]
JOIN
. , :
, . `MODE`, `KICK`, `PART`, `QUIT` , , `PRIVMSG`/`NOTICE`.
JOIN
, ( RPL_TOPIC
) , ( RPL_NAMREPLY
).
:
ERR_NEEDMOREPARAMS ERR_BANNEDFROMCHAN
ERR_INVITEONLYCHAN ERR_BADCHANNELKEY
ERR_CHANNELISFULL ERR_BADCHANMASK
ERR_NOSUCHCHANNEL ERR_TOOMANYCHANNELS
RPL_TOPIC
:
JOIN #foobar // #foobar.
JOIN &foo fubar // &foo, "fubar".
JOIN #foo,&bar fubar // #foo, "fubar" &bar .
JOIN #foo,#bar fubar,foobar // #foo, "fubar" #bar, "foobar".
JOIN #foo,#bar // #foo #bar.
:WiZ JOIN #Twilight_zone // JOIN- WiZ
: <nickname>
<channel>
INVITE
.
<nickname>
, <channel>
.
invite-only (MODE +i), .
:
ERR_NEEDMOREPARAMS ERR_NOSUCHNICK
ERR_NOTONCHANNEL ERR_USERONCHANNEL
ERR_CHANOPRIVSNEEDED
RPL_INVITING RPL_AWAY
:
:Angel INVITE Wiz #Dust // Angel WiZ #Dust
INVITE Wiz #Twilight_Zone // WiZ #Twilight_zone
: <channel>
<user>
[<comment>]
KICK
.
:
ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL
ERR_BADCHANMASK ERR_CHANOPRIVSNEEDED
ERR_NOTONCHANNEL
:
KICK &Melbourne Matthew // Matthew &Melbourne
KICK #Finnish John :Speaking English // John #Finnish, / "Speaking English".
:WiZ KICK #Finnish John // KICK- WiZ John #Finnish
: <channel>{,<channel>}
PART
, .
:
ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL
ERR_NOTONCHANNEL
:
PART #twilight_zone // "#twilight_zone"
PART #oz-ops,&group5 // "&group5" "#oz-ops".
: [<channel>{,<channel>}]
NAMES
,
, ( , ).
, (+p), (+s) .
- .
<channel>
, , .
, .
:
RPL_NAMREPLY RPL_ENDOFNAMES
:
NAMES #twilight_zone,#42 // #twilight_zone #42, .
NAMES // .
: [<channel>{,<channel>}
[<server>]]
LIST
. <channel>
, .
( ) "Prv", , . , .
:
ERR_NOSUCHSERVER RPL_LISTSTART
RPL_LIST RPL_LISTEND
:
LIST // .
LIST #twilight_zone,#42 // #twilight_zone #42
IRC- , :
RESTART
.
:
ERR_NOPRIVILEGES
KILL
. <user>
<message>
:
ERR_NOPRIVILEGES ERR_NEEDMOREPARAMS
ERR_NOSUCHNICK ERR_CANTKILLSERVER
REHASH
, IRC-.
:
RPL_REHASHING ERR_NOPRIVILEGES
IRC-, , . IRC-, OPER.
, . :
.
.
e-mail.
IRC- . , SHA256
: <message>
IRC-, , , `MODE -w`.
`WALLOPS`, .
:
ER_NEEDMOREPARAMS
: <server1>
[<server2>]
PING
. , , .
PONG
PING
.
:
ERR_NOORIGIN ERR_NOSUCHSERVER
: <nickname>{<space><nickname>}
`<nickname>` , .
, , .
, .
:
RPL_ISON ERR_NEEDMOREPARAMS
: <nickname>{<space><nickname>}
USERHOST
5- , , .
:
RPL_USERHOST ERR_NEEDMOREPARAMS
:
USERHOST Wiz Michael Marty p // USERHOST "Wiz", "Michael", "Marty" "p"
: [<server>]
<server>
, , .
:
ERR_NOSUCHSERVER RPL_VERSION
: [<server>]
. , , , , , .
:
ERR_NOSUCHSERVER
RPL_INFO RPL_ENDOFINFO
: [<server>]
, -.
:
ERR_NOSUCHSERVER
RPL_ADMINME RPL_ADMINLOC
RPL_ADMINLOC2 RPL_ADMINEMAIL
: [<server>]
.
:
ERR_NOSUCHSERVER RPL_TIME
, .
401 ERR_NOSUCHNICK "<nickname> :No such nick/channel"
402 ERR_NOSUCHSERVER "<server name> :No such server"
403 ERR_NOSUCHCHANNEL "<channel name> :No such channel"
404 ERR_CANNOTSENDTOCHAN "<channel name> :Cannot send to channel"
405 ERR_TOOMANYCHANNELS "<channel name> :You have joined too many channels"
406 ERR_WASNOSUCHNICK "<nickname> :There was no such nickname"
407 ERR_TOOMANYTARGETS "<target> :Duplicate recipients. No message delivered"
409 ERR_NOORIGIN ":No origin specified"
411 ERR_NORECIPIENT ":No recipient given (<command>)"
412 ERR_NOTEXTTOSEND ":No text to send"
413 ERR_NOTOPLEVEL "<mask> :No toplevel domain specified"
414 ERR_WILDTOPLEVEL "<mask> :Wildcard in toplevel domain"
421 ERR_UNKNOWNCOMMAND "<command> :Unknown command"
422 ERR_NOMOTD ":MOTD File is missing"
423 ERR_NOADMININFO "<server> :No administrative info available"
424 ERR_FILEERROR ":File error doing <file op> on <file>"
431 ERR_NONICKNAMEGIVEN ":No nickname given"
432 ERR_ERRONEUSNICKNAME "<nick> :Erroneus nickname"
433 ERR_NICKNAMEINUSE "<nick> :Nickname is already in use"
436 ERR_NICKCOLLISION "<nick> :Nickname collision KILL"
441 ERR_USERNOTINCHANNEL "<nick> <channel> :They aren't on that channel"
442 ERR_NOTONCHANNEL "<channel> :You're not on that channel"
443 ERR_USERONCHANNEL "<user> <channel> :is already on channel"
444 ERR_NOLOGIN "<user> :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 "<command> :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> :Channel key already set"
471 ERR_CHANNELISFULL "<channel> :Cannot join channel (+l)"
472 ERR_UNKNOWNMODE "<char> :is unknown mode char to me"
473 ERR_INVITEONLYCHAN "<channel> :Cannot join channel (+i)"
474 ERR_BANNEDFROMCHAN "<channel> :Cannot join channel (+b)"
475 ERR_BADCHANNELKEY "<channel> :Cannot join channel (+k)"
481 ERR_NOPRIVILEGES ":Permission Denied- You're not an IRC operator"
482 ERR_CHANOPRIVSNEEDED "<channel> :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"
300 RPL_NONE
302 RPL_USERHOST ":[<reply>{<space><reply>}]"
303 RPL_ISON ":[<nick> {<space><nick>}]"
301 RPL_AWAY "<nick> :<away message>"
305 RPL_UNAWAY ":You are no longer marked as being away"
306 RPL_NOWAWAY ":You have been marked as being away"
311 RPL_WHOISUSER "<nick> <user> <host> * :<real name>"
312 RPL_WHOISSERVER "<nick> <server> :<server info>"
313 RPL_WHOISOPERATOR "<nick> :is an IRC operator"
317 RPL_WHOISIDLE "<nick> <integer> :seconds idle"
318 RPL_ENDOFWHOIS "<nick> :End of /WHOIS list"
319 RPL_WHOISCHANNELS "<nick> :{[@|+]<channel><space>}"
314 RPL_WHOWASUSER "<nick> <user> <host> * :<real name>"
369 RPL_ENDOFWHOWAS "<nick> :End of WHOWAS"
321 RPL_LISTSTART "Channel :Users Name"
322 RPL_LIST "<channel> <# visible> :<topic>"
323 RPL_LISTEND ":End of /LIST"
324 RPL_CHANNELMODEIS "<channel> <mode> <mode params>"
331 RPL_NOTOPIC "<channel> :No topic is set"
332 RPL_TOPIC "<channel> :<topic>"
341 RPL_INVITING "<channel> <nick>"
342 RPL_SUMMONING "<user> :Summoning user to IRC"
351 RPL_VERSION "<version>.<debuglevel> <server> :<comments>"
352 RPL_WHOREPLY "<channel> <user> <host> <server> <nick> <H|G>[*][@|+] :<hopcount> <real name>"
315 RPL_ENDOFWHO "<name> :End of /WHO list"
353 RPL_NAMREPLY "<channel> :[[@|+]<nick> [[@|+]<nick> [...]]]"
366 RPL_ENDOFNAMES "<channel> :End of /NAMES list"
364 RPL_LINKS "<mask> <server> :<hopcount> <server info>"
365 RPL_ENDOFLINKS "<mask> :End of /LINKS list"
367 RPL_BANLIST "<channel> <banid>"
368 RPL_ENDOFBANLIST "<channel> :End of channel ban list"
371 RPL_INFO ":<string>"
374 RPL_ENDOFINFO ":End of /INFO list"
375 RPL_MOTDSTART ":- <server> Message of the day - "
372 RPL_MOTD ":- <text>"
376 RPL_ENDOFMOTD ":End of /MOTD command"
381 RPL_YOUREOPER ":You are now an IRC operator"
382 RPL_REHASHING "<config file> :Rehashing"
391 RPL_TIME "<server> :<string showing server's local time>"
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 <version & debug level> <destination> <next server>"
201 RPL_TRACECONNECTING "Try. <class> <server>"
202 RPL_TRACEHANDSHAKE "H.S. <class> <server>"
203 RPL_TRACEUNKNOWN "???? <class> [<client IP address in dot form>]"
204 RPL_TRACEOPERATOR "Oper <class> <nick>"
205 RPL_TRACEUSER "User <class> <nick>"
206 RPL_TRACESERVER "Serv <class> <int>S <int>C <server> <nick!user|*!*>@<host|server>"
208 RPL_TRACENEWTYPE "<newtype> 0 <client name>"
261 RPL_TRACELOG "File <logfile> <debug level>"
211 RPL_STATSLINKINFO "<linkname> <sendq> <sent messages> <sent bytes> <received messages> <received bytes> <time open>"
212 RPL_STATSCOMMANDS "<command> <count>"
213 RPL_STATSCLINE "C <host> * <name> <port> <class>"
214 RPL_STATSNLINE "N <host> * <name> <port> <class>"
215 RPL_STATSILINE "I <host> * <host> <port> <class>"
216 RPL_STATSKLINE "K <host> * <username> <port> <class>"
218 RPL_STATSYLINE "Y <class> <ping frequency> <connect frequency> <max sendq>"
219 RPL_ENDOFSTATS "<stats letter> :End of /STATS report"
221 RPL_UMODEIS "<user mode string>"
241 RPL_STATSLLINE "L <hostmask> * <servername> <maxdepth>"
242 RPL_STATSUPTIME ":Server Up %d days %d:%02d:%02d"
243 RPL_STATSOLINE "O <hostmask> * <name>"
244 RPL_STATSHLINE "H <hostmask> * <servername>"
251 RPL_LUSERCLIENT ":There are <integer> users and <integer> invisible on <integer> servers"
252 RPL_LUSEROP "<integer> :operator(s) online"
253 RPL_LUSERUNKNOWN "<integer> :unknown connection(s)"
254 RPL_LUSERCHANNELS "<integer> :channels formed"
255 RPL_LUSERME ":I have <integer> clients and <integer> servers"
256 RPL_ADMINME "<server> :Administrative info"
257 RPL_ADMINLOC1 ":<admin info>"
258 RPL_ADMINLOC2 ":<admin info>"
259 RPL_ADMINEMAIL ":<admin info>"
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