ircbot 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/README +43 -21
  2. data/Rakefile +9 -6
  3. data/bin/ircbot +3 -27
  4. data/lib/ircbot.rb +12 -15
  5. data/lib/ircbot/client.rb +32 -0
  6. data/lib/ircbot/client/commands.rb +34 -0
  7. data/lib/ircbot/client/config.rb +55 -0
  8. data/lib/ircbot/client/config/channels.rb +40 -0
  9. data/lib/ircbot/client/config/plugins.rb +16 -0
  10. data/lib/ircbot/client/encoding.rb +17 -0
  11. data/lib/ircbot/client/plugins.rb +64 -0
  12. data/lib/ircbot/core_ext/delegation.rb +135 -0
  13. data/lib/ircbot/core_ext/extending.rb +80 -0
  14. data/lib/ircbot/core_ext/message.rb +18 -0
  15. data/lib/ircbot/framework.rb +22 -40
  16. data/lib/ircbot/plugin.rb +63 -0
  17. data/lib/ircbot/plugins.rb +141 -0
  18. data/lib/ircbot/version.rb +4 -0
  19. data/plugins/echo.rb +14 -0
  20. data/plugins/irc.rb +19 -0
  21. data/plugins/plugins.rb +59 -0
  22. data/spec/config_spec.rb +83 -0
  23. data/spec/fixtures/sama-zu.yml +8 -0
  24. data/spec/framework_spec.rb +18 -0
  25. data/spec/its_helper.rb +15 -0
  26. data/spec/plugin_spec.rb +70 -0
  27. data/spec/plugins_spec.rb +30 -0
  28. data/spec/provide_helper.rb +36 -0
  29. data/spec/spec_helper.rb +16 -0
  30. metadata +40 -19
  31. data/lib/irc/agent.rb +0 -177
  32. data/lib/irc/client.rb +0 -476
  33. data/lib/irc/const.rb +0 -242
  34. data/lib/irc/irc.rb +0 -324
  35. data/lib/irc/localize.rb +0 -260
  36. data/lib/ircbot/agent_manager.rb +0 -89
  37. data/lib/ircbot/config_client.rb +0 -369
  38. data/lib/ircbot/core_ext/digest.rb +0 -14
  39. data/lib/ircbot/core_ext/irc.rb +0 -61
  40. data/lib/ircbot/core_ext/rand-polimorphism.rb +0 -23
  41. data/lib/ircbot/core_ext/writefile.rb +0 -45
  42. data/lib/ircbot/ordered_hash.rb +0 -91
  43. data/lib/ircbot/reply_client.rb +0 -328
@@ -1,242 +0,0 @@
1
- =begin header
2
- Internet Relay Chat Protocol Library -- Constants
3
-
4
- $Author: igarashi $
5
- $Date: 2000/06/12 15:52:00 $
6
-
7
- Copyright (C) 1998-2000 Hiroshi IGARASHI
8
- =end
9
-
10
- module IRC
11
- module Constants
12
- =begin
13
- module in which IRC constants are defined
14
- =end
15
-
16
- ERR_NOSUCHNICK = "401"
17
- ERR_NOSUCHSERVE = "402"
18
- ERR_NOSUCHCHANNEL = "403"
19
- ERR_CANNOTSENDTOCHAN = "404"
20
- ERR_TOOMANYCHANNELS = "405"
21
- ERR_WASNOSUCHNICK = "406"
22
- ERR_TOOMANYTARGETS = "407"
23
- ERR_NOORIGIN = "409"
24
- ERR_NORECIPIENT = "411"
25
- ERR_NOTEXTTOSEND = "412"
26
- ERR_NOTOPLEVE = "413"
27
- ERR_WILDTOPLEVEL = "414"
28
- ERR_UNKNOWNCOMMAND = "421"
29
- ERR_NOMOTD = "422"
30
- ERR_NOADMININFO = "423"
31
- ERR_FILEERROR = "424"
32
- ERR_NONICKNAMEGIVEN = "431"
33
- ERR_ERRONEUSNICKNAME = "432"
34
- ERR_NICKNAMEINUSE = "433"
35
- ERR_NICKCOLLISION = "436"
36
- ERR_USERNOTINCHANNEL = "441"
37
- ERR_NOTONCHANNE = "442"
38
- ERR_USERONCHANNEL = "443"
39
- ERR_NOLOGIN = "444"
40
- ERR_SUMMONDISABLED = "445"
41
- ERR_USERSDISABLED = "446"
42
- ERR_NOTREGISTERED = "451"
43
- ERR_NEEDMOREPARAM = "461"
44
- ERR_ALREADYREGISTRE = "462"
45
- ERR_NOPERMFORHOST = "463"
46
- ERR_PASSWDMISMATCH = "464"
47
- ERR_YOUREBANNEDCREEP = "465"
48
- ERR_KEYSET = "467"
49
- ERR_CHANNELISFULL = "471"
50
- ERR_UNKNOWNMODE = "472"
51
- ERR_INVITEONLYCHAN = "473"
52
- ERR_BANNEDFROMCHAN = "474"
53
- ERR_BADCHANNELKEY = "475"
54
- ERR_NOPRIVILEGES = "481"
55
- ERR_CHANOPRIVSNEEDED = "482"
56
- ERR_CANTKILLSERVER = "483"
57
- ERR_NOOPERHOST = "491"
58
- ERR_UMODEUNKNOWNFLAG = "501"
59
- ERR_USERSDONTMATCH = "502"
60
- =begin
61
- Error Replies
62
- =end
63
-
64
- RPL_NONE = "300"
65
- RPL_USERHOST = "302"
66
- RPL_ISON = "303"
67
- RPL_AWAY = "301"
68
- RPL_UNAWAY = "305"
69
- RPL_NOWAWAY = "306"
70
- RPL_WHOISUSER = "311"
71
- RPL_WHOISSERVER = "312"
72
- RPL_WHOISOPERATOR = "313"
73
- RPL_WHOISIDLE = "317"
74
- RPL_ENDOFWHOIS = "318"
75
- RPL_WHOISCHANNELS = "319"
76
- RPL_WHOWASUSER = "314"
77
- RPL_ENDOFWHOWAS = "369"
78
- RPL_LISTSTART = "321"
79
- RPL_LIST = "322"
80
- RPL_LISTEND = "323"
81
- RPL_CHANNELMODEIS = "324"
82
- RPL_NOTOPIC = "331"
83
- RPL_TOPIC = "332"
84
- RPL_INVITING = "341"
85
- RPL_SUMMONING = "342"
86
- RPL_VERSION = "351"
87
- RPL_WHOREPLY = "352"
88
- RPL_ENDOFWHO = "315"
89
- RPL_NAMREPLY = "353"
90
- RPL_ENDOFNAME = "366"
91
- RPL_LINKS = "364"
92
- RPL_ENDOFLINKS = "365"
93
- RPL_BANLIST = "367"
94
- RPL_ENDOFBANLIST = "368"
95
- RPL_INFO = "371"
96
- RPL_ENDOFINFO = "374"
97
- RPL_MOTDSTART = "375"
98
- RPL_MOTD = "372"
99
- RPL_ENDOFMOTD = "376"
100
- RPL_YOUREOPER = "381"
101
- RPL_REHASHING = "382"
102
- RPL_TIME = "391"
103
- RPL_USERSSTART = "392"
104
- RPL_USERS = "393"
105
- RPL_ENDOFUSERS = "394"
106
- RPL_NOUSERS = "395"
107
-
108
- RPL_TRACELINK = "200"
109
- RPL_TRACECONNECTING = "201"
110
- RPL_TRACEHANDSHAKE = "202"
111
- RPL_TRACEUNKNOWN = "203"
112
- RPL_TRACEOPERATOR = "204"
113
- RPL_TRACEUSER = "205"
114
- RPL_TRACESERVER = "206"
115
- RPL_TRACENEWTYPE = "208"
116
- RPL_TRACELOG = "261"
117
- RPL_STATSLINKINF = "211"
118
- RPL_STATSCOMMANDS = "212"
119
- RPL_STATSCLINE = "213"
120
- RPL_STATSNLINE = "214"
121
- RPL_STATSILINE = "215"
122
- RPL_STATSKLINE = "216"
123
- RPL_STATSYLINE = "218"
124
- RPL_ENDOFSTATS = "219"
125
- RPL_STATSLLINE = "241"
126
- RPL_STATSUPTIME = "242"
127
- RPL_STATSOLINE = "243"
128
- RPL_STATSHLINE = "244"
129
- RPL_UMODEIS = "221"
130
- RPL_LUSERCLIENT = "251"
131
- RPL_LUSEROP = "252"
132
- RPL_LUSERUNKNOWN = "253"
133
- RPL_LUSERCHANNELS = "254"
134
- RPL_LUSERME = "255"
135
- RPL_ADMINME = "256"
136
- RPL_ADMINLOC1 = "257"
137
- RPL_ADMINLOC2 = "258"
138
- RPL_ADMINEMAIL = "259"
139
- =begin
140
- Message Replies
141
- =end
142
-
143
- # generating mapping "XXX" -> <error name>
144
- table = {}
145
- constants.each { |name|
146
- table[const_get(name)] = name
147
- }
148
- NAME_TABLE = table
149
- =begin
150
- Mapping "XXX" -> <error name>
151
- =end
152
-
153
- #
154
- # Message Commands
155
- #
156
- CMD_PASS = "PASS"
157
- CMD_NICK = "NICK"
158
- CMD_USER = "USER"
159
- CMD_SERVER = "SERVER"
160
- CMD_OPER = "OPER"
161
- CMD_QUIT = "QUIT"
162
- CMD_SQUIT = "SQUIT"
163
- =begin
164
- Connection messages
165
- =end
166
-
167
- CMD_JOIN = "JOIN"
168
- CMD_PART = "PART"
169
- CMD_MODE = "MODE"
170
- CMD_TOPIC = "TOPIC"
171
- CMD_NAMES = "NAMES"
172
- CMD_LIST = "LIST"
173
- CMD_INVITE = "INVITE"
174
- CMD_KICK = "KICK"
175
- =begin
176
- Channel control messages
177
- =end
178
-
179
- CMD_VERSION = "VERSION"
180
- CMD_STATS = "STATS"
181
- CMD_LINK = "LINK"
182
- CMD_TIME = "TIME"
183
- CMD_CONNECT = "CONNECT"
184
- CMD_TRACE = "TRACE"
185
- CMD_ADMIN = "ADMIN"
186
- CMD_INFO = "INFO"
187
- =begin
188
- Query and messages for server
189
- =end
190
-
191
- CMD_PRIVMSG = "PRIVMSG"
192
- CMD_NOTICE = "NOTICE"
193
- =begin
194
- Message sending
195
- =end
196
-
197
- CMD_WHO = "WHO"
198
- CMD_WHOIS = "WHOIS"
199
- CMD_WHOWAS = "WHOWAS"
200
- =begin
201
- Request for user information
202
- =end
203
-
204
- CMD_KILL = "KILL"
205
- CMD_PING = "PING"
206
- CMD_PONG = "PONG"
207
- CMD_ERROR = "ERROR"
208
- =begin
209
- Others
210
- =end
211
-
212
- CMD_AWAY = "AWAY"
213
- CMD_REHASH = "REHASH"
214
- CMD_RESTART = "RESTART"
215
- CMD_SUMMON = "SUMMON"
216
- CMD_USERS = "USERS"
217
- CMD_WALLOPS = "WALLOPS"
218
- CMD_USERHOST = "USERHOST"
219
- CMD_ISON = "ISON"
220
- =begin
221
- Optional
222
- =end
223
-
224
- #
225
- # Other constants
226
- #
227
-
228
- CRLF = "\r\n"
229
- =begin
230
- Message separator
231
- =end
232
-
233
- DEFAULT_PORT = 6667
234
- =begin
235
- Default TCP Port
236
- =end
237
-
238
- end
239
- end
240
-
241
- #p IRC::Constants::NAME_TABLE
242
-
@@ -1,324 +0,0 @@
1
- =begin header
2
- Internet Relay Chat Protocol Library -- Main Part
3
-
4
- $Author: knu $
5
- $Date: 2001/01/31 10:55:28 $
6
-
7
- Copyright (C) 1998-2000 Hiroshi IGARASHI
8
- =end
9
-
10
- require 'socket'
11
- require 'thread'
12
- require 'kconv'
13
- require 'irc/localize'
14
- require 'irc/const'
15
-
16
- module IRC
17
- class Message
18
- =begin
19
- IRC messages in IRC protocol
20
- =end
21
-
22
- include Constants
23
-
24
- attr_accessor(:prefix)
25
- attr_accessor(:command)
26
- attr_accessor(:params)
27
- attr_accessor(:trailing)
28
- attr_accessor(:str) # for debug
29
- =begin
30
- =end
31
-
32
- def initialize(command, trailing=nil, prefix=nil, *params)
33
- =begin
34
- initialize Message
35
- command:String
36
- trailing=nil:String
37
- prefix=nil:String
38
- *params:String
39
- =end
40
- @prefix = prefix
41
- @command = command
42
- @params = params
43
- @trailing = trailing
44
- @str = to_s
45
- end
46
-
47
- def to_s
48
- =begin
49
- String representation suitable for sending
50
- =end
51
- buf = ''
52
- buf << ":" << @prefix << ' ' unless @prefix.nil?
53
- buf << @command
54
- buf << ' ' << @params.join(' ') unless @params.empty?
55
- buf << " :" << @trailing unless @trailing.nil?
56
- buf
57
- end
58
-
59
- alias_method(:to_extern, :to_s)
60
- =begin
61
- alias of to_s
62
- =end
63
- end
64
-
65
- class << Message
66
- def parse(str)
67
- =begin
68
- parse IRC message and create a new Message object.
69
- =end
70
- strbuf = str.dup
71
- strbuf.sub!(/^:(\S+)\s+/, '')
72
- prefix = $1 if $1
73
- strbuf.sub!(/^(\S+)/, '')
74
- command = $1 if $1
75
- params = []
76
- #while strbuf.sub!(/^\s+([^\s:]+)/, '')
77
- while strbuf.sub!(/^\s+([^\s:][^\s]*)/, '')
78
- params << $1
79
- end
80
- strbuf.sub!(/^\s+:([^\r\n]+)(\r\n|\r|\n)?$/, '')
81
- trailing = $1 if $1
82
- msg = new(command, trailing, prefix, *params)
83
- msg.str = str # for debug
84
- msg
85
- end
86
- end
87
-
88
- class User
89
- =begin
90
- represent IRC user
91
- =end
92
- attr_reader(:nick)
93
- attr_reader(:user)
94
- attr_reader(:host)
95
- def initialize(nick, user=nil, host=nil)
96
- @nick, @user, @host = nick, user, host
97
- end
98
- def to_s
99
- "#{@nick}(#{user}) at #{@host}"
100
- end
101
- def ==(other)
102
- case other
103
- when User
104
- @nick == other.nick && @user == other.user && @host == other.host
105
- else
106
- false
107
- end
108
- end
109
- end
110
- class << User
111
- def parse(str)
112
- str =~ /([^\s!@]+)(?:!([^\s@]+))?(?:@(\S+))?/
113
- User::new($1, $2, $3)
114
- end
115
- end
116
-
117
- class LogMessage
118
- =begin
119
- class which represents log message
120
- =end
121
- attr_reader(:timestamp)
122
- =begin
123
- :Time the time when this object was sent
124
- =end
125
- attr_reader(:sender)
126
- =begin
127
- :Object the object which sent object
128
- =end
129
- attr_reader(:ident)
130
- =begin
131
- :String identifier for message type
132
- =end
133
- attr_reader(:message)
134
- =begin
135
- :String log message string
136
- =end
137
- def initialize(sender, ident, message)
138
- =begin
139
- initialization
140
- sender:Object the object which sent object
141
- ident:String identifier for message type
142
- message:String string as message
143
- message:Message message object
144
- =end
145
- @timestamp = Time.now
146
- @sender, @ident, @message = sender, ident, message
147
- end
148
- def to_s
149
- =begin
150
- string in standard output form
151
- =end
152
- buf = @timestamp.to_s
153
- case @sender
154
- when Connection, Client
155
- buf << " <#{@ident}> #{@message}"
156
- when Agent
157
- buf << " [#{@sender.nick}] #{@message}"
158
- end
159
- buf
160
- end
161
- end
162
-
163
- class Connection
164
- =begin
165
- represent IRC connection
166
- =end
167
-
168
- include Constants
169
-
170
- def Message(command, trailing=nil, prefix=nil, *params)
171
- =begin
172
- alias of IRC::Message::new
173
- =end
174
- Message.new(command, trailing, prefix, *params)
175
- end
176
-
177
- def initialize(log_queue=nil)
178
- =begin
179
- initialize Connection
180
- log_queue:Queue -- queue object into which log message are put.
181
- =end
182
- @log_queue = log_queue
183
- end
184
-
185
- private
186
- def putlog(ident, str)
187
- =begin
188
- put a log message.
189
- =end
190
- #@log_queue.push(Time.now.to_s+": "+str.to_s) unless @log_queue.nil?
191
- @log_queue.push(LogMessage.new(self, ident, str)) unless @log_queue.nil?
192
- end
193
- public
194
-
195
- def connect(server, port=DEFAULT_PORT)
196
- =begin
197
- Connect to server which has hostname given by argument server.
198
- If sub-class of BasicSocket is given, it will be used.
199
- server:String -- server name.
200
- server:BasicSocket -- socket already connected to server.
201
- port=DEFAULT_PORT:Fixnum -- TCP port number. 6667 will be used when omitted.
202
- =end
203
- if server.is_a?(BasicSocket)
204
- @socket = server
205
- else
206
- @server = server
207
- @port = port
208
- @socket = TCPsocket.open(@server, @port)
209
- end
210
- @socket.set_codesys("JIS")
211
- end
212
-
213
- def disconnect
214
- =begin
215
- =end
216
- @socket.flush
217
- @socket.shutdown(2)
218
- @socket.close
219
- end
220
-
221
- def send(*args)
222
- =begin
223
- send IRC message.
224
- send(message)
225
- message:Message a IRC message to be send
226
- send(command, trailing, prefix, *params)
227
- Send a message which consists of given arguments.
228
- Refer to Message#initialize about the meaning of the arguments.
229
- =end
230
- case args.length
231
- when 1
232
- case args[0]
233
- when Message
234
- message = args[0]
235
- @socket.lprint(message, CRLF)
236
- putlog("send", message)
237
- when String
238
- command = args[0]
239
- message = Message(command)
240
- @socket.lprint(message, CRLF)
241
- putlog("send1", message)
242
- else
243
- putlog("send", "Type error(#{message.inspect}).")
244
- end
245
- when 0, 2
246
- putlog("send", "Argument number error.")
247
- else
248
- message = Message(*args)
249
- @socket.lprint(message, CRLF)
250
- putlog("send1", message)
251
- end
252
- end
253
- # def send(message)
254
- # @socket.lprint(message, CRLF)
255
- # putlog("send", message.to_s)
256
- # end
257
-
258
- def recv
259
- =begin
260
- Receive IRC message and return as Message object.
261
- This method will block.
262
- =end
263
- str = @socket.lgets
264
- unless str.nil?
265
- message = Message.parse(str)
266
- else
267
- message = nil
268
- end
269
- putlog("recv", message)
270
- message
271
- end
272
-
273
- def sendPASS(password)
274
- send(Message(CMD_PASS, nil, nil, password))
275
- end
276
- def sendNICK(nick)
277
- send(Message(CMD_NICK, nil, nil, nick))
278
- end
279
- def sendUSER(nick, username, hostname, servername, realname)
280
- send(Message(CMD_USER, realname, nick,
281
- username, hostname, servername))
282
- end
283
- def sendQUIT(nick, quit_message)
284
- send(Message(CMD_QUIT, quit_message, nick))
285
- end
286
- =begin
287
- send IRC messages about IRC connection.
288
- =end
289
-
290
- def sendPING(nick, servers)
291
- send(Message(CMD_PING, nil, nick, servers))
292
- end
293
- def sendPONG(nick, daemons, phrase=nil)
294
- send(Message(CMD_PONG, phrase, nick, daemons))
295
- end
296
- =begin
297
- send IRC messages PING/PONG.
298
- =end
299
-
300
- # # send IRC messages about channel
301
- # def sendJOIN(nick, channels, keys)
302
- # if channels.is_a?(Array)
303
- # channels = channels.join(",")
304
- # end
305
- # if keys.is_a?(Array)
306
- # keys = keys.join(",")
307
- # end
308
- # send(Message(CMD_JOIN, nil, nick, channels, keys))
309
- # end
310
- # def sendPART(nick, channels)
311
- # if channels.is_a?(Array)
312
- # channels = channels.join(",")
313
- # end
314
- # send(Message(CMD_PART, nil, nick, channels))
315
- # end
316
-
317
- # # send IRC messages about sending messages
318
- # def sendPRIVMSG(nick, message, *channels)
319
- # send(Message(CMD_PRIVMSG, message, nick, *channels))
320
- # end
321
-
322
- end
323
- end
324
-