たろマーク (はてなブックマーク)
-
[ javascript ][ test ] Rspec ライクな Javascript テストフレームワーク
-
[ ezpublish ] eZ のデータソースを CakePHP で使うためのアダプタ。Rails とか Django にこれを移植すれば!
-
[ iquestioner ]
-
[ ruby ]
-
[ lazy-people ] おつでしたー
■ irc.lazy-people.org#project に thanksbot を復帰させました。
少し間が開いてしまいましたが、irc.lazy-people.org#project にありがとうを伝える thanksbot を放流しました。
この bot に対してありがとうを伝えると http://lazy-people.org/#ありがとう新着順 の一覧に載ります。まぁ、単純なボットですね。
このチャンネルには元々 thanksbot がいたのですが、lazy-people.org Xen 化作戦失敗以降復帰させていなかったのでした。
旧 thanksbot は mojunc という tomyhero 製 Web API を使っていたのですが、これを復帰させるのがめんどうだったので Wedata を使うことにしました。サーセン >_<
Wedata の使い方はこれで良いのかも謎w
そして、せっかくだからと覚え立ての ruby を使って書くことにしました。
IRC の bot 化には Net::IRC::Client を使い、Wedata への投稿には、こちらのモジュールを使わせていただきました。オリジナルの wedata.rb は、JsonParser に依存していたのですが、gem でインストールできる JSON を使うように少し修正しています。(修正したコード)
新規追加しかしないから wedata.rb は大げさだったかも。
#!/usr/bin/env ruby
# encoding: utf-8
$LOAD_PATH << "lib"
require 'rubygems'
require 'net/irc'
require 'wedata'
require 'observer'
require 'yaml'
require 'pp'
thanks_config = YAML.load_file('config.yaml')
class ThanksBot < Net::IRC::Client
include Observable
def initialize(*args)
p args
@channel = args[2]
args.delete_at 2
super
end
def on_rpl_welcome(m)
post JOIN, @channel
end
def on_privmsg(m)
if match = m[1].match(/^thanksbot:\s*(.*)/)
changed
notify_observers('', match[0])
post NOTICE, m[0], "#{m.prefix.nick}: #{match[0]}"
end
end
end
class ThanksDB < WedataDatabase
def update(name, message)
create_item(name, { 'message' => message })
end
end
thanksbot = ThanksBot.new(thanks_config['irc']['host'], thanks_config['irc']['port'], thanks_config['irc']['channel'],thanks_config['irc']['nicks'])
thanksdb = ThanksDB.new('thanks', thanks_config['wedata_api'])
thanksbot.add_observer(thanksdb)
thanksbot.start
ソースはここにあります。
Net::IRC::Client を継承した ThankBot と WedataDatabase を継承した ThanksDB は ovserver ライブラリを使って observer パターンで動作をひもづけてます。まつもとゆきひろ コードの世界を読んでいて、これを試して見たかったというのが大きいかもw
たぶんなにげに初めて書いた ruby プログラムのような気がします。
既存のライブラリを組み合わせただけでお手軽でした。ありがとうありがとう!
オライリージャパン
売り上げランキング: 13443

基本書にふさわしい本
rubyマスターになるために
鬱にされる鬱然たるRuby教科書
For Rubist日経BP出版センター
売り上げランキング: 40925

Rubyに導入された思考法トラックバック
このエントリーのトラックバックURL:
http://vkgtaro.jp/cgi-bin/mt/mt-tb.cgi/667






