spunk 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/spunk.rb +1 -1
- data/lib/spunk/base_parser.rb +8 -2
- data/lib/spunk/bot.rb +29 -4
- data/lib/spunk/helpers.rb +5 -2
- data/lib/spunk/origin.rb +4 -0
- data/lib/spunk/ping_parser.rb +3 -3
- metadata +1 -1
data/lib/spunk.rb
CHANGED
data/lib/spunk/base_parser.rb
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
module Spunk
|
2
2
|
module Processor
|
3
3
|
class Base
|
4
|
-
def call(
|
4
|
+
def call(hash)
|
5
|
+
bot = hash[:bot]
|
6
|
+
command = hash[:command]
|
7
|
+
parameters = hash[:parameters]
|
8
|
+
origin = hash[:origin]
|
9
|
+
|
5
10
|
if command =~ /^INVITE #{bot.nickname}$/i
|
6
|
-
room =
|
11
|
+
room = Helpers.parse_room(hash[:parameters])
|
12
|
+
hash[:logger].debug "Recieved invite for room #{room}"
|
7
13
|
if room
|
8
14
|
bot.join_room(room)
|
9
15
|
end
|
data/lib/spunk/bot.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
require 'socket'
|
2
2
|
require 'openssl'
|
3
|
+
require 'mutex_m'
|
4
|
+
require 'logger'
|
3
5
|
|
4
6
|
module Spunk
|
5
7
|
class Bot
|
6
|
-
attr_accessor :nickname, :server, :joined_rooms, :ssl, :server, :rooms, :token
|
8
|
+
attr_accessor :nickname, :server, :joined_rooms, :ssl, :server, :rooms, :token, :logger
|
7
9
|
attr_reader :processors, :request_processors, :response_processors, :hostname
|
8
10
|
|
9
11
|
def initialize(options = {})
|
12
|
+
#self.extend Mutex_m
|
10
13
|
options.each do |option, value|
|
11
14
|
instance_variable_set("@#{option}", value)
|
12
15
|
end
|
@@ -21,9 +24,22 @@ module Spunk
|
|
21
24
|
add_request_processor(Spunk::Processor::Ping.new)
|
22
25
|
add_request_processor(Spunk::Processor::Base.new)
|
23
26
|
@rooms = options[:rooms] ||= []
|
27
|
+
if options[:logger].class == String
|
28
|
+
@logger = Logger.new(options[:logger])
|
29
|
+
@logger.level = Logger::INFO
|
30
|
+
elsif options[:logger].nil?
|
31
|
+
@logger = Logger.new(STDOUT)
|
32
|
+
@logger.level = Logger::INFO
|
33
|
+
elsif options[:logger].class == Hash
|
34
|
+
@logger = Logger.new(options[:logger][:file])
|
35
|
+
@logger.level = options[:logger][:level] ||= Logger::INFO
|
36
|
+
elsif options[:logger].class == Logger
|
37
|
+
@logger = options[:logger]
|
38
|
+
end
|
24
39
|
end
|
25
40
|
|
26
41
|
def start
|
42
|
+
@logger.info "Starting Bot"
|
27
43
|
loop do
|
28
44
|
@buffer ||= ""
|
29
45
|
if @ssl
|
@@ -75,10 +91,11 @@ module Spunk
|
|
75
91
|
origin = if !prefix.nil? && prefix != ""
|
76
92
|
Origin.new(prefix)
|
77
93
|
end
|
78
|
-
|
94
|
+
hash = Helpers.hashify(self, origin, command, parameters, @logger)
|
95
|
+
@logger.debug "Processing request: origin=#{hash[:origin]} :: command=#{hash[:command]} :: parameters=#{hash[:parameters]}"
|
79
96
|
(@request_processors + @processors).each do |processor|
|
80
97
|
begin
|
81
|
-
processor.call(
|
98
|
+
processor.call(hash)
|
82
99
|
rescue => e
|
83
100
|
puts e.class.name + ": " + e.message
|
84
101
|
puts e.backtrace.join("\n")
|
@@ -89,7 +106,8 @@ module Spunk
|
|
89
106
|
def process_response(origin, command, parameters)
|
90
107
|
(@response_processors + @processors).each do |processor|
|
91
108
|
begin
|
92
|
-
|
109
|
+
hash = Helpers.hashify(self, origin, command, parameters, @logger)
|
110
|
+
processor.call(hash)
|
93
111
|
rescue => e
|
94
112
|
puts e.class.name + ": " + e.message
|
95
113
|
puts e.backtrace.join("\n")
|
@@ -115,8 +133,10 @@ module Spunk
|
|
115
133
|
end
|
116
134
|
|
117
135
|
def connect
|
136
|
+
@logger.info "Starting connection to #{@server[:hostname]}:#{@server[:port]}"
|
118
137
|
@socket = TCPSocket.new(@server[:hostname], @server[:port])
|
119
138
|
if @ssl == true
|
139
|
+
@logger.debug "Detected SSL connection"
|
120
140
|
@ssl_context = OpenSSL::SSL::SSLContext.new()
|
121
141
|
@ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
122
142
|
@socket = OpenSSL::SSL::SSLSocket.new(@socket, @ssl_context)
|
@@ -132,7 +152,9 @@ module Spunk
|
|
132
152
|
end
|
133
153
|
|
134
154
|
def authenticate
|
155
|
+
@logger.debug "Starting authentication section"
|
135
156
|
unless @token.nil?
|
157
|
+
@logger.debug "Token detected.. sending token"
|
136
158
|
send_message "PASS #{@token}"
|
137
159
|
end
|
138
160
|
send_message "NICK #{@nickname}"
|
@@ -140,16 +162,19 @@ module Spunk
|
|
140
162
|
end
|
141
163
|
|
142
164
|
def join_room(room, password = nil)
|
165
|
+
@logger.debug "Joining room #{room}"
|
143
166
|
@joined_rooms << room
|
144
167
|
@joined_rooms.uniq!
|
145
168
|
send_message("JOIN #{room}" + (password ? " #{password}" : ""))
|
146
169
|
end
|
147
170
|
|
148
171
|
def say(to, message)
|
172
|
+
@logger.debug "saying message: PRIVMSG #{to} :#{message}"
|
149
173
|
send_message "PRIVMSG #{to} :#{message}"
|
150
174
|
end
|
151
175
|
|
152
176
|
def send_message(message)
|
177
|
+
@logger.debug "Sending message: #{message}"
|
153
178
|
command, parameters = message.strip.split(/\:/, 2)
|
154
179
|
process_response(origin, command.to_s.strip, parameters)
|
155
180
|
end
|
data/lib/spunk/helpers.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
module Spunk
|
2
2
|
module Helpers
|
3
3
|
def Helpers.parse_room(command)
|
4
|
+
if command.nil?
|
5
|
+
return nil
|
6
|
+
end
|
4
7
|
command.match(/(\#\S+\b)/i)
|
5
8
|
return $1
|
6
9
|
end
|
7
10
|
|
8
|
-
def Helpers.hashify(bot, origin, command,
|
9
|
-
hash = {:bot=>bot, :origin=>origin, :command => command, :msg =>
|
11
|
+
def Helpers.hashify(bot, origin, command, parameters, logger)
|
12
|
+
hash = {:bot=>bot, :origin=>origin, :command => command, :msg => parameters, :parameters=>parameters, :room => nil, :logger=>logger}
|
10
13
|
hash[:room] = Helpers.parse_room(command)
|
11
14
|
return hash
|
12
15
|
end
|
data/lib/spunk/origin.rb
CHANGED
data/lib/spunk/ping_parser.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module Spunk
|
2
2
|
module Processor
|
3
3
|
class Ping
|
4
|
-
def call(
|
5
|
-
if command =~ /^PING$/
|
6
|
-
bot.send_message("PONG :#{parameters}")
|
4
|
+
def call(hash)
|
5
|
+
if hash[:command] =~ /^PING$/
|
6
|
+
hash[:bot].send_message("PONG :#{hash[:parameters]}")
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|