# 簡単なTwitter bot
#
require 'rubygems'
require 'xmpp4r'
require 'kconv'

class Reciever
  attr_accessor :client

  # user : Jabber ID
  # pass : パスワード
  def initialize(user, pass)
    @end = false
    Jabber::debug = true

    # Jabber クライアントをサーバに接続
    @client = Jabber::Client.new(Jabber::JID.new(user), false)
    @client.connect
    @client.auth(pass)
    @client.send(Jabber::Presence::new)

    thread = Thread.current

    # 受信メッセージをパースするコールバック
    @client.add_message_callback do |message|
      unless message.type == :error
        if message.body =~ /Direct from (.*):/ # DirectMessage が誰からのものか
          sender = $1
          msg = message.body.split(/\r?\n/)
          msg.shift # Direct from ... を削る
          msg.pop # 末尾の行も削る
          body = msg.join

          #
          # ここからあとで、自分の好きなことをする :)
          #
          if body =~ /!abort/ # abort といわれたら終わる
            @client.send(Jabber::Message::new(message.from, "d #{sender} aborting...").set_type(:chat))
            thread.wakeup
          else
            # ここでは単にechoするだけ
            xxx = Kconv.toutf8("d #{sender}\n#{message.body}")
            @client.send(Jabber::Message::new(message.from, xxx).set_type(:chat))
          end # if body
        end # if direct
      end # unless error
    end # callback

    @watcher = Thread.new do
      while not @end
        # 自分の生存をJabberサーバにアピール
        @client.send(Jabber::Presence::new)
        sleep 30
      end
    end
  end

  def close
    @client.close
    @end = true
    @watcher.join
  end
end # Reciever
