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

Sign up to get free protection for your applications and to get access to all the features.
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)