1 /++
2 +
3 +/
4 module virc.numerics.definitions;
5 
6 import std.meta : AliasSeq;
7 
8 ///
9 enum Numeric {
10 	//RFC1459 Command responses: https://tools.ietf.org/html/rfc1459#section-6.2
11 	///
12 	RPL_TRACELINK = "200",
13 	///
14 	RPL_TRACECONNECTING = "201",
15 	///
16 	RPL_TRACEHANDSHAKE = "202",
17 	///
18 	RPL_TRACEUNKNOWN = "203",
19 	///
20 	RPL_TRACEOPERATOR = "204",
21 	///
22 	RPL_TRACEUSER = "205",
23 	///
24 	RPL_TRACESERVER = "206",
25 	///
26 	RPL_TRACENEWTYPE = "208",
27 	///
28 	RPL_STATSLINKINFO = "211",
29 	///
30 	RPL_STATSCOMMANDS = "212",
31 	///
32 	RPL_STATSCLINE = "213",
33 	///
34 	RPL_STATSNLINE = "214",
35 	///
36 	RPL_STATSILINE = "215",
37 	///
38 	RPL_STATSKLINE = "216",
39 	///
40 	RPL_STATSYLINE = "218",
41 	///
42 	RPL_ENDOFSTATS = "219",
43 	///
44 	RPL_STATSLLINE = "241",
45 	///
46 	RPL_STATSUPTIME = "242",
47 	///
48 	RPL_STATSOLINE = "243",
49 	///
50 	RPL_STATSHLINE = "244",
51 	///
52 	RPL_UMODEIS = "221",
53 	///
54 	RPL_LUSERCLIENT = "251",
55 	///
56 	RPL_LUSEROP = "252",
57 	///
58 	RPL_LUSERUNKNOWN = "253",
59 	///
60 	RPL_LUSERCHANNELS = "254",
61 	///
62 	RPL_LUSERME = "255",
63 	///
64 	RPL_ADMINME = "256",
65 	///
66 	RPL_ADMINLOC1 = "257",
67 	///
68 	RPL_ADMINLOC2 = "258",
69 	///
70 	RPL_ADMINEMAIL = "259",
71 	///
72 	RPL_TRACELOG = "261",
73 	///
74 	RPL_NONE = "300",
75 	///
76 	RPL_AWAY = "301",
77 	///
78 	RPL_USERHOST = "302",
79 	///
80 	RPL_ISON = "303",
81 	///
82 	RPL_UNAWAY = "305",
83 	///
84 	RPL_NOWAWAY = "306",
85 	///
86 	RPL_WHOISUSER = "311",
87 	///
88 	RPL_WHOISSERVER = "312",
89 	///
90 	RPL_WHOISOPERATOR = "313",
91 	///
92 	RPL_WHOWASUSER = "314",
93 	///
94 	RPL_ENDOFWHO = "315",
95 	///
96 	RPL_WHOISIDLE = "317",
97 	///
98 	RPL_ENDOFWHOIS = "318",
99 	///
100 	RPL_WHOISCHANNELS = "319",
101 	///
102 	RPL_LISTSTART = "321",
103 	///
104 	RPL_LIST = "322",
105 	///
106 	RPL_LISTEND = "323",
107 	///
108 	RPL_CHANNELMODEIS = "324",
109 	///
110 	RPL_NOTOPIC = "331",
111 	///
112 	RPL_TOPIC = "332",
113 	///
114 	RPL_INVITING = "341",
115 	///
116 	RPL_SUMMONING = "342",
117 	///
118 	RPL_VERSION = "351",
119 	///
120 	RPL_WHOREPLY = "352",
121 	///
122 	RPL_NAMREPLY = "353",
123 	///
124 	RPL_WHOSPCRPL = "354",
125 	///
126 	RPL_LINKS = "364",
127 	///
128 	RPL_ENDOFLINKS = "365",
129 	///
130 	RPL_ENDOFNAMES = "366",
131 	///
132 	RPL_BANLIST = "367",
133 	///
134 	RPL_ENDOFBANLIST = "368",
135 	///
136 	RPL_ENDOFWHOWAS = "369",
137 	///
138 	RPL_INFO = "371",
139 	///
140 	RPL_MOTD = "372",
141 	///
142 	RPL_ENDOFINFO = "374",
143 	///
144 	RPL_MOTDSTART = "375",
145 	///
146 	RPL_ENDOFMOTD = "376",
147 	///
148 	RPL_YOUREOPER = "381",
149 	///
150 	RPL_REHASHING = "382",
151 	///
152 	RPL_TIME = "391",
153 	///
154 	RPL_USERSSTART = "392",
155 	///
156 	RPL_USERS = "393",
157 	///
158 	RPL_ENDOFUSERS = "394",
159 	///
160 	RPL_NOUSERS = "395",
161 	//RFC1459 Errors: https://tools.ietf.org/html/rfc1459#section-6.1
162 	///
163 	ERR_NOSUCHNICK = "401",
164 	///
165 	ERR_NOSUCHSERVER = "402",
166 	///
167 	ERR_NOSUCHCHANNEL = "403",
168 	///
169 	ERR_CANNOTSENDTOCHAN = "404",
170 	///
171 	ERR_TOOMANYCHANNELS = "405",
172 	///
173 	ERR_WASNOSUCHNICK = "406",
174 	///
175 	ERR_TOOMANYTARGETS = "407",
176 	///
177 	ERR_NOORIGIN = "409",
178 	///
179 	ERR_NORECIPIENT = "411",
180 	///
181 	ERR_NOTEXTTOSEND = "412",
182 	///
183 	ERR_NOTOPLEVEL = "413",
184 	///
185 	ERR_WILDTOPLEVEL = "414",
186 	///
187 	ERR_UNKNOWNCOMMAND = "421",
188 	///
189 	ERR_NOMOTD = "422",
190 	///
191 	ERR_NOADMININFO = "423",
192 	///
193 	ERR_FILEERROR = "424",
194 	///
195 	ERR_NONICKNAMEGIVEN = "431",
196 	///
197 	ERR_ERRONEUSNICKNAME = "432",
198 	///
199 	ERR_NICKNAMEINUSE = "433",
200 	///
201 	ERR_NICKCOLLISION = "436",
202 	///
203 	ERR_USERNOTINCHANNEL = "441",
204 	///
205 	ERR_NOTONCHANNEL = "442",
206 	///
207 	ERR_USERONCHANNEL = "443",
208 	///
209 	ERR_NOLOGIN = "444",
210 	///
211 	ERR_SUMMONDISABLED = "445",
212 	///
213 	ERR_USERSDISABLED = "446",
214 	///
215 	ERR_NOTREGISTERED = "451",
216 	///
217 	ERR_NEEDMOREPARAMS = "461",
218 	///
219 	ERR_ALREADYREGISTRED = "462",
220 	///
221 	ERR_NOPERMFORHOST = "463",
222 	///
223 	ERR_PASSWDMISMATCH = "464",
224 	///
225 	ERR_YOUREBANNEDCREEP = "465",
226 	///
227 	ERR_KEYSET = "467",
228 	///
229 	ERR_CHANNELISFULL = "471",
230 	///
231 	ERR_UNKNOWNMODE = "472",
232 	///
233 	ERR_INVITEONLYCHAN = "473",
234 	///
235 	ERR_BANNEDFROMCHAN = "474",
236 	///
237 	ERR_BADCHANNELKEY = "475",
238 	///
239 	ERR_NOPRIVILEGES = "481",
240 	///
241 	ERR_CHANOPRIVSNEEDED = "482",
242 	///
243 	ERR_CANTKILLSERVER = "483",
244 	///
245 	ERR_NOOPERHOST = "491",
246 	///
247 	ERR_UMODEUNKNOWNFLAG = "501",
248 	///
249 	ERR_USERSDONTMATCH = "502",
250 	//RFC1459 Reserved: https://tools.ietf.org/html/rfc1459#section-6.3
251 	//Obsolete or reserved for "future use"
252 	///
253 	RPL_STATSQLINE = "217",
254 	///
255 	RPL_SERVICEINFO = "231",
256 	///
257 	RPL_ENDOFSERVICES = "232",
258 	///
259 	RPL_SERVICE = "233",
260 	///
261 	RPL_WHOISCHANOP = "316",
262 	///
263 	RPL_KILLDONE = "361",
264 	///
265 	RPL_CLOSING = "362",
266 	///
267 	RPL_CLOSEEND = "363",
268 	///
269 	RPL_INFOSTART = "373",
270 	///
271 	RPL_MYPORTIS = "384",
272 	///
273 	ERR_NOSERVICEHOST = "492",
274 	//RFC2812 Command responses: https://tools.ietf.org/html/rfc2812#section-5.1
275 	///<client> :Welcome to the Internet Relay Network <nick>!<user>@<host>
276 	RPL_WELCOME = "001",
277 	///<client> :Your host is <servername>, running version <version>
278 	RPL_YOURHOST = "002",
279 	///<client> :This server was created <date>
280 	RPL_CREATED = "003",
281 	///<client> <server_name> <version> <usermodes> <chanmodes> [chanmodes_with_a_parameter]
282 	RPL_MYINFO = "004",
283 	///<client> :Try server <server_name>, port <port_number>
284 	RPL_BOUNCE = "005",
285 	///<client> Service <class> <name> <type> <active_type>
286 	RPL_TRACESERVICE = "207",
287 	///<client> Class <class> <count>
288 	RPL_TRACECLASS = "209",
289 	///<client> <name> <server> <mask> <type> <hopcount> <info>
290 	RPL_SERVLIST = "234",
291 	///<client> <mask> <type> :<info>
292 	RPL_SERVLISTEND = "235",
293 	///???
294 	RPL_TRACEEND = "262",
295 	///<client> <server_name> <version>[.<debug_level>] :<info>
296 	RPL_TRYAGAIN = "263",
297 	///<client> <channel> <nickname>
298 	RPL_UNIQOPIS = "325",
299 	///<client> <channel> <invitemask>
300 	RPL_INVITELIST = "346",
301 	///<client> <channel> :<info>
302 	RPL_ENDOFINVITELIST = "347",
303 	///<client> <channel> <exceptionmask> [<who> <set-ts>]
304 	RPL_EXCEPTLIST = "348",
305 	///<client> <channel> :<info>
306 	RPL_ENDOFEXCEPTLIST = "349",
307 	//RFC2812 Errors: https://tools.ietf.org/html/rfc2812#section-5.2
308 	///
309 	ERR_NOSUCHSERVICE = "408",
310 	///
311 	ERR_BADMASK = "415",
312 	///
313 	ERR_TOOMANYMATCHES = "416", //Errata
314 	///
315 	ERR_UNAVAILRESOURCE = "437",
316 	///
317 	ERR_YOUWILLBEBANNED = "466",
318 	///
319 	ERR_BADCHANMASK = "476",
320 	///
321 	ERR_NOCHANMODES = "477",
322 	///
323 	ERR_BANLISTFULL = "478",
324 	///
325 	ERR_RESTRICTED = "484",
326 	///
327 	ERR_UNIQOPPRIVSNEEDED = "485",
328 	//RFC2812 Reserved: https://tools.ietf.org/html/rfc2812#section-5.3
329 	///
330 	RPL_STATSVLINE = "240",
331 	///
332 	RPL_STATSSLINE = "245", //244 in original doc, 245 in errata
333 	///
334 	RPL_STATSPING = "246",
335 	///
336 	RPL_STATSBLINE = "247",
337 	///
338 	RPL_STATSDLINE = "250",
339 	//Monitor: http://ircv3.net/specs/core/monitor-3.2.html
340 	///
341 	RPL_MONONLINE = "730",
342 	///
343 	RPL_MONOFFLINE = "731",
344 	///
345 	RPL_MONLIST = "732",
346 	///
347 	RPL_ENDOFMONLIST = "733",
348 	///
349 	ERR_MONLISTFULL = "734",
350 	//Metadata: WIP
351 	///	<Target> <Key> <Visibility> :<Value>
352 	RPL_WHOISKEYVALUE = "760",
353 	///	<Target> <Key> <Visibility>[ :<Value>]
354 	RPL_KEYVALUE = "761",
355 	///	<Target> <Key> :key not set
356 	RPL_KEYNOTSET = "766",
357 	/// :<Key1> [<Key2> ...]
358 	RPL_METADATASUBOK = "770",
359 	/// :<Key1> [<Key2> ...]
360 	RPL_METADATAUNSUBOK = "771",
361 	/// :<Key1> [<Key2> ...]
362 	RPL_METADATASUBS = "772",
363 	///	<Target> [<RetryAfter>]
364 	ERR_METADATASYNCLATER = "774",
365 	//SASL: http://ircv3.net/specs/extensions/sasl-3.1.html
366 	///
367 	RPL_LOGGEDIN = "900",
368 	///
369 	RPL_LOGGEDOUT = "901",
370 	///
371 	ERR_NICKLOCKED = "902",
372 	///
373 	RPL_SASLSUCCESS = "903",
374 	///
375 	ERR_SASLFAIL = "904",
376 	///
377 	ERR_SASLTOOLONG = "905",
378 	///
379 	ERR_SASLABORTED = "906",
380 	///
381 	ERR_SASLALREADY = "907",
382 	///
383 	RPL_SASLMECHS = "908",
384 	//STARTTLS: http://ircv3.net/specs/extensions/tls-3.1.html
385 	///
386 	RPL_STARTTLS = "670",
387 	///
388 	ERR_STARTTLS = "691",
389 	//IRCX: http://tools.ietf.org/id/draft-pfenning-irc-extensions-04.txt
390 	//Pretty uncommon, but included for completeness
391 	///
392 	IRCRPL_IRCX = "800",
393 	///
394 	IRCRPL_ACCESSADD = "801",
395 	///
396 	IRCRPL_ACCESSDELETE = "802",
397 	///
398 	IRCRPL_ACCESSSTART = "803",
399 	///
400 	IRCRPL_ACCESSLIST = "804",
401 	///
402 	IRCRPL_ACCESSEND = "805",
403 	///
404 	IRCRPL_EVENTADD = "806",
405 	///
406 	IRCRPL_EVENTDEL = "807",
407 	///
408 	IRCRPL_EVENTSTART = "808",
409 	///
410 	IRCRPL_EVENTLIST = "809",
411 	///
412 	IRCRPL_EVENTEND = "810",
413 	///
414 	IRCRPL_LISTXSTART = "811",
415 	///
416 	IRCRPL_LISTXLIST = "812",
417 	///
418 	IRCRPL_LISTXPICS = "813",
419 	///
420 	IRCRPL_LISTXTRUNC = "816",
421 	///
422 	IRCRPL_LISTXEND = "817",
423 	///
424 	IRCRPL_PROPLIST = "818",
425 	///
426 	IRCRPL_PROPEND = "819",
427 	///
428 	IRCERR_BADCOMMAND = "900",
429 	///
430 	IRCERR_TOOMANYARGUMENTS = "901",
431 	///
432 	IRCERR_BADFUNCTION = "902",
433 	///
434 	IRCERR_BADLEVEL = "903",
435 	///
436 	IRCERR_BADTAG = "904",
437 	///
438 	IRCERR_BADPROPERTY = "905",
439 	///
440 	IRCERR_BADVALUE = "906",
441 	///
442 	IRCERR_RESOURCE = "907",
443 	///
444 	IRCERR_SECURITY = "908",
445 	///
446 	IRCERR_ALREADYAUTHENTICATED = "909",
447 	///
448 	IRCERR_AUTHENTICATIONFAILED = "910",
449 	///
450 	IRCERR_AUTHENTICATIONSUSPENDED = "911",
451 	///
452 	IRCERR_UNKNOWNPACKAGE = "912",
453 	///
454 	IRCERR_NOACCESS = "913",
455 	///
456 	IRCERR_DUPACCESS = "914",
457 	///
458 	IRCERR_MISACCESS = "915",
459 	///
460 	IRCERR_TOOMANYACCESSES = "916",
461 	///
462 	IRCERR_EVENTDUP = "918",
463 	///
464 	IRCERR_EVENTMIS = "919",
465 	///
466 	IRCERR_NOSUCHEVENT = "920",
467 	///
468 	IRCERR_TOOMANYEVENTS = "921",
469 	///
470 	IRCERR_NOWHISPER = "923",
471 	///
472 	IRCERR_NOSUCHOBJECT = "924",
473 	///
474 	IRCERR_NOTSUPPORTED = "925",
475 	///
476 	IRCERR_CHANNELEXIST = "926",
477 	///
478 	IRCERR_ALREADYONCHANNEL = "927",
479 	///
480 	IRCERR_UNKNOWNERROR = "999",
481 	//WATCH: https://github.com/grawity/irc-docs/blob/master/client/draft-meglio-irc-watch-00.txt
482 	///
483 	RPL_GONEAWAY = "598",
484 	///
485 	RPL_NOTAWAY = "599",
486 	///
487 	RPL_LOGON = "600",
488 	///
489 	RPL_LOGOFF = "601",
490 	///
491 	RPL_WATCHOFF = "602",
492 	///
493 	RPL_WATCHSTAT = "603",
494 	///
495 	RPL_NOWON = "604",
496 	///
497 	RPL_NOWOFF = "605",
498 	///
499 	RPL_WATCHLIST = "606",
500 	///
501 	RPL_ENDOFWATCHLIST = "607",
502 	///
503 	RPL_CLEARWATCH = "608",
504 	///
505 	RPL_NOWISAWAY = "609",
506 	//Misc
507 	///
508 	RPL_TEXT = "304",
509 	//Unknown origin, but in use
510 	///
511 	RPL_YOURID = "042",
512 	///
513 	RPL_LOCALUSERS = "265",
514 	///
515 	RPL_GLOBALUSERS = "266",
516 	/// <nick> :has client certificate fingerprint <fingerprint>
517 	RPL_WHOISCERTFP = "276",
518 	///
519 	RPL_WHOISREGNICK = "307",
520 	///
521 	RPL_WHOISACCOUNT = "330",
522 	///
523 	RPL_TOPICWHOTIME = "333",
524 	///
525 	RPL_WHOISHOST = "378",
526 	/// <nick> :is using modes <modestring>
527 	RPL_WHOISMODE = "379",
528 	///
529 	RPL_HOSTHIDDEN = "396",
530 	///
531 	RPL_WHOISSECURE = "671",
532 	///
533 	ERR_NOPRIVS = "723",
534 	//ISUPPORT: http://www.irc.org/tech_docs/draft-brocklesby-irc-isupport-03.txt
535 	///
536 	RPL_ISUPPORT = "005"
537 }
538 alias noInformationNumerics = AliasSeq!(
539 	Numeric.RPL_WELCOME,
540 	Numeric.RPL_YOURHOST,
541 	Numeric.RPL_CREATED,
542 
543 	Numeric.RPL_YOURID,
544 	Numeric.RPL_LOCALUSERS,
545 	Numeric.RPL_GLOBALUSERS,
546 	Numeric.RPL_HOSTHIDDEN,
547 
548 	listEndNumerics,
549 	listStartNumerics
550 );
551 alias listStartNumerics =AliasSeq!(
552 	Numeric.RPL_LISTSTART
553 );
554 alias listEndNumerics =AliasSeq!(
555 	Numeric.RPL_LISTEND,
556 	Numeric.RPL_ENDOFNAMES,
557 	Numeric.RPL_ENDOFMONLIST
558 );