Sha256: 9702aacbed3d71793382f1073dba3e9c2d6bf9904f75a0b971af943199e4a129

Contents?: true

Size: 1.79 KB

Versions: 30

Compression:

Stored size: 1.79 KB

Contents

#!/usr/bin/ruby

$:.unshift '../../../../../lib'

require 'xmpp4r'
require 'xmpp4r/version/iq/version'
require 'xmpp4r/version/helper/simpleresponder'


# A Hash containing all Version Query answers with their JIDs as keys:
versions = {}

# Command line argument checking

if ARGV.size != 2
  puts("Usage: ./versionbot.rb <jid> <password>")
  exit
end

# Building up the connection

#Jabber::debug = true

jid = Jabber::JID.new(ARGV[0])

cl = Jabber::Client.new(jid)
cl.connect
cl.auth(ARGV[1])

cl.on_exception { |*a|
  p a[0].backtrace
  exit!
}

# I'm not sure about the portability of 'uname -sr' here ;-)
# but that's all needed to answer version queries:
Jabber::Version::SimpleResponder.new(cl, 'xmpp4r Versionbot example', Jabber::XMPP4R_VERSION, IO.popen('uname -sr').readlines.to_s.strip)


cl.add_iq_callback { |iq|
  # Filter for version query results
  if (iq.type == :result) && iq.query.kind_of?(Jabber::Version::IqQueryVersion)
    puts "Version query result from #{iq.from}"
    # Keep track of results per JID
    versions[iq.from] = iq.query
    # Print details
    puts "  Name: #{iq.query.iname.inspect}"
    puts "  Version: #{iq.query.version.inspect}"
    puts "  OS: #{iq.query.os.inspect}"
  end
}

cl.add_presence_callback { |pres|
  # Already fingerprinted or offline?
  unless versions.has_key?(pres.from) || (pres.type == :unavailable) || (pres.type == :error)
    # Construct a new query
    iq = Jabber::Iq.new(:get, pres.from)
    # and ask for the version
    iq.query = Jabber::Version::IqQueryVersion.new
    puts "Asking #{iq.to} for his/her/its version"
    versions[pres.from] = :asking
    cl.send(iq)
  end
}

# Send initial presence
cl.send(Jabber::Presence.new.set_show(:xa).set_status('I am the evil fingerprinting robot'))

# Main loop:
loop do
  cl.process
  sleep(1)
end

cl.close

Version data entries

30 entries across 30 versions & 12 rubygems

Version Path
brontes3d-xmpp4r-0.4 data/doc/xmpp4r/examples/basic/versionbot.rb
bryanl-xmpp4r-0.3.2 data/doc/xmpp4r/examples/basic/versionbot.rb
edavey-xmpp4r-0.4.1 data/doc/xmpp4r/examples/basic/versionbot.rb
edavey-xmpp4r-0.4.2 data/doc/xmpp4r/examples/basic/versionbot.rb
edavey-xmpp4r-0.4 data/doc/xmpp4r/examples/basic/versionbot.rb
heipei-xmpp4r-0.3.2 data/doc/xmpp4r/examples/basic/versionbot.rb
ln-xmpp4r-0.5 data/doc/xmpp4r/examples/basic/versionbot.rb
mojodna-xmpp4r-0.4.0.2 data/doc/xmpp4r/examples/basic/versionbot.rb
mojodna-xmpp4r-0.4.0.3 data/doc/xmpp4r/examples/basic/versionbot.rb
seanohalpin-xmpp4r-0.4.1 data/doc/xmpp4r/examples/basic/versionbot.rb
xmpp4r-0.5.6 data/doc/xmpp4r/examples/basic/versionbot.rb
xmpp4r-0.5.5 data/doc/xmpp4r/examples/basic/versionbot.rb
mad-p-xmpp4r-0.6.3 data/doc/xmpp4r/examples/basic/versionbot.rb
mad-p-xmpp4r-0.6.2 data/doc/xmpp4r/examples/basic/versionbot.rb
mad-p-xmpp4r-0.6.1 data/doc/xmpp4r/examples/basic/versionbot.rb
mad-p-xmpp4r-0.6.0 data/doc/xmpp4r/examples/basic/versionbot.rb
cerberus-0.8.0 lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/versionbot.rb
cerberus-0.7.9 lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/versionbot.rb
edavis10-cerberus-0.7.8 lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/versionbot.rb
cerberus-0.7.8 lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/versionbot.rb