ircguerilla-irc 1.1.0

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 (69) hide show
  1. data/lib/irc/client/client_error.rb +35 -0
  2. data/lib/irc/client/command_handler.rb +113 -0
  3. data/lib/irc/client/connected_state.rb +95 -0
  4. data/lib/irc/client/connection.rb +119 -0
  5. data/lib/irc/client/connection_listener.rb +97 -0
  6. data/lib/irc/client/connection_state.rb +88 -0
  7. data/lib/irc/client/context.rb +250 -0
  8. data/lib/irc/client/disconnected_state.rb +132 -0
  9. data/lib/irc/client/message_handler.rb +87 -0
  10. data/lib/irc/client/registered_state.rb +90 -0
  11. data/lib/irc/client/unregistered_state.rb +113 -0
  12. data/lib/irc/commands/command.rb +57 -0
  13. data/lib/irc/commands/invalid_command.rb +35 -0
  14. data/lib/irc/commands/join_command.rb +122 -0
  15. data/lib/irc/commands/nick_command.rb +86 -0
  16. data/lib/irc/commands/part_command.rb +84 -0
  17. data/lib/irc/commands/password_command.rb +72 -0
  18. data/lib/irc/commands/ping_command.rb +79 -0
  19. data/lib/irc/commands/pong_command.rb +68 -0
  20. data/lib/irc/commands/quit_command.rb +77 -0
  21. data/lib/irc/commands/user_command.rb +105 -0
  22. data/lib/irc/messages/codes.rb +186 -0
  23. data/lib/irc/messages/error_join_message.rb +72 -0
  24. data/lib/irc/messages/error_message.rb +101 -0
  25. data/lib/irc/messages/factory.rb +122 -0
  26. data/lib/irc/messages/invalid_message.rb +35 -0
  27. data/lib/irc/messages/join_message.rb +130 -0
  28. data/lib/irc/messages/message.rb +110 -0
  29. data/lib/irc/messages/nick_message.rb +93 -0
  30. data/lib/irc/messages/notice_message.rb +87 -0
  31. data/lib/irc/messages/part_message.rb +95 -0
  32. data/lib/irc/messages/ping_message.rb +101 -0
  33. data/lib/irc/messages/pong_message.rb +89 -0
  34. data/lib/irc/messages/private_message.rb +121 -0
  35. data/lib/irc/models/bot.rb +159 -0
  36. data/lib/irc/models/channel.rb +158 -0
  37. data/lib/irc/models/network.rb +252 -0
  38. data/lib/irc/models/packet.rb +84 -0
  39. data/lib/irc/models/server.rb +116 -0
  40. data/lib/irc/models/user.rb +112 -0
  41. data/test/functional/irc/client/connection_test.rb +118 -0
  42. data/test/functional/irc/client/context_test.rb +126 -0
  43. data/test/test_helper.rb +32 -0
  44. data/test/unit/irc/client/command_handler_test.rb +137 -0
  45. data/test/unit/irc/commands/join_command_test.rb +72 -0
  46. data/test/unit/irc/commands/nick_command_test.rb +35 -0
  47. data/test/unit/irc/commands/part_command_test.rb +52 -0
  48. data/test/unit/irc/commands/password_command_test.rb +35 -0
  49. data/test/unit/irc/commands/ping_command_test.rb +36 -0
  50. data/test/unit/irc/commands/pong_command_test.rb +36 -0
  51. data/test/unit/irc/commands/quit_command_test.rb +35 -0
  52. data/test/unit/irc/commands/user_command_test.rb +35 -0
  53. data/test/unit/irc/messages/error_join_message_test.rb +45 -0
  54. data/test/unit/irc/messages/factory_test.rb +62 -0
  55. data/test/unit/irc/messages/join_message_test.rb +46 -0
  56. data/test/unit/irc/messages/message_test.rb +56 -0
  57. data/test/unit/irc/messages/nick_message_test.rb +48 -0
  58. data/test/unit/irc/messages/notice_message_test.rb +43 -0
  59. data/test/unit/irc/messages/part_message_test.rb +47 -0
  60. data/test/unit/irc/messages/ping_message_test.rb +57 -0
  61. data/test/unit/irc/messages/pong_message_test.rb +57 -0
  62. data/test/unit/irc/messages/private_message_test.rb +42 -0
  63. data/test/unit/irc/models/bot_test.rb +85 -0
  64. data/test/unit/irc/models/channel_test.rb +90 -0
  65. data/test/unit/irc/models/network_test.rb +210 -0
  66. data/test/unit/irc/models/packet_test.rb +38 -0
  67. data/test/unit/irc/models/server_test.rb +54 -0
  68. data/test/unit/irc/models/user_test.rb +67 -0
  69. metadata +111 -0
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Copyright (c) 2006 Roman Scherer | IRC Guerilla | Rapid Packet Movement
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ #
24
+ # $Id: user_command.rb 85 2006-08-13 11:42:07Z roman $
25
+ #
26
+ require 'irc/commands/command'
27
+ require 'irc/commands/invalid_command'
28
+
29
+ module IRC
30
+
31
+ module Commands
32
+
33
+ # Command: USER
34
+ #
35
+ # Parameters: <username> <hostname> <servername> <realname>
36
+ #
37
+ # The USER message is used at the beginning of connection to specify the
38
+ # username, hostname, servername and realname of s new user. It is also
39
+ # used in communication between servers to indicate new user arriving on
40
+ # IRC, since only after both USER and NICK have been received from a client
41
+ # does a user become registered.
42
+ #
43
+ # Between servers USER must to be prefixed with client's NICKname. Note that
44
+ # hostname and servername are normally ignored by the IRC server when the USER
45
+ # command comes from a directly connected client (for security reasons), but
46
+ # they are used in server to server communication. This means that a NICK must
47
+ # always be sent to a remote server when a new user is being introduced to the
48
+ # rest of the network before the accompanying USER is sent.
49
+ #
50
+ # It must be noted that realname parameter must be the last parameter, because
51
+ # it may contain space characters and must be prefixed with a colon (':') to
52
+ # make sure this is recognised as such.
53
+ #
54
+ # Since it is easy for a client to lie about its username by relying solely on
55
+ # the USER message, the use of an "Identity Server" is recommended. If the host
56
+ # which a user connects from has such a server enabled the username is set to
57
+ # that as in the reply from the "Identity Server".
58
+ #
59
+ # Numeric Replies:
60
+ #
61
+ # ERR_NEEDMOREPARAMS
62
+ # ERR_ALREADYREGISTRED
63
+ #
64
+ # Examples:
65
+ #
66
+ # User registering themselves with a username of "guest" and real name "Ronnie Reagan".
67
+ #
68
+ # USER guest tolmoon tolsun :Ronnie Reagan
69
+ #
70
+ # Message between servers with the nickname for which the USER command belongs to
71
+ #
72
+ # :testnick USER guest tolmoon tolsun :Ronnie Reagan
73
+ #
74
+ class UserCommand < Command
75
+
76
+ attr_reader :user
77
+ attr_reader :host
78
+ attr_reader :server
79
+ attr_reader :realname
80
+
81
+ def initialize(user, host, server, realname)
82
+
83
+ raise InvalidCommand.new("Can't create user command. No user name.") unless user
84
+ @user = user
85
+
86
+ raise InvalidCommand.new("Can't create user command. No host.") unless host
87
+ @host = host
88
+
89
+ raise InvalidCommand.new("Can't create user command. No server.") unless server
90
+ @server = server
91
+
92
+ raise InvalidCommand.new("Can't create user command. No real name.") unless realname
93
+ @realname = realname
94
+
95
+ end
96
+
97
+ def command
98
+ return "USER #{user} #{host} #{server} :#{realname}"
99
+ end
100
+
101
+ end
102
+
103
+ end
104
+
105
+ end
@@ -0,0 +1,186 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Copyright (c) 2006 Roman Scherer | IRC Guerilla | Rapid Packet Movement
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ #
24
+ # $Id: codes.rb 85 2006-08-13 11:42:07Z roman $
25
+ #
26
+ module IRC
27
+
28
+ module Messages
29
+
30
+ module Codes
31
+
32
+ # Reply codes
33
+ RPL_WELCOME = 001
34
+ RPL_YOURHOST = 002
35
+ RPL_CREATED = 003
36
+ RPL_MYINFO = 004
37
+ RPL_BOUNCE = 005
38
+ RPL_ISUPPORT = 005
39
+ RPL_TRACELINK = 200
40
+ RPL_TRACECONNECTING = 201
41
+ RPL_TRACEHANDSHAKE = 202
42
+ RPL_TRACEUNKNOWN = 203
43
+ RPL_TRACEOPERATOR = 204
44
+ RPL_TRACEUSER = 205
45
+ RPL_TRACESERVER = 206
46
+ RPL_TRACENEWTYPE = 208
47
+ RPL_TRACECLASS = 209
48
+ RPL_STATSLINKINFO = 211
49
+ RPL_STATSCOMMANDS = 212
50
+ RPL_STATSCLINE = 213
51
+ RPL_STATSNLINE = 214
52
+ RPL_STATSILINE = 215
53
+ RPL_STATSKLINE = 216
54
+ RPL_STATSQLINE = 217
55
+ RPL_STATSYLINE = 218
56
+ RPL_ENDOFSTATS = 219
57
+ RPL_UMODEIS = 221
58
+ RPL_SERVICEINFO = 231
59
+ RPL_ENDOFSERVICES = 232
60
+ RPL_SERVICE = 233
61
+ RPL_SERVLIST = 234
62
+ RPL_SERVLISTEND = 235
63
+ RPL_STATSLLINE = 241
64
+ RPL_STATSUPTIME = 242
65
+ RPL_STATSOLINE = 243
66
+ RPL_STATSHLINE = 244
67
+ RPL_LUSERCLIENT = 251
68
+ RPL_LUSEROP = 252
69
+ RPL_LUSERUNKNOWN = 253
70
+ RPL_LUSERCHANNELS = 254
71
+ RPL_LUSERME = 255
72
+ RPL_ADMINME = 256
73
+ RPL_ADMINLOC1 = 257
74
+ RPL_ADMINLOC2 = 258
75
+ RPL_ADMINEMAIL = 259
76
+ RPL_TRACELOG = 261
77
+ RPL_NONE = 300
78
+ RPL_AWAY = 301
79
+ RPL_USERHOST = 302
80
+ RPL_ISON = 303
81
+ RPL_UNAWAY = 305
82
+ RPL_NOWAWAY = 306
83
+ RPL_WHOISUSER = 311
84
+ RPL_WHOISSERVER = 312
85
+ RPL_WHOISOPERATOR = 313
86
+ RPL_WHOWASUSER = 314
87
+ RPL_ENDOFWHO = 315
88
+ RPL_WHOISCHANOP = 316
89
+ RPL_WHOISIDLE = 317
90
+ RPL_ENDOFWHOIS = 318
91
+ RPL_WHOISCHANNELS = 319
92
+ RPL_LISTSTART = 321
93
+ RPL_LIST = 322
94
+ RPL_LISTEND = 323
95
+ RPL_CHANNELMODEIS = 324
96
+ RPL_NOTOPIC = 331
97
+ RPL_TOPIC = 332
98
+ RPL_TOPICINFO = 333
99
+ RPL_INVITING = 341
100
+ RPL_SUMMONING = 342
101
+ RPL_VERSION = 351
102
+ RPL_WHOREPLY = 352
103
+ RPL_NAMREPLY = 353
104
+ RPL_KILLDONE = 361
105
+ RPL_CLOSING = 362
106
+ RPL_CLOSEEND = 363
107
+ RPL_LINKS = 364
108
+ RPL_ENDOFLINKS = 365
109
+ RPL_ENDOFNAMES = 366
110
+ RPL_BANLIST = 367
111
+ RPL_ENDOFBANLIST = 368
112
+ RPL_ENDOFWHOWAS = 369
113
+ RPL_INFO = 371
114
+ RPL_MOTD = 372
115
+ RPL_INFOSTART = 373
116
+ RPL_ENDOFINFO = 374
117
+ RPL_MOTDSTART = 375
118
+ RPL_ENDOFMOTD = 376
119
+ RPL_YOUREOPER = 381
120
+ RPL_REHASHING = 382
121
+ RPL_MYPORTIS = 384
122
+ RPL_TIME = 391
123
+ RPL_USERSSTART = 392
124
+ RPL_USERS = 393
125
+ RPL_ENDOFUSERS = 394
126
+ RPL_NOUSERS = 395
127
+
128
+ # Error reply codes
129
+ ERR_NOSUCHNICK = 401
130
+ ERR_NOSUCHSERVER = 402
131
+ ERR_NOSUCHCHANNEL = 403
132
+ ERR_CANNOTSENDTOCHAN = 404
133
+ ERR_TOOMANYCHANNELS = 405
134
+ ERR_WASNOSUCHNICK = 406
135
+ ERR_TOOMANYTARGETS = 407
136
+ ERR_NOORIGIN = 409
137
+ ERR_NORECIPIENT = 411
138
+ ERR_NOTEXTTOSEND = 412
139
+ ERR_NOTOPLEVEL = 413
140
+ ERR_WILDTOPLEVEL = 414
141
+ ERR_UNKNOWNCOMMAND = 421
142
+ ERR_NOMOTD = 422
143
+ ERR_NOADMININFO = 423
144
+ ERR_FILEERROR = 424
145
+ ERR_NONICKNAMEGIVEN = 431
146
+ ERR_ERRONEUSNICKNAME = 432
147
+ ERR_NICKNAMEINUSE = 433
148
+ ERR_NICKCOLLISION = 436
149
+ ERR_TARGETTOOFAST = 439
150
+ ERR_USERNOTINCHANNEL = 441
151
+ ERR_NOTONCHANNEL = 442
152
+ ERR_USERONCHANNEL = 443
153
+ ERR_NOLOGIN = 444
154
+ ERR_SUMMONDISABLED = 445
155
+ ERR_USERSDISABLED = 446
156
+ ERR_NOTREGISTERED = 451
157
+ ERR_NEEDMOREPARAMS = 461
158
+ ERR_ALREADYREGISTRED = 462
159
+ ERR_NOPERMFORHOST = 463
160
+ ERR_PASSWDMISMATCH = 464
161
+ ERR_YOUREBANNEDCREEP = 465
162
+ ERR_YOUWILLBEBANNED = 466
163
+ ERR_KEYSET = 467
164
+ ERR_INVALIDUSERNAME = 468
165
+ ERR_LINKCHANNEL = 470
166
+ ERR_CHANNELISFULL = 471
167
+ ERR_UNKNOWNMODE = 472
168
+ ERR_INVITEONLYCHAN = 473
169
+ ERR_BANNEDFROMCHAN = 474
170
+ ERR_BADCHANNELKEY = 475
171
+ ERR_BADCHANMASK = 476
172
+ ERR_BADCHANNAME = 479
173
+ ERR_NOPRIVILEGES = 481
174
+ ERR_CHANOPRIVSNEEDED = 482
175
+ ERR_CANTKILLSERVER = 483
176
+ ERR_SECUREONLYCHAN = 489
177
+ ERR_NOOPERHOST = 491
178
+ ERR_NOSERVICEHOST = 492
179
+ ERR_UMODEUNKNOWNFLAG = 501
180
+ ERR_USERSDONTMATCH = 502
181
+
182
+ end
183
+
184
+ end
185
+
186
+ end
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Copyright (c) 2006 Roman Scherer | IRC Guerilla | Rapid Packet Movement
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ #
24
+ # $Id$
25
+ #
26
+ require 'irc/messages/error_join_message'
27
+ require 'irc/messages/invalid_message'
28
+ require 'irc/messages/message'
29
+
30
+ module IRC
31
+
32
+ module Messages
33
+
34
+ class ErrorJoinMessage < Message
35
+
36
+ attr_reader :channel
37
+ attr_reader :reason
38
+
39
+ # Notify all connection listeners, that the channel join failed.
40
+ def handle(context)
41
+
42
+ # Notify all connection listeners by calling their on_server_response method.
43
+ super(context)
44
+
45
+ # Notify all connection listeners by calling their on_join_failure method.
46
+ notify(context) do |connection_listener|
47
+ connection_listener.on_join_failure(context, context.lookup_channel(channel), code, reason)
48
+ end
49
+
50
+ end
51
+
52
+ protected
53
+
54
+ def parse(raw_message)
55
+
56
+ # Initialize the base message fields.
57
+ super(raw_message)
58
+
59
+ match_data = Regexp.new('(\S+)\s+(\S+)\s+:?(.+)').match(message)
60
+ raise InvalidMessage.new("Can't parse join error message. Invalid message format.") unless match_data
61
+
62
+ # Extract nick & channel name and the error reason.
63
+ @nick, @channel, @reason = match_data[1], match_data[2], match_data[3]
64
+
65
+ end
66
+
67
+
68
+ end
69
+
70
+ end
71
+
72
+ end
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Copyright (c) 2006 Roman Scherer | IRC Guerilla | Rapid Packet Movement
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ #
24
+ # $Id: error_message.rb 94 2006-08-13 21:40:40Z roman $
25
+ #
26
+ require 'irc/messages/error_join_message'
27
+ require 'irc/messages/message'
28
+ require 'irc/messages/invalid_message'
29
+
30
+ module IRC
31
+
32
+ module Messages
33
+
34
+ class ErrorMessage < Message
35
+ end
36
+
37
+ class JoinFailureMessage < ErrorMessage
38
+ end
39
+
40
+ class PartFailureMessage < ErrorMessage
41
+ end
42
+
43
+ class ErrorAlreadyRegisteredMessage < ErrorMessage
44
+ CODE = ERR_ALREADYREGISTRED
45
+ end
46
+
47
+ class ErrorBadChannelKeyMessage < ErrorJoinMessage
48
+ CODE = ERR_BADCHANNELKEY
49
+ end
50
+
51
+ class ErrorBadChannelMaskMessage < ErrorJoinMessage
52
+ CODE = ERR_BADCHANMASK
53
+ end
54
+
55
+ class ErrorBannedFromChannelMessage < ErrorJoinMessage
56
+ CODE = ERR_BANNEDFROMCHAN
57
+ end
58
+
59
+ class ErrorChannelIsFulMessage < ErrorJoinMessage
60
+ CODE = ERR_CHANNELISFULL
61
+ end
62
+
63
+ class ErrorErroneusNickNameMessage < ErrorMessage
64
+ CODE = ERR_ERRONEUSNICKNAME
65
+ end
66
+
67
+ class ErrorInviteOnlyChannelMessage < ErrorJoinMessage
68
+ CODE = ERR_INVITEONLYCHAN
69
+ end
70
+
71
+ class ErrorNeedMoreParametersMessage < ErrorMessage
72
+ CODE = ERR_NEEDMOREPARAMS
73
+ end
74
+
75
+ class ErrorNickCollisionMessage < ErrorMessage
76
+ CODE = ERR_NICKCOLLISION
77
+ end
78
+
79
+ class ErrorNickNameInUseMessage < ErrorMessage
80
+ CODE = ERR_ERRONEUSNICKNAME
81
+ end
82
+
83
+ class ErrorNoNickNameGivenMessage < ErrorMessage
84
+ CODE = ERR_NONICKNAMEGIVEN
85
+ end
86
+
87
+ class ErrorNoSuchChannelMessage < ErrorJoinMessage
88
+ CODE = ERR_NOSUCHCHANNEL
89
+ end
90
+
91
+ class ErrorNotOnChannelMessage < ErrorMessage
92
+ CODE = ERR_NOTONCHANNEL
93
+ end
94
+
95
+ class ErrorTooManyChannelsMessage < ErrorJoinMessage
96
+ CODE = ERR_TOOMANYCHANNELS
97
+ end
98
+
99
+ end
100
+
101
+ end