blob: f88b81bf4bffc03dec156a54d92ea4538eb016ae (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
require 'socket'
module Dinobot
class Bot
def initialize(server, port, nick, pass=nil, &block)
@server = server
@port = port
@nick = nick
@pass = pass
@trigger = '!'
@socket = nil
@modules = Hash.new
@channels = Array.new
instance_eval(&block) if block_given?
end
def connect
@socket = TCPSocket.new(@server, @port)
out "PASS #{@pass}" if @pass
out "NICK #{@nick}"
out "USER #{@nick} 0 * :#{@nick}"
@channels.each do |channel|
join channel
end
end
def connected?
!(@socket.nil? || @socket.closed?)
end
def run
while true
puts "== Connecting to #{@server}:#{@port}."
connect
while str = @socket.gets
str.chomp!
puts "<< " + str.inspect
begin
parse_line(str)
rescue
end
end
puts "== Disconnected."
@socket.close
end
end
def parse_line(str)
out str.sub('PING', 'PONG') if str =~ /^PING /
end
def out(str)
return unless connected?
puts ">> " + str.inspect
@socket.puts str
end
def say(channel, message)
out "PRIVMSG #{channel} :#{message}"
end
def join(channel)
@channels << channel unless @channels.include?(channel)
out "JOIN #{channel}"
end
def part(channel)
@channels.delete(channel)
out "PART #{channel}"
end
end
end
|