require 'xmpp4r' require 'xmpp4r/muc/helper/mucclient' require_relative 'sasl' require_relative 'config' module Lain Version = '0.1' class Bot def initialize $stderr.puts "Lain #{Version} starting..." @modules = {} $stderr.puts 'Loading modules...' Config::Modules.each { |mod, cfg| require_relative "modules/#{mod}" @modules[mod] = Modules.const_get(mod).new(self, cfg) } @commands = @modules.values.reduce({}) { |c, mod| c.merge mod.commands }.to_a.sort $stderr.puts 'Connecting...' @cl = Jabber::Client.new(Jabber::JID.new(Config::JID)) @cl.connect @cl.auth(Config::Password) @cl.send(Jabber::Presence.new) @mucs = {} Config::Rooms.each { |r| muc = Jabber::MUC::MUCClient.new(@cl) @mucs[r] = muc muc.add_message_callback { |msg| unless msg.from == r @modules.each { | _, mod | begin mod.on_message muc, msg rescue end } end } $stderr.puts "Joining room `#{r}'..." muc.join(r) begin muc.configure rescue end } $stderr.puts 'Startup finished.' end def commands @commands end def run @mainthread = Thread.current Thread.stop end def close @cl.close end end end