Class: Sprinkles::Bot
- Inherits:
-
Object
- Object
- Sprinkles::Bot
- Defined in:
- lib/sprinkles/bot.rb
Instance Attribute Summary (collapse)
-
- (Object) nickname
Returns the value of attribute nickname.
-
- (Object) server
Returns the value of attribute server.
Instance Method Summary (collapse)
- - (Object) add_processor(processor = nil, &block)
- - (Object) add_request_processor(processor = nil, &block)
- - (Object) add_response_processor(processor = nil, &block)
- - (Object) authenticate
- - (Object) connect
-
- (Bot) initialize(options = {})
constructor
A new instance of Bot.
- - (Object) join_room(room, password = nil)
- - (Object) origin
- - (Object) parse_message(message)
- - (Object) process_request(prefix, command, parameters)
- - (Object) process_response(origin, command, parameters)
- - (Object) say(to, message)
- - (Object) send_message(message)
- - (Object) start
Constructor Details
- (Bot) initialize(options = {})
A new instance of Bot
7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/sprinkles/bot.rb', line 7 def initialize( = {}) .each do |option, value| instance_variable_set("@#{option}", value) end @processors = [] @request_processors = [] @response_processors = [] @hostname = Socket.gethostname @server ||= { :hostname => [:hostname] || "localhost", :port => [:port] || 6667 } add_request_processor(Sprinkles::Processor::Ping.new) @rooms = [:rooms] || [] end |
Instance Attribute Details
- (Object) nickname
Returns the value of attribute nickname
5 6 7 |
# File 'lib/sprinkles/bot.rb', line 5 def nickname @nickname end |
- (Object) server
Returns the value of attribute server
5 6 7 |
# File 'lib/sprinkles/bot.rb', line 5 def server @server end |
Instance Method Details
- (Object) add_processor(processor = nil, &block)
95 96 97 |
# File 'lib/sprinkles/bot.rb', line 95 def add_processor(processor = nil, &block) @processors << (processor || block) end |
- (Object) add_request_processor(processor = nil, &block)
87 88 89 |
# File 'lib/sprinkles/bot.rb', line 87 def add_request_processor(processor = nil, &block) @request_processors << (processor || block) end |
- (Object) add_response_processor(processor = nil, &block)
91 92 93 |
# File 'lib/sprinkles/bot.rb', line 91 def add_response_processor(processor = nil, &block) @response_processors << (processor || block) end |
- (Object) authenticate
109 110 111 112 |
# File 'lib/sprinkles/bot.rb', line 109 def authenticate "NICK #{@nickname}" "USER #{@username} #{@hostname} bla :#{@fullname}" end |
- (Object) connect
99 100 101 102 103 104 105 106 107 |
# File 'lib/sprinkles/bot.rb', line 99 def connect @socket = TCPSocket.new(@server[:hostname], @server[:port]) trap("INT") do @socket.close end trap("KILL") do @socket.close end end |
- (Object) join_room(room, password = nil)
114 115 116 |
# File 'lib/sprinkles/bot.rb', line 114 def join_room(room, password = nil) ("JOIN #{room}" + (password ? " #{password}" : "")) end |
- (Object) origin
83 84 85 |
# File 'lib/sprinkles/bot.rb', line 83 def origin @origin ||= Origin.new("#{@nickname}!#{@username}@#{@hostname}") end |
- (Object) parse_message(message)
45 46 47 48 49 50 51 52 53 54 |
# File 'lib/sprinkles/bot.rb', line 45 def () prefix, = if =~ /^\:([^\ ]*) (.*)/ .scan(/^\:([^\ ]*) (.*)/)[0] else [ nil, ] end command, parameters = .split(/\:/, 2) [ prefix, command, parameters ].map! { |s| s && s.strip } end |
- (Object) process_request(prefix, command, parameters)
56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/sprinkles/bot.rb', line 56 def process_request(prefix, command, parameters) origin = if !prefix.nil? && prefix != "" Origin.new(prefix) end (@request_processors + @processors).each do |processor| begin processor.call(self, origin, command, parameters) rescue => e puts e.class.name + ": " + e. puts e.backtrace.join("\n") end end end |
- (Object) process_response(origin, command, parameters)
71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/sprinkles/bot.rb', line 71 def process_response(origin, command, parameters) (@response_processors + @processors).each do |processor| begin processor.call(self, origin, command, parameters) rescue => e puts e.class.name + ": " + e. puts e.backtrace.join("\n") end end @socket.print("#{command} :#{parameters}\r\n") end |
- (Object) say(to, message)
118 119 120 |
# File 'lib/sprinkles/bot.rb', line 118 def say(to, ) "PRIVMSG #{to} :#{}" end |
- (Object) send_message(message)
122 123 124 125 |
# File 'lib/sprinkles/bot.rb', line 122 def () command, parameters = .strip.split(/\:/, 2) process_response(origin, command.to_s.strip, parameters) end |
- (Object) start
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/sprinkles/bot.rb', line 20 def start connect authenticate @rooms.each { |room| join_room room } loop do @buffer ||= "" @buffer += @socket.recv(1024) = @buffer.split(/\r|\n/).collect { |s| s != "" && !s.nil? ? s : nil }.compact if .any? last_character = @buffer[-1..-1] @buffer = if ["\n", "\r"].include?(last_character) "" else .pop.to_s end .each do || .strip! process_request(*()) end end sleep 0.25 end end |