omlish 0.0.0.dev220__py3-none-any.whl → 0.0.0.dev222__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. omlish/__about__.py +2 -2
  2. omlish/algorithm/all.py +13 -0
  3. omlish/algorithm/distribute.py +46 -0
  4. omlish/algorithm/toposort.py +26 -0
  5. omlish/algorithm/unify.py +31 -0
  6. omlish/collections/__init__.py +0 -2
  7. omlish/collections/utils.py +0 -46
  8. omlish/graphs/trees.py +2 -1
  9. omlish/http/coro/server.py +42 -33
  10. omlish/http/{simple.py → coro/simple.py} +17 -17
  11. omlish/specs/irc/__init__.py +0 -0
  12. omlish/specs/irc/format/LICENSE +11 -0
  13. omlish/specs/irc/format/__init__.py +61 -0
  14. omlish/specs/irc/format/consts.py +6 -0
  15. omlish/specs/irc/format/errors.py +30 -0
  16. omlish/specs/irc/format/message.py +18 -0
  17. omlish/specs/irc/format/nuh.py +52 -0
  18. omlish/specs/irc/format/parsing.py +155 -0
  19. omlish/specs/irc/format/rendering.py +150 -0
  20. omlish/specs/irc/format/tags.py +99 -0
  21. omlish/specs/irc/format/utils.py +27 -0
  22. omlish/specs/irc/numerics/__init__.py +0 -0
  23. omlish/specs/irc/numerics/formats.py +94 -0
  24. omlish/specs/irc/numerics/numerics.py +808 -0
  25. omlish/specs/irc/numerics/types.py +59 -0
  26. {omlish-0.0.0.dev220.dist-info → omlish-0.0.0.dev222.dist-info}/METADATA +1 -1
  27. {omlish-0.0.0.dev220.dist-info → omlish-0.0.0.dev222.dist-info}/RECORD +32 -15
  28. omlish/docker/oci/data.py +0 -71
  29. omlish/docker/oci/media.py +0 -124
  30. /omlish/{docker/oci → algorithm}/__init__.py +0 -0
  31. {omlish-0.0.0.dev220.dist-info → omlish-0.0.0.dev222.dist-info}/LICENSE +0 -0
  32. {omlish-0.0.0.dev220.dist-info → omlish-0.0.0.dev222.dist-info}/WHEEL +0 -0
  33. {omlish-0.0.0.dev220.dist-info → omlish-0.0.0.dev222.dist-info}/entry_points.txt +0 -0
  34. {omlish-0.0.0.dev220.dist-info → omlish-0.0.0.dev222.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,808 @@
1
+ from .types import NumericReplies
2
+ from .types import NumericReply
3
+
4
+
5
+ ##
6
+
7
+
8
+ _REGISTERED_NUMERIC_REPLIES: list[NumericReply] = []
9
+
10
+
11
+ def _register_numeric_reply(
12
+ name: str,
13
+ num: int,
14
+ *formats: str,
15
+ ) -> NumericReply:
16
+ nr = NumericReply(
17
+ name,
18
+ num,
19
+ formats,
20
+ )
21
+ _REGISTERED_NUMERIC_REPLIES.append(nr)
22
+ return nr
23
+
24
+
25
+ ##
26
+
27
+
28
+ RPL_WELCOME = _register_numeric_reply(
29
+ 'RPL_WELCOME',
30
+ 1,
31
+ '<client> :Welcome to the <networkname> Network, <nick>[!<user>@<host>]',
32
+ )
33
+
34
+ RPL_YOURHOST = _register_numeric_reply(
35
+ 'RPL_YOURHOST',
36
+ 2,
37
+ '<client> :Your host is <servername>, running version <version>',
38
+ )
39
+
40
+ RPL_CREATED = _register_numeric_reply(
41
+ 'RPL_CREATED',
42
+ 3,
43
+ '<client> :This server was created <datetime>',
44
+ )
45
+
46
+ RPL_MYINFO = _register_numeric_reply(
47
+ 'RPL_MYINFO',
48
+ 4,
49
+ '<client> <servername> <version> <available user modes> <available channel modes> [<channel modes with a parameter>]', # noqa
50
+ )
51
+
52
+ RPL_ISUPPORT = _register_numeric_reply(
53
+ 'RPL_ISUPPORT',
54
+ 5,
55
+ '<client> <1-13 tokens> :are supported by this server',
56
+ )
57
+
58
+ RPL_BOUNCE = _register_numeric_reply(
59
+ 'RPL_BOUNCE',
60
+ 10,
61
+ '<client> <hostname> <port> :<info>',
62
+ )
63
+
64
+ RPL_STATSCOMMANDS = _register_numeric_reply(
65
+ 'RPL_STATSCOMMANDS',
66
+ 212,
67
+ '<client> <command> <count> [<byte count> <remote count>]',
68
+ )
69
+
70
+ RPL_ENDOFSTATS = _register_numeric_reply(
71
+ 'RPL_ENDOFSTATS',
72
+ 219,
73
+ '<client> <stats letter> :End of /STATS report',
74
+ )
75
+
76
+ RPL_UMODEIS = _register_numeric_reply(
77
+ 'RPL_UMODEIS',
78
+ 221,
79
+ '<client> <user modes>',
80
+ )
81
+
82
+ RPL_STATSUPTIME = _register_numeric_reply(
83
+ 'RPL_STATSUPTIME',
84
+ 242,
85
+ '<client> :Server Up <days> days <hours>:<minutes>:<seconds>',
86
+ )
87
+
88
+ RPL_LUSERCLIENT = _register_numeric_reply(
89
+ 'RPL_LUSERCLIENT',
90
+ 251,
91
+ '<client> :There are <u> users and <i> invisible on <s> servers',
92
+ )
93
+
94
+ RPL_LUSEROP = _register_numeric_reply(
95
+ 'RPL_LUSEROP',
96
+ 252,
97
+ '<client> <ops> :operator(s) online',
98
+ )
99
+
100
+ RPL_LUSERUNKNOWN = _register_numeric_reply(
101
+ 'RPL_LUSERUNKNOWN',
102
+ 253,
103
+ '<client> <connections> :unknown connection(s)',
104
+ )
105
+
106
+ RPL_LUSERCHANNELS = _register_numeric_reply(
107
+ 'RPL_LUSERCHANNELS',
108
+ 254,
109
+ '<client> <channels> :channels formed',
110
+ )
111
+
112
+ RPL_LUSERME = _register_numeric_reply(
113
+ 'RPL_LUSERME',
114
+ 255,
115
+ '<client> :I have <c> clients and <s> servers',
116
+ )
117
+
118
+ RPL_ADMINME = _register_numeric_reply(
119
+ 'RPL_ADMINME',
120
+ 256,
121
+ '<client> [<server>] :Administrative info',
122
+ )
123
+
124
+ RPL_ADMINLOC1 = _register_numeric_reply(
125
+ 'RPL_ADMINLOC1',
126
+ 257,
127
+ '<client> :<info>',
128
+ )
129
+
130
+ RPL_ADMINLOC2 = _register_numeric_reply(
131
+ 'RPL_ADMINLOC2',
132
+ 258,
133
+ '<client> :<info>',
134
+ )
135
+
136
+ RPL_ADMINEMAIL = _register_numeric_reply(
137
+ 'RPL_ADMINEMAIL',
138
+ 259,
139
+ '<client> :<info>',
140
+ )
141
+
142
+ RPL_TRYAGAIN = _register_numeric_reply(
143
+ 'RPL_TRYAGAIN',
144
+ 263,
145
+ '<client> <command> :Please wait a while and try again.',
146
+ )
147
+
148
+ RPL_LOCALUSERS = _register_numeric_reply(
149
+ 'RPL_LOCALUSERS',
150
+ 265,
151
+ '<client> [<u> <m>] :Current local users <u>, max <m>',
152
+ )
153
+
154
+ RPL_GLOBALUSERS = _register_numeric_reply(
155
+ 'RPL_GLOBALUSERS',
156
+ 266,
157
+ '<client> [<u> <m>] :Current global users <u>, max <m>',
158
+ )
159
+
160
+ RPL_WHOISCERTFP = _register_numeric_reply(
161
+ 'RPL_WHOISCERTFP',
162
+ 276,
163
+ '<client> <nick> :has client certificate fingerprint <fingerprint>',
164
+ )
165
+
166
+ RPL_NONE = _register_numeric_reply(
167
+ 'RPL_NONE',
168
+ 300,
169
+ )
170
+
171
+ RPL_AWAY = _register_numeric_reply(
172
+ 'RPL_AWAY',
173
+ 301,
174
+ '<client> <nick> :<message>',
175
+ )
176
+
177
+ RPL_USERHOST = _register_numeric_reply(
178
+ 'RPL_USERHOST',
179
+ 302,
180
+ '<client> :[<reply>{ <reply>}]',
181
+ )
182
+
183
+ RPL_UNAWAY = _register_numeric_reply(
184
+ 'RPL_UNAWAY',
185
+ 305,
186
+ '<client> :You are no longer marked as being away',
187
+ )
188
+
189
+ RPL_NOWAWAY = _register_numeric_reply(
190
+ 'RPL_NOWAWAY',
191
+ 306,
192
+ '<client> :You have been marked as being away',
193
+ )
194
+
195
+ RPL_WHOISREGNICK = _register_numeric_reply(
196
+ 'RPL_WHOISREGNICK',
197
+ 307,
198
+ '<client> <nick> :has identified for this nick',
199
+ )
200
+
201
+ RPL_WHOISUSER = _register_numeric_reply(
202
+ 'RPL_WHOISUSER',
203
+ 311,
204
+ '<client> <nick> <username> <host> * :<realname>',
205
+ )
206
+
207
+ RPL_WHOISSERVER = _register_numeric_reply(
208
+ 'RPL_WHOISSERVER',
209
+ 312,
210
+ '<client> <nick> <server> :<server info>',
211
+ )
212
+
213
+ RPL_WHOISOPERATOR = _register_numeric_reply(
214
+ 'RPL_WHOISOPERATOR',
215
+ 313,
216
+ '<client> <nick> :is an IRC operator',
217
+ )
218
+
219
+ RPL_WHOWASUSER = _register_numeric_reply(
220
+ 'RPL_WHOWASUSER',
221
+ 314,
222
+ '<client> <nick> <username> <host> * :<realname>',
223
+ )
224
+
225
+ RPL_ENDOFWHO = _register_numeric_reply(
226
+ 'RPL_ENDOFWHO',
227
+ 315,
228
+ '<client> <mask> :End of WHO list',
229
+ )
230
+
231
+ RPL_WHOISIDLE = _register_numeric_reply(
232
+ 'RPL_WHOISIDLE',
233
+ 317,
234
+ '<client> <nick> <secs> <signon> :seconds idle, signon time',
235
+ )
236
+
237
+ RPL_ENDOFWHOIS = _register_numeric_reply(
238
+ 'RPL_ENDOFWHOIS',
239
+ 318,
240
+ '<client> <nick> :End of /WHOIS list',
241
+ )
242
+
243
+ RPL_WHOISCHANNELS = _register_numeric_reply(
244
+ 'RPL_WHOISCHANNELS',
245
+ 319,
246
+ '<client> <nick> :[prefix]<channel>{ [prefix]<channel>}',
247
+ )
248
+
249
+ RPL_WHOISSPECIAL = _register_numeric_reply(
250
+ 'RPL_WHOISSPECIAL',
251
+ 320,
252
+ '<client> <nick> :blah blah blah',
253
+ )
254
+
255
+ RPL_LISTSTART = _register_numeric_reply(
256
+ 'RPL_LISTSTART',
257
+ 321,
258
+ '<client> Channel :Users Name',
259
+ )
260
+
261
+ RPL_LIST = _register_numeric_reply(
262
+ 'RPL_LIST',
263
+ 322,
264
+ '<client> <channel> <client count> :<topic>',
265
+ )
266
+
267
+ RPL_LISTEND = _register_numeric_reply(
268
+ 'RPL_LISTEND',
269
+ 323,
270
+ '<client> :End of /LIST',
271
+ )
272
+
273
+ RPL_CHANNELMODEIS = _register_numeric_reply(
274
+ 'RPL_CHANNELMODEIS',
275
+ 324,
276
+ '<client> <channel> <modestring> <mode arguments>...',
277
+ )
278
+
279
+ RPL_CREATIONTIME = _register_numeric_reply(
280
+ 'RPL_CREATIONTIME',
281
+ 329,
282
+ '<client> <channel> <creationtime>',
283
+ )
284
+
285
+ RPL_WHOISACCOUNT = _register_numeric_reply(
286
+ 'RPL_WHOISACCOUNT',
287
+ 330,
288
+ '<client> <nick> <account> :is logged in as',
289
+ )
290
+
291
+ RPL_NOTOPIC = _register_numeric_reply(
292
+ 'RPL_NOTOPIC',
293
+ 331,
294
+ '<client> <channel> :No topic is set',
295
+ )
296
+
297
+ RPL_TOPIC = _register_numeric_reply(
298
+ 'RPL_TOPIC',
299
+ 332,
300
+ '<client> <channel> :<topic>',
301
+ )
302
+
303
+ RPL_TOPICWHOTIME = _register_numeric_reply(
304
+ 'RPL_TOPICWHOTIME',
305
+ 333,
306
+ '<client> <channel> <nick> <setat>',
307
+ )
308
+
309
+ RPL_INVITELIST = _register_numeric_reply(
310
+ 'RPL_INVITELIST',
311
+ 336,
312
+ '<client> <channel>',
313
+ )
314
+
315
+ RPL_ENDOFINVITELIST = _register_numeric_reply(
316
+ 'RPL_ENDOFINVITELIST',
317
+ 337,
318
+ '<client> :End of /INVITE list',
319
+ )
320
+
321
+ RPL_WHOISACTUALLY = _register_numeric_reply(
322
+ 'RPL_WHOISACTUALLY',
323
+ 338,
324
+ '<client> <nick> :is actually ...',
325
+ '<client> <nick> <host|ip> :Is actually using host',
326
+ '<client> <nick> <username>@<hostname> <ip> :Is actually using host',
327
+ )
328
+
329
+ RPL_INVITING = _register_numeric_reply(
330
+ 'RPL_INVITING',
331
+ 341,
332
+ '<client> <nick> <channel>',
333
+ )
334
+
335
+ RPL_INVEXLIST = _register_numeric_reply(
336
+ 'RPL_INVEXLIST',
337
+ 346,
338
+ '<client> <channel> <mask>',
339
+ )
340
+
341
+ RPL_ENDOFINVEXLIST = _register_numeric_reply(
342
+ 'RPL_ENDOFINVEXLIST',
343
+ 347,
344
+ '<client> <channel> :End of Channel Invite Exception List',
345
+ )
346
+ RPL_EXCEPTLIST = _register_numeric_reply(
347
+ 'RPL_EXCEPTLIST',
348
+ 348,
349
+ '<client> <channel> <mask>',
350
+ )
351
+
352
+ RPL_ENDOFEXCEPTLIST = _register_numeric_reply(
353
+ 'RPL_ENDOFEXCEPTLIST',
354
+ 349,
355
+ '<client> <channel> :End of channel exception list',
356
+ )
357
+
358
+ RPL_VERSION = _register_numeric_reply(
359
+ 'RPL_VERSION',
360
+ 351,
361
+ '<client> <version> <server> :<comments>',
362
+ )
363
+
364
+ RPL_WHOREPLY = _register_numeric_reply(
365
+ 'RPL_WHOREPLY',
366
+ 352,
367
+ '<client> <channel> <username> <host> <server> <nick> <flags> :<hopcount> <realname>',
368
+ )
369
+ RPL_NAMREPLY = _register_numeric_reply(
370
+ 'RPL_NAMREPLY',
371
+ 353,
372
+ '<client> <symbol> <channel> :[prefix]<nick>{ [prefix]<nick>}',
373
+ )
374
+
375
+ RPL_LINKS = _register_numeric_reply(
376
+ 'RPL_LINKS',
377
+ 364,
378
+ '<client> * <server> :<hopcount> <server info>',
379
+ )
380
+
381
+ RPL_ENDOFLINKS = _register_numeric_reply(
382
+ 'RPL_ENDOFLINKS',
383
+ 365,
384
+ '<client> * :End of /LINKS list',
385
+ )
386
+
387
+ RPL_ENDOFNAMES = _register_numeric_reply(
388
+ 'RPL_ENDOFNAMES',
389
+ 366,
390
+ '<client> <channel> :End of /NAMES list',
391
+ )
392
+
393
+ RPL_BANLIST = _register_numeric_reply(
394
+ 'RPL_BANLIST',
395
+ 367,
396
+ '<client> <channel> <mask> [<who> <set-ts>]',
397
+ )
398
+
399
+ RPL_ENDOFBANLIST = _register_numeric_reply(
400
+ 'RPL_ENDOFBANLIST',
401
+ 368,
402
+ '<client> <channel> :End of channel ban list',
403
+ )
404
+
405
+ RPL_ENDOFWHOWAS = _register_numeric_reply(
406
+ 'RPL_ENDOFWHOWAS',
407
+ 369,
408
+ '<client> <nick> :End of WHOWAS',
409
+ )
410
+
411
+ RPL_INFO = _register_numeric_reply(
412
+ 'RPL_INFO',
413
+ 371,
414
+ '<client> :<string>',
415
+ )
416
+
417
+ RPL_MOTD = _register_numeric_reply(
418
+ 'RPL_MOTD',
419
+ 372,
420
+ '<client> :<line of the motd>',
421
+ )
422
+
423
+ RPL_ENDOFINFO = _register_numeric_reply(
424
+ 'RPL_ENDOFINFO',
425
+ 374,
426
+ '<client> :End of INFO list',
427
+ )
428
+
429
+ RPL_MOTDSTART = _register_numeric_reply(
430
+ 'RPL_MOTDSTART',
431
+ 375,
432
+ '<client> :- <server> Message of the day - ',
433
+ )
434
+
435
+ RPL_ENDOFMOTD = _register_numeric_reply(
436
+ 'RPL_ENDOFMOTD',
437
+ 376,
438
+ '<client> :End of /MOTD command.',
439
+ )
440
+
441
+ RPL_WHOISHOST = _register_numeric_reply(
442
+ 'RPL_WHOISHOST',
443
+ 378,
444
+ '<client> <nick> :is connecting from *@localhost 127.0.0.1',
445
+ )
446
+
447
+ RPL_WHOISMODES = _register_numeric_reply(
448
+ 'RPL_WHOISMODES',
449
+ 379,
450
+ '<client> <nick> :is using modes +ailosw',
451
+ )
452
+
453
+ RPL_YOUREOPER = _register_numeric_reply(
454
+ 'RPL_YOUREOPER',
455
+ 381,
456
+ '<client> :You are now an IRC operator',
457
+ )
458
+
459
+ RPL_REHASHING = _register_numeric_reply(
460
+ 'RPL_REHASHING',
461
+ 382,
462
+ '<client> <config file> :Rehashing',
463
+ )
464
+
465
+ RPL_TIME = _register_numeric_reply(
466
+ 'RPL_TIME',
467
+ 391,
468
+ '<client> <server> [<timestamp> [<TS offset>]] :<human-readable time>',
469
+ )
470
+
471
+ #
472
+
473
+ ERR_UNKNOWNERROR = _register_numeric_reply(
474
+ 'ERR_UNKNOWNERROR',
475
+ 400,
476
+ '<client> <command>{ <subcommand>} :<info>',
477
+ )
478
+
479
+ ERR_NOSUCHNICK = _register_numeric_reply(
480
+ 'ERR_NOSUCHNICK',
481
+ 401,
482
+ '<client> <nickname> :No such nick/channel',
483
+ )
484
+
485
+ ERR_NOSUCHSERVER = _register_numeric_reply(
486
+ 'ERR_NOSUCHSERVER',
487
+ 402,
488
+ '<client> <server name> :No such server',
489
+ )
490
+
491
+ ERR_NOSUCHCHANNEL = _register_numeric_reply(
492
+ 'ERR_NOSUCHCHANNEL',
493
+ 403,
494
+ '<client> <channel> :No such channel',
495
+ )
496
+
497
+ ERR_CANNOTSENDTOCHAN = _register_numeric_reply(
498
+ 'ERR_CANNOTSENDTOCHAN',
499
+ 404,
500
+ '<client> <channel> :Cannot send to channel',
501
+ )
502
+
503
+ ERR_TOOMANYCHANNELS = _register_numeric_reply(
504
+ 'ERR_TOOMANYCHANNELS',
505
+ 405,
506
+ '<client> <channel> :You have joined too many channels',
507
+ )
508
+
509
+ ERR_WASNOSUCHNICK = _register_numeric_reply(
510
+ 'ERR_WASNOSUCHNICK',
511
+ 406,
512
+ '<client> <nickname> :There was no such nickname',
513
+ )
514
+
515
+ ERR_NOORIGIN = _register_numeric_reply(
516
+ 'ERR_NOORIGIN',
517
+ 409,
518
+ '<client> :No origin specified',
519
+ )
520
+
521
+ ERR_NORECIPIENT = _register_numeric_reply(
522
+ 'ERR_NORECIPIENT',
523
+ 411,
524
+ '<client> :No recipient given (<command>)',
525
+ )
526
+
527
+ ERR_NOTEXTTOSEND = _register_numeric_reply(
528
+ 'ERR_NOTEXTTOSEND',
529
+ 412,
530
+ '<client> :No text to send',
531
+ )
532
+
533
+ ERR_INPUTTOOLONG = _register_numeric_reply(
534
+ 'ERR_INPUTTOOLONG',
535
+ 417,
536
+ '<client> :Input line was too long',
537
+ )
538
+
539
+ ERR_UNKNOWNCOMMAND = _register_numeric_reply(
540
+ 'ERR_UNKNOWNCOMMAND',
541
+ 421,
542
+ '<client> <command> :Unknown command',
543
+ )
544
+
545
+ ERR_NOMOTD = _register_numeric_reply(
546
+ 'ERR_NOMOTD',
547
+ 422,
548
+ '<client> :MOTD File is missing',
549
+ )
550
+
551
+ ERR_NONICKNAMEGIVEN = _register_numeric_reply(
552
+ 'ERR_NONICKNAMEGIVEN',
553
+ 431,
554
+ '<client> :No nickname given',
555
+ )
556
+
557
+ ERR_ERRONEUSNICKNAME = _register_numeric_reply(
558
+ 'ERR_ERRONEUSNICKNAME',
559
+ 432,
560
+ '<client> <nick> :Erroneus nickname',
561
+ )
562
+
563
+ ERR_NICKNAMEINUSE = _register_numeric_reply(
564
+ 'ERR_NICKNAMEINUSE',
565
+ 433,
566
+ '<client> <nick> :Nickname is already in use',
567
+ )
568
+
569
+ ERR_NICKCOLLISION = _register_numeric_reply(
570
+ 'ERR_NICKCOLLISION',
571
+ 436,
572
+ '<client> <nick> :Nickname collision KILL from <user>@<host>',
573
+ )
574
+
575
+ ERR_USERNOTINCHANNEL = _register_numeric_reply(
576
+ 'ERR_USERNOTINCHANNEL',
577
+ 441,
578
+ "<client> <nick> <channel> :They aren't on that channel",
579
+ )
580
+
581
+ ERR_NOTONCHANNEL = _register_numeric_reply(
582
+ 'ERR_NOTONCHANNEL',
583
+ 442,
584
+ "<client> <channel> :You're not on that channel",
585
+ )
586
+
587
+ ERR_USERONCHANNEL = _register_numeric_reply(
588
+ 'ERR_USERONCHANNEL',
589
+ 443,
590
+ '<client> <nick> <channel> :is already on channel',
591
+ )
592
+
593
+ ERR_NOTREGISTERED = _register_numeric_reply(
594
+ 'ERR_NOTREGISTERED',
595
+ 451,
596
+ '<client> :You have not registered',
597
+ )
598
+
599
+ ERR_NEEDMOREPARAMS = _register_numeric_reply(
600
+ 'ERR_NEEDMOREPARAMS',
601
+ 461,
602
+ '<client> <command> :Not enough parameters',
603
+ )
604
+
605
+ ERR_ALREADYREGISTERED = _register_numeric_reply(
606
+ 'ERR_ALREADYREGISTERED',
607
+ 462,
608
+ '<client> :You may not reregister',
609
+ )
610
+
611
+ ERR_PASSWDMISMATCH = _register_numeric_reply(
612
+ 'ERR_PASSWDMISMATCH',
613
+ 464,
614
+ '<client> :Password incorrect',
615
+ )
616
+
617
+ ERR_YOUREBANNEDCREEP = _register_numeric_reply(
618
+ 'ERR_YOUREBANNEDCREEP',
619
+ 465,
620
+ '<client> :You are banned from this server.',
621
+ )
622
+
623
+ ERR_CHANNELISFULL = _register_numeric_reply(
624
+ 'ERR_CHANNELISFULL',
625
+ 471,
626
+ '<client> <channel> :Cannot join channel (+l)',
627
+ )
628
+
629
+ ERR_UNKNOWNMODE = _register_numeric_reply(
630
+ 'ERR_UNKNOWNMODE',
631
+ 472,
632
+ '<client> <modechar> :is unknown mode char to me',
633
+ )
634
+
635
+ ERR_INVITEONLYCHAN = _register_numeric_reply(
636
+ 'ERR_INVITEONLYCHAN',
637
+ 473,
638
+ '<client> <channel> :Cannot join channel (+i)',
639
+ )
640
+
641
+ ERR_BANNEDFROMCHAN = _register_numeric_reply(
642
+ 'ERR_BANNEDFROMCHAN',
643
+ 474,
644
+ '<client> <channel> :Cannot join channel (+b)',
645
+ )
646
+
647
+ ERR_BADCHANNELKEY = _register_numeric_reply(
648
+ 'ERR_BADCHANNELKEY',
649
+ 475,
650
+ '<client> <channel> :Cannot join channel (+k)',
651
+ )
652
+
653
+ ERR_BADCHANMASK = _register_numeric_reply(
654
+ 'ERR_BADCHANMASK',
655
+ 476,
656
+ '<channel> :Bad Channel Mask',
657
+ )
658
+
659
+ ERR_NOPRIVILEGES = _register_numeric_reply(
660
+ 'ERR_NOPRIVILEGES',
661
+ 481,
662
+ "<client> :Permission Denied- You're not an IRC operator",
663
+ )
664
+
665
+ ERR_CHANOPRIVSNEEDED = _register_numeric_reply(
666
+ 'ERR_CHANOPRIVSNEEDED',
667
+ 482,
668
+ "<client> <channel> :You're not channel operator",
669
+ )
670
+
671
+ ERR_CANTKILLSERVER = _register_numeric_reply(
672
+ 'ERR_CANTKILLSERVER',
673
+ 483,
674
+ '<client> :You cant kill a server!',
675
+ )
676
+
677
+ ERR_NOOPERHOST = _register_numeric_reply(
678
+ 'ERR_NOOPERHOST',
679
+ 491,
680
+ '<client> :No O-lines for your host',
681
+ )
682
+
683
+ ERR_UMODEUNKNOWNFLAG = _register_numeric_reply(
684
+ 'ERR_UMODEUNKNOWNFLAG',
685
+ 501,
686
+ '<client> :Unknown MODE flag',
687
+ )
688
+
689
+ ERR_USERSDONTMATCH = _register_numeric_reply(
690
+ 'ERR_USERSDONTMATCH',
691
+ 502,
692
+ '<client> :Cant change mode for other users',
693
+ )
694
+
695
+ ERR_HELPNOTFOUND = _register_numeric_reply(
696
+ 'ERR_HELPNOTFOUND',
697
+ 524,
698
+ '<client> <subject> :No help available on this topic',
699
+ )
700
+
701
+ ERR_INVALIDKEY = _register_numeric_reply(
702
+ 'ERR_INVALIDKEY',
703
+ 525,
704
+ )
705
+
706
+ RPL_STARTTLS = _register_numeric_reply(
707
+ 'RPL_STARTTLS',
708
+ 670,
709
+ '<client> :STARTTLS successful, proceed with TLS handshake',
710
+ )
711
+
712
+ RPL_WHOISSECURE = _register_numeric_reply(
713
+ 'RPL_WHOISSECURE',
714
+ 671,
715
+ '<client> <nick> :is using a secure connection',
716
+ )
717
+
718
+ ERR_STARTTLS = _register_numeric_reply(
719
+ 'ERR_STARTTLS',
720
+ 691,
721
+ '<client> :STARTTLS failed (Wrong moon phase)',
722
+ )
723
+
724
+ ERR_INVALIDMODEPARAM = _register_numeric_reply(
725
+ 'ERR_INVALIDMODEPARAM',
726
+ 696,
727
+ )
728
+
729
+ RPL_HELPSTART = _register_numeric_reply(
730
+ 'RPL_HELPSTART',
731
+ 704,
732
+ )
733
+
734
+ RPL_HELPTXT = _register_numeric_reply(
735
+ 'RPL_HELPTXT',
736
+ 705,
737
+ )
738
+
739
+ RPL_ENDOFHELP = _register_numeric_reply(
740
+ 'RPL_ENDOFHELP',
741
+ 706,
742
+ )
743
+
744
+ ERR_NOPRIVS = _register_numeric_reply(
745
+ 'ERR_NOPRIVS',
746
+ 723,
747
+ '<client> <priv> :Insufficient oper privileges.',
748
+ )
749
+
750
+ RPL_LOGGEDIN = _register_numeric_reply(
751
+ 'RPL_LOGGEDIN',
752
+ 900,
753
+ '<client> <nick>!<user>@<host> <account> :You are now logged in as <username>',
754
+ )
755
+
756
+ RPL_LOGGEDOUT = _register_numeric_reply(
757
+ 'RPL_LOGGEDOUT',
758
+ 901,
759
+ '<client> <nick>!<user>@<host> :You are now logged out',
760
+ )
761
+
762
+ ERR_NICKLOCKED = _register_numeric_reply(
763
+ 'ERR_NICKLOCKED',
764
+ 902,
765
+ '<client> :You must use a nick assigned to you',
766
+ )
767
+
768
+ RPL_SASLSUCCESS = _register_numeric_reply(
769
+ 'RPL_SASLSUCCESS',
770
+ 903,
771
+ '<client> :SASL authentication successful',
772
+ )
773
+
774
+ ERR_SASLFAIL = _register_numeric_reply(
775
+ 'ERR_SASLFAIL',
776
+ 904,
777
+ '<client> :SASL authentication failed',
778
+ )
779
+
780
+ ERR_SASLTOOLONG = _register_numeric_reply(
781
+ 'ERR_SASLTOOLONG',
782
+ 905,
783
+ '<client> :SASL message too long',
784
+ )
785
+
786
+ ERR_SASLABORTED = _register_numeric_reply(
787
+ 'ERR_SASLABORTED',
788
+ 906,
789
+ '<client> :SASL authentication aborted',
790
+ )
791
+
792
+ ERR_SASLALREADY = _register_numeric_reply(
793
+ 'ERR_SASLALREADY',
794
+ 907,
795
+ '<client> :You have already authenticated using SASL',
796
+ )
797
+
798
+ RPL_SASLMECHS = _register_numeric_reply(
799
+ 'RPL_SASLMECHS',
800
+ 908,
801
+ '<client> <mechanisms> :are available SASL mechanisms',
802
+ )
803
+
804
+
805
+ ##
806
+
807
+
808
+ NUMERIC_REPLIES = NumericReplies(_REGISTERED_NUMERIC_REPLIES)