net-irc 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,9 @@
1
+ 2009-08-08 SATOH Hiroh <cho45@lowreal.net>
2
+
3
+ * [bug]:
4
+ Fixed to work on ruby1.9.1 (now can send iso-2022-jp)
5
+ * Released 0.0.8
6
+
1
7
  2009-02-19 SATOH Hiroh <cho45@lowreal.net>
2
8
 
3
9
  * [bug]:
data/README CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  == Description
6
6
 
7
- IRC library. This is mostly conform to RFC1459 but partly not for convenience.
7
+ IRC library. This is mostly conform to RFC 1459 but partly not for convenience.
8
8
 
9
9
 
10
10
  == Installation
@@ -44,49 +44,48 @@ So, be careful to use @channels instance variable and call super surely.
44
44
 
45
45
  === Server
46
46
 
47
- see example/lig.rb
47
+ see example/tig.rb
48
48
 
49
49
 
50
50
  == IRC Gateways
51
51
 
52
52
  There are some gateways connecting to webservices.
53
53
 
54
- * Lingr
55
54
  * Twitter
56
55
  * Wassr
56
+ * Hatena Haiku
57
+ * Hatena Star
57
58
 
58
59
  If you want to run it, type following:
59
60
 
60
61
  $ cd `ruby -rubygems -e 'print Gem.searcher.find("net/irc").full_gem_path+"/examples"'`
61
62
 
62
- Lingr:
63
- $ sudo gem install pit # for configuration
64
- $ ./lig.rb
65
-
66
63
  Twitter:
67
- $ ./tig.rb
64
+ $ ./tig.rb -f >> /dev/null 2>&1
68
65
 
69
66
  Wassr:
70
67
  $ ./wig.rb
71
68
 
72
69
  Run as daemon in default. If you want to help:
73
70
 
74
- $ ./lig.rb --help
75
- Usage: ./lig.rb [opts]
71
+ $ ./tig.rb --help
72
+ Usage: tig.rb [opts]
76
73
 
77
74
 
78
75
  Options:
79
- -p, --port [PORT=16669] listen port number
80
- -h, --host [HOST=localhost] listen host
76
+ -p, --port [PORT=16668] port number to listen
77
+ -h, --host [HOST=localhost] host name or IP address to listen
81
78
  -l, --log LOG log file
82
- -a, --api_key API_KEY Your api key on Lingr
83
79
  --debug Enable debug mode
80
+ -f, --foreground run foreground
81
+ -n [user name or email address]
82
+ --name
84
83
 
85
84
 
86
85
  == Copyright
87
86
 
88
- This library is based on RICE ( http://arika.org/ruby/rice ) written by akira yamada.
87
+ This library is based on RICE <http://arika.org/ruby/rice> written by akira yamada.
89
88
 
90
89
  Author:: cho45 <cho45@lowreal.net>
91
- Copyright:: Copyright (c) 2008 cho45
90
+ Copyright:: Copyright (c) 2008-2009 cho45
92
91
  License:: Ruby's
data/Rakefile CHANGED
@@ -22,7 +22,7 @@ DESCRIPTION = "library for implementing IRC server and client"
22
22
  RUBYFORGE_PROJECT = "lowreal"
23
23
  HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
24
24
  BIN_FILES = %w( )
25
- VERS = Net::IRC::VERSION
25
+ VERS = Net::IRC::VERSION.dup
26
26
 
27
27
  REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
28
28
  CLEAN.include ['**/.*.sw?', '*.gem', '.config']
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
-
2
+ # vim:fileencoding=UTF-8:
3
3
 
4
4
  $LOAD_PATH << "lib"
5
5
  $LOAD_PATH << "../lib"
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
-
2
+ # vim:fileencoding=UTF-8:
3
3
 
4
4
  $LOAD_PATH << "lib"
5
5
  $LOAD_PATH << "../lib"
@@ -1,9 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
+ # vim:fileencoding=UTF-8:
2
3
 
3
4
  $LOAD_PATH << "lib"
4
5
  $LOAD_PATH << "../lib"
5
6
 
6
- $KCODE = "u" # json use this
7
+ $KCODE = "u" if RUBY_VERSION < "1.9" # json use this
7
8
 
8
9
  require "rubygems"
9
10
  require "net/irc"
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
+ # vim:fileencoding=UTF-8:
2
3
  =begin
3
4
 
4
-
5
5
  ## Licence
6
6
 
7
7
  Ruby's by cho45
@@ -11,7 +11,7 @@ Ruby's by cho45
11
11
  $LOAD_PATH << "lib"
12
12
  $LOAD_PATH << "../lib"
13
13
 
14
- $KCODE = "u" # json use this
14
+ $KCODE = "u" if RUBY_VERSION < "1.9" # json use this
15
15
 
16
16
  require "rubygems"
17
17
  require "json"
@@ -20,6 +20,8 @@ require "mechanize"
20
20
  require "sdbm"
21
21
  require "tmpdir"
22
22
  require "nkf"
23
+ require "hpricot"
24
+ WWW::Mechanize.html_parser = Hpricot
23
25
 
24
26
  class HatenaStarStream < Net::IRC::Server::Session
25
27
  def server_name
@@ -101,25 +103,34 @@ class HatenaStarStream < Net::IRC::Server::Session
101
103
  db = SDBM.open("#{Dir.tmpdir}/#{@real}.db", 0666)
102
104
  entries.reverse_each do |entry|
103
105
  next if stars[entry].empty?
104
- s, quoted = stars[entry].select {|star|
105
- id = "#{entry}::#{star.values_at("name", "quote").inspect}"
106
+ i = 0
107
+ s = stars[entry].select {|star|
108
+ id = "#{entry}::#{i}"
109
+ i += 1
106
110
  if db.include?(id)
107
111
  false
108
112
  else
109
113
  db[id] = "1"
110
114
  true
111
115
  end
112
- }.partition {|star| star["quote"].empty? }
113
- post server_name, NOTICE, main_channel, "#{entry} #{title(entry)}" if s.length + quoted.length > 0
114
- post server_name, NOTICE, main_channel, s.map {|star| "id:#{star["name"]}" }.join(" ") unless s.empty?
115
-
116
- quoted.each do |star|
117
- post server_name, NOTICE, main_channel, "id:#{star["name"]} '#{star["quote"]}'"
116
+ }
117
+
118
+ post server_name, NOTICE, main_channel, "↓ #{entry} #{title(entry)}" if s.length > 0
119
+
120
+ s.each do |star|
121
+ post server_name, NOTICE, main_channel, "id:%s \x03%d%s%s\x030 %s" % [
122
+ star.name,
123
+ Star::Colors[star.color],
124
+ ((star.color == "normal") ? "☆" : "★") * ([star.count, 10].min),
125
+ (star.count > 10) ? "(...#{star.count})" : "",
126
+ star.quote
127
+ ]
118
128
  end
119
129
  end
120
130
 
121
131
  rescue Exception => e
122
132
  @log.error e.inspect
133
+ @log.error e.backtrace
123
134
  ensure
124
135
  db.close rescue nil
125
136
  end
@@ -138,7 +149,25 @@ class HatenaStarStream < Net::IRC::Server::Session
138
149
  if i["stars"].any? {|star| star.kind_of? Numeric }
139
150
  i = JSON.load(@ua.get("http://s.hatena.ne.jp/entry.json?uri=#{URI.escape(i["uri"])}").body)["entries"].first
140
151
  end
141
- r.update(i["uri"] => i["stars"])
152
+ stars = []
153
+
154
+ if i["colored_stars"]
155
+ i["colored_stars"].each do |s|
156
+ s["stars"].each do |j|
157
+ stars << Star.new(j, s["color"])
158
+ end
159
+ end
160
+ end
161
+
162
+ i["stars"].each do |j|
163
+ star = Star.new(j)
164
+ if star.quote.empty? && stars.last && stars.last.name == star.name && stars.last.color == "normal"
165
+ stars.last.count += 1
166
+ else
167
+ stars << star
168
+ end
169
+ end
170
+ r.update(i["uri"] => stars)
142
171
  }
143
172
  if n < entries.length
144
173
  ret.update retrive_stars(entries, n)
@@ -185,6 +214,22 @@ class HatenaStarStream < Net::IRC::Server::Session
185
214
  finish
186
215
  end
187
216
  end
217
+
218
+ class Star < OpenStruct
219
+ Colors = {
220
+ "purple" => 6,
221
+ "blue" => 2,
222
+ "green" => 3,
223
+ "red" => 4,
224
+ "normal" => 8,
225
+ }
226
+
227
+ def initialize(obj, col="normal")
228
+ super(obj)
229
+ self.count = obj["count"].to_i + 1
230
+ self.color = col
231
+ end
232
+ end
188
233
  end
189
234
 
190
235
  if __FILE__ == $0
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # vim:encoding=utf-8:
2
+ # vim:fileencoding=UTF-8:
3
3
  =begin
4
4
  # hig.rb
5
5
 
@@ -90,7 +90,7 @@ Ruby's by cho45
90
90
  $LOAD_PATH << "lib"
91
91
  $LOAD_PATH << "../lib"
92
92
 
93
- $KCODE = "u" # json use this
93
+ $KCODE = "u" if RUBY_VERSION < "1.9" # json use this
94
94
 
95
95
  require "rubygems"
96
96
  require "net/irc"
@@ -142,7 +142,6 @@ class HaikuIrcGateway < Net::IRC::Server::Session
142
142
  super
143
143
  @channels = {}
144
144
  @user_agent = "#{self.class}/#{server_version} (hig.rb)"
145
- @map = nil
146
145
  @counters = {} # for jabber fav
147
146
  end
148
147
 
@@ -228,7 +227,7 @@ class HaikuIrcGateway < Net::IRC::Server::Session
228
227
  end
229
228
 
230
229
  def on_privmsg(m)
231
- return on_ctcp(m[0], ctcp_decoding(m[1])) if m.ctcp?
230
+ return m[1].ctcps.each {|ctcp| on_ctcp(m[0], ctcp) } if m.ctcp?
232
231
  retry_count = 3
233
232
  ret = nil
234
233
  target, message = *m.params
@@ -242,17 +241,24 @@ class HaikuIrcGateway < Net::IRC::Server::Session
242
241
  else
243
242
  channel = "" if "##{channel}" == main_channel
244
243
  rid = rid_for(reply) if reply
245
- ret = api("statuses/update", {"status" => message, "in_reply_to_status_id" => rid, "keyword" => channel})
244
+ if @typo
245
+ log "typo mode. requesting..."
246
+ message.gsub!(/\\n/, "\n")
247
+ file = Net::HTTP.get(URI("http://lab.lowreal.net/test/haiku.rb/?text=" + URI.escape(message)))
248
+ ret = api("statuses/update", {"file" => file, "in_reply_to_status_id" => rid, "keyword" => channel})
249
+ else
250
+ ret = api("statuses/update", {"status" => message, "in_reply_to_status_id" => rid, "keyword" => channel})
251
+ end
246
252
  log "Status Updated via API"
247
253
  end
248
254
  raise ApiFailed, "API failed" unless ret
249
255
  check_timeline
250
256
  rescue => e
251
- @log.error [retry_count, e.inspect].inspect
257
+ @log.error [retry_count, e.message, e.inspect, e.backtrace].inspect
252
258
  if retry_count > 0
253
259
  retry_count -= 1
254
260
  @log.debug "Retry to setting status..."
255
- retry
261
+ # retry
256
262
  else
257
263
  log "Some Error Happened on Sending #{message}. #{e}"
258
264
  end
@@ -315,10 +321,13 @@ class HaikuIrcGateway < Net::IRC::Server::Session
315
321
  else
316
322
  post nil, NOTICE, main_channel, "No such id #{tid}"
317
323
  end
324
+ when "typo"
325
+ @typo = !@typo
326
+ post nil, NOTICE, main_channel, "typo mode: #{@typo}"
318
327
  end
319
328
  rescue ApiFailed => e
320
329
  log e.inspect
321
- end
330
+ end; private :on_ctcp
322
331
 
323
332
  def on_whois(m)
324
333
  nick = m.params[0]
@@ -553,7 +562,32 @@ class HaikuIrcGateway < Net::IRC::Server::Session
553
562
  req = nil
554
563
  if require_post?(path)
555
564
  req = Net::HTTP::Post.new(uri.path)
556
- req.body = uri.query
565
+ if q["file"]
566
+ boundary = (rand(0x1_00_00_00_00_00) + 0x1_00_00_00_00_00).to_s(16)
567
+ @log.info boundary
568
+ req["content-type"] = "multipart/form-data; boundary=#{boundary}"
569
+
570
+ body = ""
571
+ q.each do |k, v|
572
+ body << "--#{boundary}\r\n"
573
+ if k == "file"
574
+ body << "Content-Disposition: form-data; name=\"#{k}\"; filename=\"temp.png\";\r\n"
575
+ body << "Content-Transfer-Encoding: binary\r\n"
576
+ body << "Content-Type: image/png\r\n"
577
+ else
578
+ body << "Content-Disposition: form-data; name=\"#{k}\";\r\n"
579
+ end
580
+ body << "\r\n"
581
+ body << v.to_s
582
+ body << "\r\n"
583
+ end
584
+ body << "--#{boundary}--\r\n"
585
+
586
+ req.body = body
587
+ uri.query = ""
588
+ else
589
+ req.body = uri.query
590
+ end
557
591
  else
558
592
  req = Net::HTTP::Get.new(uri.request_uri)
559
593
  end
@@ -604,20 +638,18 @@ class HaikuIrcGateway < Net::IRC::Server::Session
604
638
  end
605
639
 
606
640
  class TypableMap < Hash
607
- Roma = %w|k g ky gy s z sh j t d ch n ny h b p hy by py m my y r ry w v q|.unshift("").map {|consonant|
608
- case
609
- when consonant.size > 1, consonant == "y"
610
- %w|a u o|
611
- when consonant == "q"
612
- %w|a i e o|
613
- else
614
- %w|a i u e o|
641
+ Roman = %w[
642
+ k g ky gy s z sh j t d ch n ny h b p hy by py m my y r ry w v q
643
+ ].unshift("").map do |consonant|
644
+ case consonant
645
+ when "y", /\A.{2}/ then %w|a u o|
646
+ when "q" then %w|a i e o|
647
+ else %w|a i u e o|
615
648
  end.map {|vowel| "#{consonant}#{vowel}" }
616
- }.flatten
649
+ end.flatten
617
650
 
618
- def initialize(size=1)
619
- @seq = Roma
620
- @map = {}
651
+ def initialize(size = 1)
652
+ @seq = Roman
621
653
  @n = 0
622
654
  @size = size
623
655
  end
@@ -635,7 +667,7 @@ class HaikuIrcGateway < Net::IRC::Server::Session
635
667
  id = generate(@n)
636
668
  self[id] = obj
637
669
  @n += 1
638
- @n = @n % (@seq.size ** @size)
670
+ @n %= @seq.size ** @size
639
671
  id
640
672
  end
641
673
  alias << push
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # vim:fileencoding=UTF-8:
2
3
  =begin
3
4
 
4
5
  # iig.rb
@@ -22,7 +23,7 @@ Configuration example for Tiarra <http://coderepos.org/share/wiki/Tiarra>.
22
23
  identica {
23
24
  host: localhost
24
25
  port: 16672
25
- name: username@example.com athack tid ratio=32:1 replies=6
26
+ name: username@example.com athack tid ratio=77:1:12 replies
26
27
  password: password on Identi.ca
27
28
  in-encoding: utf8
28
29
  out-encoding: utf8
@@ -64,7 +65,6 @@ Apply ID to each message for make favorites by CTCP ACTION.
64
65
  14 => grey
65
66
  15 => lightgrey silver
66
67
 
67
-
68
68
  ### jabber=<jid>:<pass>
69
69
 
70
70
  If `jabber=<jid>:<pass>` option specified,
@@ -89,61 +89,41 @@ Use IM instead of any APIs (e.g. post)
89
89
 
90
90
  ### checkrls=<interval seconds>
91
91
 
92
+ ## Feed
93
+
94
+ <http://coderepos.org/share/log/lang/ruby/net-irc/trunk/examples/iig.rb?limit=100&mode=stop_on_copy&format=rss>
95
+
92
96
  ## License
93
97
 
94
98
  Ruby's by cho45
95
99
 
96
100
  =end
97
101
 
98
- $LOAD_PATH << "lib"
99
- $LOAD_PATH << "../lib"
100
-
101
- $KCODE = "u" # json use this
102
+ $LOAD_PATH << "lib" << "../lib"
103
+ $KCODE = "u" if RUBY_VERSION < "1.9" # json use this
102
104
 
103
105
  require "rubygems"
104
106
  require "net/irc"
105
107
  require "net/http"
106
108
  require "uri"
107
- require "json"
108
109
  require "socket"
109
110
  require "time"
110
111
  require "logger"
111
112
  require "yaml"
112
113
  require "pathname"
113
114
  require "cgi"
114
-
115
- Net::HTTP.version_1_2
115
+ require "json"
116
116
 
117
117
  class IdenticaIrcGateway < Net::IRC::Server::Session
118
- def server_name
119
- "identicagw"
120
- end
121
-
122
- def server_version
123
- "0.0.0"
124
- end
125
-
126
- def main_channel
127
- "#Identi.ca"
128
- end
118
+ def server_name; "identicagw" end
119
+ def server_version; "0.0.0" end
120
+ def main_channel; "#Identi.ca" end
121
+ def api_base; URI("http://identi.ca/api/") end
122
+ def api_source; "iig.rb" end
123
+ def jabber_bot_id; "update@identi.ca" end
124
+ def hourly_limit; 100 end
129
125
 
130
- def api_base
131
- URI("http://identi.ca/api/")
132
- end
133
-
134
- def api_source
135
- "iig.rb"
136
- end
137
-
138
- def jabber_bot_id
139
- "update@identi.ca"
140
- end
141
-
142
- def hourly_limit
143
- 60
144
- end
145
-
146
- class ApiFailed < StandardError; end
126
+ class APIFailed < StandardError; end
147
127
 
148
128
  def initialize(*args)
149
129
  super
@@ -151,7 +131,6 @@ class IdenticaIrcGateway < Net::IRC::Server::Session
151
131
  @channels = [] # joined channels (groups)
152
132
  @user_agent = "#{self.class}/#{server_version} (#{File.basename(__FILE__)})"
153
133
  @config = Pathname.new(ENV["HOME"]) + ".iig"
154
- @map = nil
155
134
  load_config
156
135
  end
157
136
 
@@ -201,7 +180,7 @@ class IdenticaIrcGateway < Net::IRC::Server::Session
201
180
  loop do
202
181
  begin
203
182
  check_friends
204
- rescue ApiFailed => e
183
+ rescue APIFailed => e
205
184
  @log.error e.inspect
206
185
  rescue Exception => e
207
186
  @log.error e.inspect
@@ -221,7 +200,7 @@ class IdenticaIrcGateway < Net::IRC::Server::Session
221
200
  begin
222
201
  check_timeline
223
202
  # check_direct_messages
224
- rescue ApiFailed => e
203
+ rescue APIFailed => e
225
204
  @log.error e.inspect
226
205
  rescue Exception => e
227
206
  @log.error e.inspect
@@ -240,7 +219,7 @@ class IdenticaIrcGateway < Net::IRC::Server::Session
240
219
  loop do
241
220
  begin
242
221
  check_replies
243
- rescue ApiFailed => e
222
+ rescue APIFailed => e
244
223
  @log.error e.inspect
245
224
  rescue Exception => e
246
225
  @log.error e.inspect
@@ -254,15 +233,15 @@ class IdenticaIrcGateway < Net::IRC::Server::Session
254
233
  end
255
234
 
256
235
  def on_disconnected
257
- @check_friends_thread.kill rescue nil
258
- @check_replies_thread.kill rescue nil
259
- @check_timeline_thread.kill rescue nil
260
- @im_thread.kill rescue nil
261
- @im.disconnect rescue nil
236
+ @check_friends_thread.kill rescue nil
237
+ @check_replies_thread.kill rescue nil
238
+ @check_timeline_thread.kill rescue nil
239
+ @im_thread.kill rescue nil
240
+ @im.disconnect rescue nil
262
241
  end
263
242
 
264
243
  def on_privmsg(m)
265
- return on_ctcp(m[0], ctcp_decoding(m[1])) if m.ctcp?
244
+ return m[1].ctcps.each {|ctcp| on_ctcp(m[0], ctcp) } if m.ctcp?
266
245
  retry_count = 3
267
246
  ret = nil
268
247
  target, message = *m.params
@@ -278,7 +257,7 @@ class IdenticaIrcGateway < Net::IRC::Server::Session
278
257
  # direct message
279
258
  ret = api("direct_messages/new", {"user" => target, "text" => message})
280
259
  end
281
- raise ApiFailed, "API failed" unless ret
260
+ raise APIFailed, "API failed" unless ret
282
261
  log "Status Updated"
283
262
  rescue => e
284
263
  @log.error [retry_count, e.inspect].inspect
@@ -363,9 +342,9 @@ class IdenticaIrcGateway < Net::IRC::Server::Session
363
342
  location = location.empty? ? "nowhere" : "in #{location}"
364
343
  post server_name, NOTICE, main_channel, "You are #{location} now."
365
344
  end
366
- rescue ApiFailed => e
345
+ rescue APIFailed => e
367
346
  log e.inspect
368
- end
347
+ end; private :on_ctcp
369
348
 
370
349
  def on_whois(m)
371
350
  nick = m.params[0]
@@ -667,19 +646,19 @@ class IdenticaIrcGateway < Net::IRC::Server::Session
667
646
  when Net::HTTPOK # 200
668
647
  ret = JSON.parse(ret.body.gsub(/'(y(?:es)?|no?|true|false|null)'/, '"\1"'))
669
648
  if ret.kind_of?(Hash) && !opt[:avoid_error] && ret["error"]
670
- raise ApiFailed, "Server Returned Error: #{ret["error"]}"
649
+ raise APIFailed, "Server Returned Error: #{ret["error"]}"
671
650
  end
672
651
  ret
673
652
  when Net::HTTPNotModified # 304
674
653
  []
675
654
  when Net::HTTPBadRequest # 400
676
655
  # exceeded the rate limitation
677
- raise ApiFailed, "#{ret.code}: #{ret.message}"
656
+ raise APIFailed, "#{ret.code}: #{ret.message}"
678
657
  else
679
- raise ApiFailed, "Server Returned #{ret.code} #{ret.message}"
658
+ raise APIFailed, "Server Returned #{ret.code} #{ret.message}"
680
659
  end
681
660
  rescue Errno::ETIMEDOUT, JSON::ParserError, IOError, Timeout::Error, Errno::ECONNRESET => e
682
- raise ApiFailed, e.inspect
661
+ raise APIFailed, e.inspect
683
662
  end
684
663
 
685
664
  def message(sender, target, str)
@@ -692,7 +671,7 @@ class IdenticaIrcGateway < Net::IRC::Server::Session
692
671
  end
693
672
 
694
673
  def log(str)
695
- str.gsub!(/\r?\n|\r/, " ")
674
+ str.gsub!(/\r\n|[\r\n]/, " ")
696
675
  post server_name, NOTICE, main_channel, str
697
676
  end
698
677
 
@@ -712,20 +691,18 @@ class IdenticaIrcGateway < Net::IRC::Server::Session
712
691
  end
713
692
 
714
693
  class TypableMap < Hash
715
- Roman = %w|k g ky gy s z sh j t d ch n ny h b p hy by py m my y r ry w v q|.unshift("").map {|consonant|
716
- case
717
- when consonant.size > 1, consonant == "y"
718
- %w|a u o|
719
- when consonant == "q"
720
- %w|a i e o|
721
- else
722
- %w|a i u e o|
694
+ Roman = %w[
695
+ k g ky gy s z sh j t d ch n ny h b p hy by py m my y r ry w v q
696
+ ].unshift("").map do |consonant|
697
+ case consonant
698
+ when "y", /\A.{2}/ then %w|a u o|
699
+ when "q" then %w|a i e o|
700
+ else %w|a i u e o|
723
701
  end.map {|vowel| "#{consonant}#{vowel}" }
724
- }.flatten
702
+ end.flatten
725
703
 
726
704
  def initialize(size = 1)
727
705
  @seq = Roman
728
- @map = {}
729
706
  @n = 0
730
707
  @size = size
731
708
  end
@@ -743,7 +720,7 @@ class IdenticaIrcGateway < Net::IRC::Server::Session
743
720
  id = generate(@n)
744
721
  self[id] = obj
745
722
  @n += 1
746
- @n = @n % (@seq.size ** @size)
723
+ @n %= @seq.size ** @size
747
724
  id
748
725
  end
749
726
  alias << push
@@ -814,27 +791,27 @@ if __FILE__ == $0
814
791
  opts[:logger] = Logger.new(opts[:log], "daily")
815
792
  opts[:logger].level = opts[:debug] ? Logger::DEBUG : Logger::INFO
816
793
 
817
- # def daemonize(foreground = false)
818
- # trap("SIGINT") { exit! 0 }
819
- # trap("SIGTERM") { exit! 0 }
820
- # trap("SIGHUP") { exit! 0 }
821
- # return yield if $DEBUG || foreground
822
- # Process.fork do
823
- # Process.setsid
824
- # Dir.chdir "/"
825
- # File.open("/dev/null") {|f|
826
- # STDIN.reopen f
827
- # STDOUT.reopen f
828
- # STDERR.reopen f
829
- # }
830
- # yield
831
- # end
832
- # exit! 0
833
- # end
834
-
835
- # daemonize(opts[:debug] || opts[:foreground]) do
794
+ #def daemonize(foreground = false)
795
+ # trap("SIGINT") { exit! 0 }
796
+ # trap("SIGTERM") { exit! 0 }
797
+ # trap("SIGHUP") { exit! 0 }
798
+ # return yield if $DEBUG || foreground
799
+ # Process.fork do
800
+ # Process.setsid
801
+ # Dir.chdir "/"
802
+ # File.open("/dev/null") {|f|
803
+ # STDIN.reopen f
804
+ # STDOUT.reopen f
805
+ # STDERR.reopen f
806
+ # }
807
+ # yield
808
+ # end
809
+ # exit! 0
810
+ #end
811
+
812
+ #daemonize(opts[:debug] || opts[:foreground]) do
836
813
  Net::IRC::Server.new(opts[:host], opts[:port], IdenticaIrcGateway, opts).start
837
- # end
814
+ #end
838
815
  end
839
816
 
840
817
  # Local Variables: