net-irc 0.0.7 → 0.0.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.
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: