class Lita::Adapters::Xmpp::Callback
Attributes
robot[R]
roster[R]
Public Class Methods
new(robot, roster)
click to toggle source
# File lib/lita/adapters/xmpp/callback.rb, line 7 def initialize(robot, roster) @robot = robot @roster = roster @start_time = Time.now.utc end
Public Instance Methods
muc_message(muc)
click to toggle source
# File lib/lita/adapters/xmpp/callback.rb, line 25 def muc_message(muc) muc.on_message do |time, nick, text| if time.is_a?(Time) && time < @start_time Lita.logger.debug "#{time} < #{@start_time} Skipping #{nick}: #{text}" next else user = user_by_name(nick) source = Source.new(user, muc.jid.bare.to_s) message = Message.new(robot, text, source) Lita.logger.debug( "Dispatching message to Lita from #{user.id} in MUC #{muc.jid}." ) robot.receive(message) end end end
private_message(client)
click to toggle source
# File lib/lita/adapters/xmpp/callback.rb, line 13 def private_message(client) client.add_message_callback do |m| next if m.type == :error || m.body.nil? user = user_by_jid(m.from) source = Source.new(user) message = Message.new(robot, m.body, source) message.command! Lita.logger.debug("Dispatching PM to Lita from #{user.id}.") robot.receive(message) end end
roster_update()
click to toggle source
# File lib/lita/adapters/xmpp/callback.rb, line 42 def roster_update roster.add_update_callback do |old_item, item| jid = item.attributes["jid"] Lita.logger.debug("Updating record for user with ID: #{jid}.") create_user(item.attributes) end end
Private Instance Methods
create_user(user_data)
click to toggle source
# File lib/lita/adapters/xmpp/callback.rb, line 56 def create_user(user_data) name = user_data['name'].downcase.gsub(/\s+/, '.') User.create( user_data["jid"], name: name, mention_name: jid_without_domain(user_data['jid']) ) end
jid_without_domain(jid)
click to toggle source
# File lib/lita/adapters/xmpp/callback.rb, line 52 def jid_without_domain(jid) jid.to_s.sub(/@.*/, '') end
user_by_jid(jid)
click to toggle source
# File lib/lita/adapters/xmpp/callback.rb, line 65 def user_by_jid(jid) Lita.logger.debug("Looking up user with JID: #{jid}.") create_user(roster[jid].attributes) end
user_by_name(name)
click to toggle source
# File lib/lita/adapters/xmpp/callback.rb, line 70 def user_by_name(name) Lita.logger.info("Looking up user with name: #{name}.") items = roster.items.detect { |jid, item| jid_without_domain(jid) == name } if items Lita.logger.info("Looking up user by jid: #{items.first}.") user_by_jid(items.first) else Lita.logger.warn "No user with the name #{name.inspect} was found in the roster" User.new(nil, name: name) end end