[僕] irc.lazy-people.org#project に thanksbot を復帰させました。

僕ト云フ事

たろマークはてなブックマーク

2009年10月12日

[irc][lazy-people][ruby] 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 プログラムのような気がします。
既存のライブラリを組み合わせただけでお手軽でした。ありがとうありがとう!

プログラミング言語 Ruby
まつもと ゆきひろ David Flanagan
オライリージャパン
売り上げランキング: 13443
おすすめ度の平均: 4.0
5 基本書にふさわしい本
5 rubyマスターになるために
3 鬱にされる鬱然たるRuby教科書
2 For Rubist
まつもとゆきひろ コードの世界‾スーパー・プログラマになる14の思考法
まつもとゆきひろ
日経BP出版センター
売り上げランキング: 40925
おすすめ度の平均: 4.0
4 Rubyに導入された思考法

トラックバック

このエントリーのトラックバックURL:
http://vkgtaro.jp/cgi-bin/mt/mt-tb.cgi/667

コメントを投稿