rubot 0.1.5 → 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/rubot +9 -4
- data/lib/core.rb +1 -0
- data/lib/core/dispatcher.rb +18 -0
- data/lib/core/exiter.rb +36 -0
- data/lib/generators/exiters.template +7 -0
- data/lib/irc/message_queue.rb +1 -0
- data/lib/irc/server.rb +14 -8
- data/lib/template.rb +5 -0
- metadata +5 -4
data/bin/rubot
CHANGED
@@ -6,7 +6,7 @@ require "template"
|
|
6
6
|
|
7
7
|
options = OpenStruct.new
|
8
8
|
parser = OptionParser.new do |parser|
|
9
|
-
parser.banner = "Usage: #{__FILE__} <options>"
|
9
|
+
parser.banner = "Usage: #{File.basename(__FILE__)} <options>"
|
10
10
|
|
11
11
|
parser.separator ""
|
12
12
|
parser.separator "Initialization"
|
@@ -19,17 +19,22 @@ parser = OptionParser.new do |parser|
|
|
19
19
|
parser.separator ""
|
20
20
|
parser.separator "Generators"
|
21
21
|
|
22
|
-
parser.on("-c", "--command Name", "Generates a new command
|
22
|
+
parser.on("-c", "--command Name", "Generates a new command") do |name|
|
23
23
|
generate_command(name)
|
24
24
|
exit
|
25
25
|
end
|
26
26
|
|
27
|
-
parser.on("-
|
27
|
+
parser.on("-e", "--exiter Name", "Generates a new exiter") do |name|
|
28
|
+
generate_exiter(name)
|
29
|
+
exit
|
30
|
+
end
|
31
|
+
|
32
|
+
parser.on("-l", "--listener Name", "Generates a new listener") do |name|
|
28
33
|
generate_listener(name)
|
29
34
|
exit
|
30
35
|
end
|
31
36
|
|
32
|
-
parser.on("-r", "--runner Name", "Generates a new listener
|
37
|
+
parser.on("-r", "--runner Name", "Generates a new listener") do |name|
|
33
38
|
generate_runner(name)
|
34
39
|
exit
|
35
40
|
end
|
data/lib/core.rb
CHANGED
data/lib/core/dispatcher.rb
CHANGED
@@ -42,6 +42,7 @@ module Rubot
|
|
42
42
|
reload
|
43
43
|
# runners are only run on server connection, so there's no need them to be in reload
|
44
44
|
load_dir "runners", @runners = {}
|
45
|
+
load_dir "exiters", @exiters = {}
|
45
46
|
end
|
46
47
|
|
47
48
|
# Called when successful connection is made to a server. This is when the runners are
|
@@ -116,6 +117,15 @@ module Rubot
|
|
116
117
|
def remove_auth(nick)
|
117
118
|
@auth_list.delete nick
|
118
119
|
end
|
120
|
+
|
121
|
+
# Handles the on quit event, which is triggered when the server recieves the
|
122
|
+
# quit message or an interrupt is triggered.
|
123
|
+
#
|
124
|
+
# ==== Parameters
|
125
|
+
# server<Rubot::Irc::Server>:: The server that is quiting.
|
126
|
+
def on_quit(server)
|
127
|
+
execute_exiters(server)
|
128
|
+
end
|
119
129
|
|
120
130
|
private
|
121
131
|
|
@@ -126,6 +136,14 @@ module Rubot
|
|
126
136
|
def run_runners(server)
|
127
137
|
@runners.each_value {|runner| runner.run(server)}
|
128
138
|
end
|
139
|
+
|
140
|
+
# Executes all exiters with the given server.
|
141
|
+
#
|
142
|
+
# ==== Parameters
|
143
|
+
# server<Rubot::Irc::Server>:: Server instance
|
144
|
+
def execute_exiters(server)
|
145
|
+
@exiters.each_value {|exiter| exiter.execute(server)}
|
146
|
+
end
|
129
147
|
|
130
148
|
# Loads all files in the given directory and stores the class instances
|
131
149
|
# in the given set. This is used to load commands, listeners, and runners.
|
data/lib/core/exiter.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
module Rubot
|
2
|
+
module Core
|
3
|
+
# Base class for all exiters. An exiter cannot be called directly, but is executed
|
4
|
+
# when the server receives the quit message or an interrupt is triggered
|
5
|
+
#
|
6
|
+
# ==== Example
|
7
|
+
# This exiter says goodbye to all channels the bot is in.
|
8
|
+
# class Bye < Rubot::Core::Exiter
|
9
|
+
# def execute(server)
|
10
|
+
# server.channels.each do |channel|
|
11
|
+
# server.msg(channel, "bye everybody!")
|
12
|
+
# end
|
13
|
+
# end
|
14
|
+
# end
|
15
|
+
class Exiter
|
16
|
+
# Takes an instance of Rubot::Core::Dispatcher. Any
|
17
|
+
# child class that needs a constructor should override
|
18
|
+
# this method.
|
19
|
+
#
|
20
|
+
# ==== Parameters
|
21
|
+
# dispatcher<Rubot::Core::Dispatcher>:: The dispatcher that was used to create
|
22
|
+
# the instance of the exiter.
|
23
|
+
def initialize(dispatcher)
|
24
|
+
@dispatcher = dispatcher
|
25
|
+
end
|
26
|
+
|
27
|
+
# Runs the exiter with the given server.
|
28
|
+
#
|
29
|
+
# ==== Paramters
|
30
|
+
# server<Rubot::Irc::Server>:: Server instance the exiter should use for
|
31
|
+
# messaging and information.
|
32
|
+
def execute(server)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/irc/message_queue.rb
CHANGED
data/lib/irc/server.rb
CHANGED
@@ -38,31 +38,37 @@ module Rubot
|
|
38
38
|
@message_queue.action do |destination, action|
|
39
39
|
raw "PRIVMSG #{destination} :\001ACTION #{action}\001"
|
40
40
|
end
|
41
|
+
|
42
|
+
@message_queue.quit do |blah, more_blah|
|
43
|
+
raw "QUIT :#{@quit_message}"
|
44
|
+
@conn.close
|
45
|
+
end
|
41
46
|
end
|
42
47
|
|
43
48
|
# Attempts to make a connection to the server
|
44
49
|
def connect
|
45
50
|
return if @is_connected
|
46
|
-
|
51
|
+
|
47
52
|
@conn = TCPSocket.open(@host, @port, @vhost)
|
48
53
|
raw "USER #{@nick} #{@nick} #{@nick} :#{@real_name}"
|
49
54
|
change_nick @nick
|
50
55
|
join @channels
|
51
|
-
|
56
|
+
|
52
57
|
begin
|
53
|
-
|
58
|
+
main_loop()
|
54
59
|
rescue Interrupt
|
60
|
+
quit
|
55
61
|
rescue Exception => detail
|
56
|
-
|
57
|
-
|
58
|
-
|
62
|
+
puts detail.message()
|
63
|
+
print detail.backtrace.join("\n")
|
64
|
+
retry
|
59
65
|
end
|
60
66
|
end
|
61
67
|
|
62
68
|
# Sends the quit command to the IRC server, then closes the connection.
|
63
69
|
def quit
|
64
|
-
|
65
|
-
@
|
70
|
+
@dispatcher.on_quit(self)
|
71
|
+
@message_queue.quit("Hades", "ice water plz").join
|
66
72
|
end
|
67
73
|
|
68
74
|
# Changes our nick.
|
data/lib/template.rb
CHANGED
@@ -32,7 +32,12 @@ def generate_runner(name)
|
|
32
32
|
generate("runners", name)
|
33
33
|
end
|
34
34
|
|
35
|
+
def generate_exiter(name)
|
36
|
+
generate("exiters", name)
|
37
|
+
end
|
38
|
+
|
35
39
|
def generate(template, name)
|
40
|
+
FileUtils.mkdir(template) unless Dir.exist?(template)
|
36
41
|
filename = File.join(template, "#{name.underscore}.rb")
|
37
42
|
puts "file '#{filename}' already exists" and return if File.exist?(filename)
|
38
43
|
|
metadata
CHANGED
@@ -4,9 +4,8 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
|
9
|
-
version: 0.1.5
|
7
|
+
- 2
|
8
|
+
version: "0.2"
|
10
9
|
platform: ruby
|
11
10
|
authors:
|
12
11
|
- Chris Thorn
|
@@ -14,7 +13,7 @@ autorequire:
|
|
14
13
|
bindir: bin
|
15
14
|
cert_chain: []
|
16
15
|
|
17
|
-
date: 2010-04-
|
16
|
+
date: 2010-04-13 00:00:00 -08:00
|
18
17
|
default_executable:
|
19
18
|
dependencies: []
|
20
19
|
|
@@ -30,6 +29,7 @@ files:
|
|
30
29
|
- bin/rubot
|
31
30
|
- lib/core/command.rb
|
32
31
|
- lib/core/dispatcher.rb
|
32
|
+
- lib/core/exiter.rb
|
33
33
|
- lib/core/listener.rb
|
34
34
|
- lib/core/runner.rb
|
35
35
|
- lib/core.rb
|
@@ -37,6 +37,7 @@ files:
|
|
37
37
|
- lib/extensions/string.rb
|
38
38
|
- lib/extensions.rb
|
39
39
|
- lib/generators/commands.template
|
40
|
+
- lib/generators/exiters.template
|
40
41
|
- lib/generators/listeners.template
|
41
42
|
- lib/generators/runners.template
|
42
43
|
- lib/irc/constants.rb
|