Commit 0a2d5db
Changed files (3)
lib
lib/del/connection.rb
@@ -0,0 +1,67 @@
+module Del
+ class Connection
+ attr_reader :configuration, :rooms, :users
+
+ def initialize(configuration:, users:, rooms:)
+ @configuration = configuration
+ @rooms = rooms
+ @users = users
+ end
+
+ def connect(robot)
+ client.on_exception do |error, connection, error_source|
+ disconnect
+ end
+ client.connect(configuration[:host])
+ sleep 0.0001 until client.is_connected?
+ client.auth(configuration[:password])
+ roster = Jabber::Roster::Helper.new(client, false)
+ roster.add_update_callback do |old_item, item|
+ users.create(item) if item
+ end
+ roster.get_roster
+ roster.wait_for_roster
+ #@mention_name = roster[jid].attributes["mention_name"]
+ client.add_message_callback do |message|
+ robot.receive_message(message)
+ end
+ client.send(Jabber::Presence.new(:chat))
+ list_rooms(configuration[:muc_domain]).each do |room|
+ rooms.upsert(room)
+ end
+ end
+
+ def deliver(jid, message)
+ message = Jabber::Message.new(jid, encode_string(message))
+ message.type = :chat
+ client.send(message)
+ end
+
+ def disconnect
+ puts "byte me!"
+ client.close
+ end
+
+ private
+
+ def client
+ @client ||= Jabber::Client.new(jid)
+ end
+
+ def jid
+ jid = Jabber::JID.new(configuration[:jid])
+ jid.resource = "bot"
+ jid
+ end
+
+ def list_rooms(muc_domain)
+ Jabber::MUC::MUCBrowser.new(client).muc_rooms(muc_domain).map do |jid, name|
+ jid.to_s
+ end
+ end
+
+ def encode_string(s)
+ s.encode("UTF-8", invalid: :replace, undef: :replace)
+ end
+ end
+end
lib/del/robot.rb
@@ -1,72 +1,31 @@
module Del
class Robot
- attr_reader :configuration, :users, :rooms
+ attr_reader :connection, :users, :rooms
def initialize(configuration:)
- @configuration = configuration
@users = UserRepository.new
@rooms = RoomRepository.new
+ @connection = Connection.new(
+ configuration: configuration,
+ users: users,
+ rooms: rooms,
+ )
end
def run
- client.on_exception do |error, connection, error_source|
- puts error.inspect
- shut_down
- end
- client.connect(configuration[:host])
- sleep 0.0001 until client.is_connected?
- client.auth(configuration[:password])
- roster = Jabber::Roster::Helper.new(client, false)
- roster.add_update_callback do |old_item, item|
- users.create(item) if item
- end
- roster.get_roster
- roster.wait_for_roster
- #@mention_name = roster[jid].attributes["mention_name"]
- client.add_message_callback do |message|
- next if message.type == :error || message.body.nil?
- send_message(message.from, message.body)
- end
- client.send(Jabber::Presence.new(:chat))
- list_rooms(configuration[:muc_domain]).each do |room|
- rooms.upsert(room)
- end
+ connection.connect(self)
sleep
rescue Interrupt
- shut_down
+ connection.disconnect
end
- def send_message(jid, message)
- message = Jabber::Message.new(jid, encode_string(message))
- message.type = :chat
- client.send(message)
- end
-
- private
-
- def list_rooms(muc_domain)
- Jabber::MUC::MUCBrowser.new(client).muc_rooms(muc_domain).map do |jid, name|
- jid.to_s
- end
- end
-
- def client
- @client ||= Jabber::Client.new(jid)
+ def receive_message(message)
+ return if message.type == :error || message.body.nil?
+ send_message(message.from, message.body)
end
- def jid
- jid = Jabber::JID.new(configuration[:jid])
- jid.resource = "bot"
- jid
- end
-
- def shut_down
- puts "byte me!"
- client.close
- end
-
- def encode_string(s)
- s.encode("UTF-8", invalid: :replace, undef: :replace)
+ def send_message(jid, message)
+ connection.deliver(jid, message)
end
end
end
lib/del.rb
@@ -4,11 +4,12 @@ require "xmpp4r/muc/helper/mucbrowser"
require "xmpp4r/muc/helper/simplemucclient"
require "xmpp4r/roster/helper/roster"
+require "del/connection"
require "del/robot"
-require "del/version"
require "del/room_repository"
require "del/user"
require "del/user_repository"
+require "del/version"
module Del
def self.start