yukata

日々出会ったIT技術関連の所感やら紹介やら

XMMPボットサンプル

たいぶ古いけど、以下を参考にXMPPのボットのサンプルを試してみました。

http://d.hatena.ne.jp/Syo-Takasaki/20071121/1195644386

  • 環境
    • OpenFire version 3.8.1
    • ruby 1.9.3


OpenFireに対してTLSで接続しようとすると、なんかうまくいかないようです。

Jabber::Client.new した後に、インスタンスの中のスコープで
@allow_tlsをfalseにするとうまくいきました。

require 'xmpp4r'

user = "USER@DOMAIN"
pass = "PASS"

client = Jabber::Client.new(Jabber::JID.new("#{user}/bot"))
client.instance_eval do
  @allow_tls = false
end
client.connect('HOST', PORT)
client.auth(pass)
client.send(Jabber::Presence.new.set_show(:chat))
puts "Connected ! send messages to #{user}."

mainthread = Thread.current
  client.add_message_callback { |msg|
    if msg.body
      puts "from:#{msg.from} body:#{msg.body}"

      m2 = Jabber::Message.new(msg.from, "ECHO:#{msg.body}")
      m2.type = msg.type;
      client.send(m2)

      # Exit
      if msg.body == 'exit'
        m2 = Jabber::Message.new(msg.from, "Exiting ...")
        m2.type = msg.type;
        client.send(m2)
        mainthread.wakeup
      end
    end
  }
Thread.stop;
client.close;
puts("Done.");