Skip to content

Instantly share code, notes, and snippets.

@JamesHarrison
Created November 23, 2008 02:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JamesHarrison/28017 to your computer and use it in GitHub Desktop.
Save JamesHarrison/28017 to your computer and use it in GitHub Desktop.
undefined
class NotifierProcessor < ApplicationProcessor
subscribes_to :notifications
#require 'msn/msn'
require 'rubygems'
require 'net/yail'
require 'xmpp4r'
require 'xmpp4r/client'
require 'xmpp4r/muc'
$IRC_DEBUG = true
def on_message(id)
@alert = Alert.find(id)
raise StandardError unless @alert
# Build lists of people to notify via email/MSN/IRC
users = User.find(:all)
# Remove untrusted users
users.delete_if{|u| !u.allowed? }
# ALERT_RECIPIENTS = {1 => 'All Pilots', 2 => 'Scouts Only', 3 => 'Scouts and Fleet Commanders', 4 => 'Fleet Commanders Only'}
# Remove people who should not get this alert
case @alert.recipients
when 2
users.delete_if{|u| !u.scout? }
when 3
users.delete_if{|u| !(u.scout? or u.fleet_commander?) }
when 4
users.delete_if{|u| !u.fleet_commander? }
end
users_to_email = users.delete_if{|u| !u.use_email? }
# users_to_msn = users.delete_if{|u|u.use_msn==false}
users_to_irc = users.delete_if{|u| !u.use_irc? }
users_to_irc = users.delete_if{|u| !u.irc_username }
users_to_email.each do |u|
AlertMailer.deliver_alert(u,@alert)
end
# msnsock = MSNConnection.new(IS_CNF['msn_user'], IS_CNF['msn_pass'])
# msnsock.start
# msnsock.change_nickname IS_CNF['msn_nick']
# users_to_msn.each do |u|
# msnsock.new_chat_session = lambda do |tag,session|
#
# end
# end
alert_for_irc = "#{ALERT_PRIORITIES[@alert.severity]}: #{@alert.title} (full alert info at #{IS_CNF['site_root_url']}alerts/#{@alert.id})"
@@jid = Jabber::JID::new(IS_CNF['jabber_id'])
@@room_jid = Jabber::JID::new(IS_CNF['jabber_room_id'])
if !defined?(@@irc)
# TODO: Security on the channels.
@@irc = Net::YAIL.new(:address => IS_CNF['irc_server'], :username => IS_CNF['irc_realname'], :realname => IS_CNF['irc_realname'], :nicknames => IS_CNF['irc_nicks'], :throttle_seconds => 2)
@@irc.prepend_handler :incoming_welcome, proc {|text, args|
IS_CNF['irc_channels'].each do |c|
@@irc.join(c)
end
return false
}
@@irc.start_listening
end
if !defined?(@@cl)
@@cl = Jabber::Client::new(@@jid)
@@cl.connect
@@cl.auth('chatremasp3k')
@@room = Jabber::MUC::SimpleMUCClient::new(@@cl)
@@room.join(@@room_jid)
end
if !defined?(@@room)
@@room = Jabber::MUC::SimpleMUCClient::new(@@cl)
@@room.join(@@room_jid)
end
users_to_irc.each do |u| @@irc.notice(u.irc_username,alert_for_irc) end
if @alert.recipients == 1 then IS_CNF['irc_channels'].each do |c| @@irc.msg(c,alert_for_irc) end end
if @alert.recipients != 2
@@room.say alert_for_irc
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment