autumn 3.1.8

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 (111) hide show
  1. data/AUTHORS +11 -0
  2. data/CHANGELOG +567 -0
  3. data/MANIFEST +110 -0
  4. data/README +1114 -0
  5. data/README.textile +1153 -0
  6. data/Rakefile +75 -0
  7. data/autumn.gemspec +44 -0
  8. data/bin/autumn +11 -0
  9. data/lib/autumn.rb +8 -0
  10. data/lib/autumn/authentication.rb +238 -0
  11. data/lib/autumn/channel_leaf.rb +107 -0
  12. data/lib/autumn/coder.rb +166 -0
  13. data/lib/autumn/console_boot.rb +10 -0
  14. data/lib/autumn/ctcp.rb +250 -0
  15. data/lib/autumn/daemon.rb +207 -0
  16. data/lib/autumn/datamapper_hacks.rb +290 -0
  17. data/lib/autumn/foliater.rb +231 -0
  18. data/lib/autumn/formatting.rb +236 -0
  19. data/lib/autumn/generator.rb +231 -0
  20. data/lib/autumn/genesis.rb +190 -0
  21. data/lib/autumn/inheritable_attributes.rb +162 -0
  22. data/lib/autumn/leaf.rb +738 -0
  23. data/lib/autumn/log_facade.rb +49 -0
  24. data/lib/autumn/misc.rb +87 -0
  25. data/lib/autumn/resources/daemons/Anothernet.yml +3 -0
  26. data/lib/autumn/resources/daemons/AustHex.yml +29 -0
  27. data/lib/autumn/resources/daemons/Bahamut.yml +67 -0
  28. data/lib/autumn/resources/daemons/Dancer.yml +3 -0
  29. data/lib/autumn/resources/daemons/GameSurge.yml +3 -0
  30. data/lib/autumn/resources/daemons/IRCnet.yml +3 -0
  31. data/lib/autumn/resources/daemons/Ithildin.yml +7 -0
  32. data/lib/autumn/resources/daemons/KineIRCd.yml +56 -0
  33. data/lib/autumn/resources/daemons/PTlink.yml +6 -0
  34. data/lib/autumn/resources/daemons/QuakeNet.yml +20 -0
  35. data/lib/autumn/resources/daemons/RFC1459.yml +158 -0
  36. data/lib/autumn/resources/daemons/RFC2811.yml +16 -0
  37. data/lib/autumn/resources/daemons/RFC2812.yml +36 -0
  38. data/lib/autumn/resources/daemons/RatBox.yml +25 -0
  39. data/lib/autumn/resources/daemons/Ultimate.yml +24 -0
  40. data/lib/autumn/resources/daemons/Undernet.yml +6 -0
  41. data/lib/autumn/resources/daemons/Unreal.yml +110 -0
  42. data/lib/autumn/resources/daemons/_Other.yml +7 -0
  43. data/lib/autumn/resources/daemons/aircd.yml +33 -0
  44. data/lib/autumn/resources/daemons/bdq-ircd.yml +3 -0
  45. data/lib/autumn/resources/daemons/hybrid.yml +38 -0
  46. data/lib/autumn/resources/daemons/ircu.yml +67 -0
  47. data/lib/autumn/resources/daemons/tr-ircd.yml +8 -0
  48. data/lib/autumn/script.rb +74 -0
  49. data/lib/autumn/speciator.rb +165 -0
  50. data/lib/autumn/stem.rb +919 -0
  51. data/lib/autumn/stem_facade.rb +176 -0
  52. data/lib/autumn/tool/bin.rb +301 -0
  53. data/lib/autumn/tool/create.rb +48 -0
  54. data/lib/autumn/tool/project_creator.rb +110 -0
  55. data/lib/autumn/version.rb +3 -0
  56. data/lib/skel/Rakefile +163 -0
  57. data/lib/skel/config/global.yml +2 -0
  58. data/lib/skel/config/seasons/testing/database.yml +4 -0
  59. data/lib/skel/config/seasons/testing/leaves.yml +9 -0
  60. data/lib/skel/config/seasons/testing/season.yml +2 -0
  61. data/lib/skel/config/seasons/testing/stems.yml +10 -0
  62. data/lib/skel/leaves/administrator/README +20 -0
  63. data/lib/skel/leaves/administrator/controller.rb +67 -0
  64. data/lib/skel/leaves/administrator/views/autumn.txt.erb +1 -0
  65. data/lib/skel/leaves/administrator/views/reload.txt.erb +11 -0
  66. data/lib/skel/leaves/insulter/README +17 -0
  67. data/lib/skel/leaves/insulter/controller.rb +65 -0
  68. data/lib/skel/leaves/insulter/views/about.txt.erb +1 -0
  69. data/lib/skel/leaves/insulter/views/help.txt.erb +1 -0
  70. data/lib/skel/leaves/insulter/views/insult.txt.erb +1 -0
  71. data/lib/skel/leaves/scorekeeper/README +34 -0
  72. data/lib/skel/leaves/scorekeeper/config.yml +2 -0
  73. data/lib/skel/leaves/scorekeeper/controller.rb +104 -0
  74. data/lib/skel/leaves/scorekeeper/helpers/general.rb +64 -0
  75. data/lib/skel/leaves/scorekeeper/models/channel.rb +12 -0
  76. data/lib/skel/leaves/scorekeeper/models/person.rb +14 -0
  77. data/lib/skel/leaves/scorekeeper/models/pseudonym.rb +11 -0
  78. data/lib/skel/leaves/scorekeeper/models/score.rb +14 -0
  79. data/lib/skel/leaves/scorekeeper/tasks/stats.rake +17 -0
  80. data/lib/skel/leaves/scorekeeper/views/about.txt.erb +1 -0
  81. data/lib/skel/leaves/scorekeeper/views/change.txt.erb +5 -0
  82. data/lib/skel/leaves/scorekeeper/views/history.txt.erb +11 -0
  83. data/lib/skel/leaves/scorekeeper/views/points.txt.erb +5 -0
  84. data/lib/skel/leaves/scorekeeper/views/usage.txt.erb +1 -0
  85. data/lib/skel/log/README +1 -0
  86. data/lib/skel/script/console +28 -0
  87. data/lib/skel/script/destroy +48 -0
  88. data/lib/skel/script/generate +48 -0
  89. data/lib/skel/shared/README +1 -0
  90. data/lib/skel/tmp/README +1 -0
  91. data/spec/authentication_spec.rb +328 -0
  92. data/spec/channel_leaf_spec.rb +142 -0
  93. data/spec/coder_spec.rb +146 -0
  94. data/spec/ctcp_spec.rb +222 -0
  95. data/spec/daemon_spec.rb +202 -0
  96. data/spec/datamapper_hacks_spec.rb +164 -0
  97. data/tasks/authors.rake +30 -0
  98. data/tasks/changelog.rake +18 -0
  99. data/tasks/copyright.rake +21 -0
  100. data/tasks/doc.rake +7 -0
  101. data/tasks/gem.rake +23 -0
  102. data/tasks/gem_installer.rake +76 -0
  103. data/tasks/install_dependencies.rake +6 -0
  104. data/tasks/manifest.rake +4 -0
  105. data/tasks/rcov.rake +23 -0
  106. data/tasks/release.rake +52 -0
  107. data/tasks/reversion.rake +8 -0
  108. data/tasks/setup.rake +24 -0
  109. data/tasks/spec.rake +7 -0
  110. data/tasks/yard.rake +4 -0
  111. metadata +188 -0
@@ -0,0 +1,49 @@
1
+ # Defines the Autumn::LogFacade class, which makes it easier for Stems and
2
+ # Leaves to add their information to outgoing log messages.
3
+
4
+ module Autumn
5
+
6
+ # This class is a facade for Ruby's +Logger+ that adds additional information
7
+ # to log entries. LogFacade will pass any method calls onto a Logger instance,
8
+ # but reformat log entries to include an Autumn object's type and name.
9
+ #
10
+ # For example, if you wanted a LogFacade for a Leaf named "Scorekeeper", you
11
+ # could instantiate one:
12
+ #
13
+ # facade = LogFacade.new(logger, 'Leaf', 'Scorekeeper')
14
+ #
15
+ # And a call such as:
16
+ #
17
+ # facade.info "Starting up"
18
+ #
19
+ # Would be reformatted as "Scorekeeper (Leaf): Starting up".
20
+ #
21
+ # In addition, this class will log messages to STDOUT if the +debug+ global
22
+ # option is set. Instantiation of this class is handled by Genesis and should
23
+ # not normally be done by the user.
24
+
25
+ class LogFacade
26
+ # The Autumn object type (typically "Stem" or "Leaf").
27
+ attr :type
28
+ # The name of the Autumn object.
29
+ attr :name
30
+
31
+ # Creates a new facade for +logger+ that prepends type and name information
32
+ # to each log message.
33
+
34
+ def initialize(logger, type, name)
35
+ @type = type
36
+ @name = name
37
+ @logger = logger
38
+ @stdout = Speciator.instance.season(:logging) == 'debug'
39
+ end
40
+
41
+ def method_missing(meth, *args) # :nodoc:
42
+ if args.size == 1 and args.only.kind_of? String then
43
+ args = [ "#{name} (#{type}): #{args.only}" ]
44
+ end
45
+ @logger.send meth, *args
46
+ puts (args.first.kind_of?(Exception) ? (args.first.to_s + "\n" + args.first.backtrace.join("\n")) : args.first) if @stdout
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,87 @@
1
+ # Miscellaneous extra methods and objects used by Autumn, and additions to Ruby
2
+ # Core objects.
3
+
4
+ require 'thread'
5
+ require 'english/style'
6
+
7
+ class Numeric # :nodoc:
8
+
9
+ # Possibly pluralizes a noun based on this number's value. Returns this number
10
+ # and the noun as a string. This method attempts to use the Ruby English gem
11
+ # if available, and falls back on the very simple default of appending an "s"
12
+ # to the word to make it plural. If the Ruby English gem is not available, you
13
+ # can specify a custom plural form for the word. Examples:
14
+ #
15
+ # 5.pluralize('dog') #=> "5 dogs"
16
+ # 1.pluralize('car') #=> "1 car"
17
+ # 7.pluralize('mouse', 'mice') #=> "7 mice" (only necessary if Ruby English is not installed)
18
+
19
+ def pluralize(singular, plural=nil)
20
+ begin
21
+ return "#{to_s} #{self == 1 ? singular : singular.plural}"
22
+ rescue Gem::LoadError
23
+ plural ||= singular + 's'
24
+ return "#{to_s} #{(self == 1) ? singular : plural}"
25
+ end
26
+ end
27
+ end
28
+
29
+ class String # :nodoc:
30
+ include English::Style
31
+
32
+ # Returns a copy of this string with the first character dropped.
33
+
34
+ def except_first
35
+ self[1, size-1]
36
+ end
37
+ end
38
+
39
+ class Hash # :nodoc:
40
+
41
+ # Returns a hash that gives back the key if it has no value for that key.
42
+
43
+ def self.parroting(hsh={})
44
+ hsh ||= Hash.new
45
+ Hash.new { |h, k| k }.update(hsh)
46
+ end
47
+ end
48
+
49
+ # An implementation of +SizedQueue+ that, instead of blocking when the queue is
50
+ # full, simply discards the overflow, forgetting it.
51
+
52
+ class ForgetfulQueue < Queue # :nodoc:
53
+
54
+ # Creates a new sized queue.
55
+
56
+ def initialize(capacity)
57
+ @max = capacity
58
+ end
59
+
60
+ # Returns true if this queue is at maximum size.
61
+
62
+ def full?
63
+ size == @max
64
+ end
65
+
66
+ # Pushes an object onto the queue. If there is no space left on the queue,
67
+ # does nothing.
68
+
69
+ def push(obj)
70
+ Thread.exclusive { super unless full? }
71
+ end
72
+ alias_method :<<, :push
73
+ alias_method :enq, :push
74
+ end
75
+
76
+ # Adds the only method to Set.
77
+
78
+ class Set # :nodoc:
79
+
80
+ # Returns the only element of a one-element set. Raises an exception if there
81
+ # isn't exactly one element in the set.
82
+
83
+ def only
84
+ raise IndexError, "Set#only called on non-single-element set" unless size == 1
85
+ to_a.first
86
+ end
87
+ end
@@ -0,0 +1,3 @@
1
+ ---
2
+ event:
3
+ 320: :rpl_whois_hidden
@@ -0,0 +1,29 @@
1
+ ---
2
+ channel_mode:
3
+ e: :event
4
+ event:
5
+ 434: :err_servicenameinuse
6
+ 357: :rpl_map
7
+ 385: :rpl_notoperanymore
8
+ 380: :rpl_yourhelper
9
+ 358: :rpl_mapmore
10
+ 430: :err_eventnickchange
11
+ 320: :rpl_whoisvirt
12
+ 309: :rpl_whoishelper
13
+ 480: :err_nouline
14
+ 359: :rpl_mapend
15
+ 310: :rpl_whoisservice
16
+ 503: :err_vworldwarn
17
+ 520: :err_whotrunc
18
+ 377: :rpl_spam
19
+ 328: :rpl_channel_url
20
+ 240: :rpl_statsxline
21
+ 378: :rpl_motd
22
+ 307: :rpl_suserhost
23
+ usermode:
24
+ v: :host_hiding
25
+ l: :listall
26
+ a: :errors
27
+ h: :helper
28
+ T: :w_lined
29
+ t: :z_lined
@@ -0,0 +1,67 @@
1
+ ---
2
+ channel_mode:
3
+ L: :listed
4
+ M: :modreg
5
+ c: :nocolour
6
+ O: :oper_only
7
+ R: :regonly
8
+ r: :registered
9
+ event:
10
+ 522: :err_whosyntax
11
+ 225: :rpl_statszline
12
+ 605: :rpl_nowoff
13
+ 484: :err_desync
14
+ 440: :err_servicesdown
15
+ 429: :err_toomanyaway
16
+ 308: :rpl_whoisadmin
17
+ 220: :rpl_statsbline
18
+ 600: :rpl_logon
19
+ 523: :err_wholimexceed
20
+ 512: :err_toomanywatch
21
+ 468: :err_onlyserverscanchange
22
+ 435: :err_banonchan
23
+ 226: :rpl_statscount
24
+ 617: :rpl_dccstatus
25
+ 606: :rpl_watchlist
26
+ 408: :err_nocolorsonchan
27
+ 309: :rpl_whoissadmin
28
+ 265: :rpl_localusers
29
+ 601: :rpl_logoff
30
+ 227: :rpl_statsgline
31
+ 618: :rpl_dcclist
32
+ 607: :rpl_endofwatchlist
33
+ 310: :rpl_whoissvcmsg
34
+ 266: :rpl_globalusers
35
+ 222: :rpl_statsbline
36
+ 602: :rpl_watchoff
37
+ 514: :err_toomanydcc
38
+ 338: :rpl_whoisactually
39
+ 619: :rpl_endofdcclist
40
+ 487: :err_msgservices
41
+ 245: :rpl_statssline
42
+ 223: :rpl_statseline
43
+ 999: :err_numeric_err
44
+ 603: :rpl_watchstat
45
+ 328: :rpl_channel_url
46
+ 620: :rpl_dccinfo
47
+ 521: :err_listsyntax
48
+ 477: :err_needreggednick
49
+ 334: :rpl_commandsyntax
50
+ 224: :rpl_statsfline
51
+ 604: :rpl_nowon
52
+ 329: :rpl_creationtime
53
+ 307: :rpl_whoisregnick
54
+ usermode:
55
+ k: :kills
56
+ A: :server_admin
57
+ a: :services_admin
58
+ m: :spambots
59
+ b: :chatops
60
+ y: :stats_links
61
+ n: :routing
62
+ d: :debug
63
+ f: :floods
64
+ R: :no_non_registered
65
+ r: :registered
66
+ g: :globops
67
+ h: :helper
@@ -0,0 +1,3 @@
1
+ ---
2
+ channel_mode:
3
+ J: :join_throttle
@@ -0,0 +1,3 @@
1
+ ---
2
+ event:
3
+ 345: :rpl_invited
@@ -0,0 +1,3 @@
1
+ ---
2
+ channel_mode:
3
+ R: :reop_list
@@ -0,0 +1,7 @@
1
+ ---
2
+ event:
3
+ 771: :rpl_xinfo
4
+ 672: :rpl_unknownmodes
5
+ 673: :rpl_cannotsetmodes
6
+ 773: :rpl_xinfostart
7
+ 774: :rpl_xinfoend
@@ -0,0 +1,56 @@
1
+ ---
2
+ server_mode:
3
+ L: :default_language
4
+ l: :lazy_leaf
5
+ A: :auto_tbs
6
+ a: :autoconnect
7
+ M: :modes_locked
8
+ n: :no_oper
9
+ D: :debugging
10
+ F: :full
11
+ H: :hidden
12
+ T: :testlink
13
+ channel_mode:
14
+ "!": :service
15
+ event:
16
+ 973: :err_cannotchangeumode
17
+ 687: :rpl_yourlanguageis
18
+ 665: :rpl_otherumodeis
19
+ 979: :err_servermodelock
20
+ 682: :rpl_networks
21
+ 671: :rpl_whoissecure
22
+ 660: :rpl_traceroute_hop
23
+ 974: :err_cannotchangechanmode
24
+ 688: :rpl_language
25
+ 666: :rpl_endof_generic
26
+ 980: :err_badcharencoding
27
+ 661: :rpl_traceroute_start
28
+ 975: :err_cannotchangeservermode
29
+ 689: :rpl_whoisstaff
30
+ 678: :rpl_luserstaff
31
+ 981: :err_toomanylanguages
32
+ 662: :rpl_modechangewarn
33
+ 976: :err_cannotsendtonick
34
+ 690: :rpl_whoislanguage
35
+ 679: :rpl_timeonserveris
36
+ 982: :err_nolanguage
37
+ 663: :rpl_chanredir
38
+ 977: :err_unknownservermode
39
+ 983: :err_texttooshort
40
+ 664: :rpl_servmodeis
41
+ 301: :rpl_away
42
+ 4: :rpl_myinfo
43
+ 670: :rpl_whowasdetails
44
+ user_prefix:
45
+ "!": :service
46
+ usermode:
47
+ d: :deaf
48
+ R: :no_non_registered
49
+ g: :callerid
50
+ s: :server_notices
51
+ h: :helper
52
+ channel_prefix:
53
+ .: :softchan
54
+ "~": :global
55
+ privilege:
56
+ "!": :service
@@ -0,0 +1,6 @@
1
+ ---
2
+ event:
3
+ 247: :rpl_statsxline
4
+ 484: :err_desync
5
+ 485: :err_cantkickadmin
6
+ 615: :rpl_mapmore
@@ -0,0 +1,20 @@
1
+ ---
2
+ channel_mode:
3
+ D: :deljoins
4
+ d: :has_hidden
5
+ u: :noquitparts
6
+ event:
7
+ 291: :rpl_endofcheck
8
+ 550: :err_badhostmask
9
+ 286: :rpl_chkhead
10
+ 551: :err_hostunavail
11
+ 485: :err_isrealservice
12
+ 287: :rpl_chanuser
13
+ 552: :err_usingsline
14
+ 486: :err_accountonly
15
+ 288: :rpl_patchhead
16
+ 553: :err_statssline
17
+ 355: :rpl_namreply_
18
+ 289: :rpl_patchcon
19
+ 290: :rpl_datastr
20
+ 285: :rpl_newhostis
@@ -0,0 +1,158 @@
1
+ ---
2
+ channel_mode:
3
+ v: :voice
4
+ k: :keylock
5
+ l: :limit
6
+ m: :moderated
7
+ b: :ban
8
+ n: :no_external_msgs
9
+ o: :oper
10
+ p: :private
11
+ s: :secret
12
+ t: :topic_lock
13
+ i: :invite_only
14
+ event:
15
+ 462: :err_alreadyregistered
16
+ 203: :rpl_traceunknown
17
+ 314: :rpl_whowasuser
18
+ 351: :rpl_version
19
+ 481: :err_noprivileges
20
+ 407: :err_toomanytargets
21
+ 444: :err_nologin
22
+ 259: :rpl_adminemail
23
+ 463: :err_nopermforhost
24
+ 204: :rpl_traceoperator
25
+ 241: :rpl_statslline
26
+ 315: :rpl_endofwho
27
+ 352: :rpl_whoreply
28
+ 482: :err_chanoprivsneeded
29
+ 445: :err_summondisabled
30
+ 371: :rpl_info
31
+ 501: :err_umodeunknownflag
32
+ 464: :err_passwdmismatch
33
+ 205: :rpl_traceuser
34
+ 242: :rpl_statsuptime
35
+ 316: :rpl_whoischanop
36
+ 353: :rpl_namreply
37
+ 483: :err_cantkillserver
38
+ 261: :rpl_tracelog
39
+ 372: :rpl_motd
40
+ 409: :err_noorigin
41
+ 446: :err_usersdisabled
42
+ 502: :err_usersdontmatch
43
+ 465: :err_yourebannedcreep
44
+ 206: :rpl_traceserver
45
+ 243: :rpl_statsoline
46
+ 317: :rpl_whoisidle
47
+ 391: :rpl_time
48
+ 373: :rpl_infostart
49
+ 466: :err_youwillbebanned
50
+ 244: :rpl_statshline
51
+ 318: :rpl_endofwhois
52
+ 392: :rpl_usersstart
53
+ 300: :rpl_none
54
+ 374: :rpl_endofinfo
55
+ 411: :err_norecipient
56
+ 467: :err_keyset
57
+ 208: :rpl_tracenewtype
58
+ 319: :rpl_whoischannels
59
+ 393: :rpl_users
60
+ 301: :rpl_away
61
+ 375: :rpl_motdstart
62
+ 412: :err_notexttosend
63
+ 394: :rpl_endofusers
64
+ 431: :err_nonicknamegiven
65
+ 302: :rpl_userhost
66
+ 376: :rpl_endofmotd
67
+ 413: :err_notoplevel
68
+ 321: :rpl_liststart
69
+ 395: :rpl_nousers
70
+ 432: :err_erroneusnickname
71
+ 303: :rpl_ison
72
+ 414: :err_wildtoplevel
73
+ 451: :err_notregistered
74
+ 322: :rpl_list
75
+ 433: :err_nicknameinuse
76
+ 211: :rpl_statslinkinfo
77
+ 341: :rpl_inviting
78
+ 471: :err_channelisfull
79
+ 212: :rpl_statscommands
80
+ 323: :rpl_listend
81
+ 231: :rpl_serviceinfo
82
+ 305: :rpl_unaway
83
+ 342: :rpl_summoning
84
+ 472: :err_unknownmode
85
+ 213: :rpl_statscline
86
+ 324: :rpl_channelmodeis
87
+ 361: :rpl_killdone
88
+ 491: :err_nooperhost
89
+ 232: :rpl_endofservices
90
+ 306: :rpl_nowaway
91
+ 473: :err_inviteonlychan
92
+ 436: :err_nickcollision
93
+ 214: :rpl_statsnline
94
+ 251: :rpl_luserclient
95
+ 362: :rpl_closing
96
+ 492: :err_noservicehost
97
+ 233: :rpl_service
98
+ 381: :rpl_youreoper
99
+ 474: :err_bannedfromchan
100
+ 215: :rpl_statsiline
101
+ 252: :rpl_luserop
102
+ 363: :rpl_closeend
103
+ 382: :rpl_rehashing
104
+ 475: :err_badchannelkey
105
+ 216: :rpl_statskline
106
+ 253: :rpl_luserunknown
107
+ 364: :rpl_links
108
+ 401: :err_nosuchnick
109
+ 217: :rpl_statsqline
110
+ 254: :rpl_luserchannels
111
+ 365: :rpl_endoflinks
112
+ 402: :err_nosuchserver
113
+ 384: :rpl_myportis
114
+ 421: :err_unknowncommand
115
+ 255: :rpl_luserme
116
+ 366: :rpl_endofnames
117
+ 403: :err_nosuchchannel
118
+ 218: :rpl_statsyline
119
+ 311: :rpl_whoisuser
120
+ 422: :err_nomotd
121
+ 200: :rpl_tracelink
122
+ 367: :rpl_banlist
123
+ 404: :err_cannotsendtochan
124
+ 441: :err_usernotinchannel
125
+ 219: :rpl_endofstats
126
+ 256: :rpl_adminme
127
+ 312: :rpl_whoisserver
128
+ 423: :err_noadmininfo
129
+ 201: :rpl_traceconnecting
130
+ 331: :rpl_notopic
131
+ 368: :rpl_endofbanlist
132
+ 405: :err_toomanychannels
133
+ 442: :err_notonchannel
134
+ 257: :rpl_adminloc1
135
+ 424: :err_fileerror
136
+ 461: :err_needmoreparams
137
+ 202: :rpl_tracehandshake
138
+ 313: :rpl_whoisoperator
139
+ 369: :rpl_endofwhowas
140
+ 406: :err_wasnosuchnick
141
+ 443: :err_useronchannel
142
+ 221: :rpl_umodeis
143
+ 258: :rpl_adminloc2
144
+ 332: :rpl_topic
145
+ user_prefix:
146
+ "@": :operator
147
+ +: :voiced
148
+ usermode:
149
+ w: :wallops
150
+ o: :global_operator
151
+ s: :server_notices
152
+ i: :invisible
153
+ channel_prefix:
154
+ "#": :network
155
+ "&": :local
156
+ privilege:
157
+ v: :voiced
158
+ o: :operator