spox-mod_spox 0.3.1
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/CHANGELOG +174 -0
- data/INSTALL +15 -0
- data/LICENSE +674 -0
- data/README.rdoc +73 -0
- data/bin/mod_spox +112 -0
- data/data/mod_spox/extras/AOLSpeak.rb +257 -0
- data/data/mod_spox/extras/AutoKick.rb +152 -0
- data/data/mod_spox/extras/AutoMode.rb +122 -0
- data/data/mod_spox/extras/AutoRejoin.rb +37 -0
- data/data/mod_spox/extras/Bash.rb +55 -0
- data/data/mod_spox/extras/Bouncer.rb +220 -0
- data/data/mod_spox/extras/Bullshit.rb +19 -0
- data/data/mod_spox/extras/Bytes.rb +11 -0
- data/data/mod_spox/extras/Confess.rb +244 -0
- data/data/mod_spox/extras/DCC.rb +182 -0
- data/data/mod_spox/extras/DevWatch.rb +153 -0
- data/data/mod_spox/extras/DownForEveryoneOrJustMe.rb +47 -0
- data/data/mod_spox/extras/EightBall.rb +33 -0
- data/data/mod_spox/extras/FML.rb +35 -0
- data/data/mod_spox/extras/FloodKicker.rb +129 -0
- data/data/mod_spox/extras/Fortune.rb +76 -0
- data/data/mod_spox/extras/GoogleIt.rb +13 -0
- data/data/mod_spox/extras/Headers.rb +59 -0
- data/data/mod_spox/extras/Karma.rb +302 -0
- data/data/mod_spox/extras/Locator.rb +44 -0
- data/data/mod_spox/extras/Logger.rb +182 -0
- data/data/mod_spox/extras/LolSpeak.rb +21 -0
- data/data/mod_spox/extras/NickServ.rb +84 -0
- data/data/mod_spox/extras/PhpCli.rb +308 -0
- data/data/mod_spox/extras/PhpFuncLookup.rb +297 -0
- data/data/mod_spox/extras/Pinger.rb +11 -0
- data/data/mod_spox/extras/Quotes.rb +79 -0
- data/data/mod_spox/extras/RegexTracker.rb +158 -0
- data/data/mod_spox/extras/Roulette.rb +267 -0
- data/data/mod_spox/extras/RubyCli.rb +93 -0
- data/data/mod_spox/extras/Search.rb +49 -0
- data/data/mod_spox/extras/Seen.rb +150 -0
- data/data/mod_spox/extras/Slashdot.rb +35 -0
- data/data/mod_spox/extras/SlashdotHeadlineGenerator.rb +500 -0
- data/data/mod_spox/extras/Talk.rb +32 -0
- data/data/mod_spox/extras/Topten.rb +103 -0
- data/data/mod_spox/extras/TracTicket.rb +66 -0
- data/data/mod_spox/extras/Translate.rb +132 -0
- data/data/mod_spox/extras/Twitter.rb +458 -0
- data/data/mod_spox/extras/UrbanDictionary.rb +55 -0
- data/data/mod_spox/extras/Weather.rb +55 -0
- data/data/mod_spox/plugins/Authenticator.rb +289 -0
- data/data/mod_spox/plugins/Banner.rb +585 -0
- data/data/mod_spox/plugins/BotNick.rb +18 -0
- data/data/mod_spox/plugins/Helper.rb +49 -0
- data/data/mod_spox/plugins/Initializer.rb +35 -0
- data/data/mod_spox/plugins/Joiner.rb +23 -0
- data/data/mod_spox/plugins/Nicker.rb +14 -0
- data/data/mod_spox/plugins/Parter.rb +23 -0
- data/data/mod_spox/plugins/Permissions.rb +60 -0
- data/data/mod_spox/plugins/PluginLoader.rb +180 -0
- data/data/mod_spox/plugins/Ponger.rb +70 -0
- data/data/mod_spox/plugins/PoolConfig.rb +52 -0
- data/data/mod_spox/plugins/Quitter.rb +15 -0
- data/data/mod_spox/plugins/Servers.rb +57 -0
- data/data/mod_spox/plugins/Status.rb +31 -0
- data/data/mod_spox/plugins/Triggers.rb +85 -0
- data/lib/mod_spox/BaseConfig.rb +51 -0
- data/lib/mod_spox/Bot.rb +604 -0
- data/lib/mod_spox/BotConfig.rb +65 -0
- data/lib/mod_spox/ConfigurationWizard.rb +180 -0
- data/lib/mod_spox/Database.rb +51 -0
- data/lib/mod_spox/Exceptions.rb +84 -0
- data/lib/mod_spox/Helpers.rb +122 -0
- data/lib/mod_spox/Loader.rb +60 -0
- data/lib/mod_spox/Logger.rb +37 -0
- data/lib/mod_spox/MessageFactory.rb +112 -0
- data/lib/mod_spox/Pipeline.rb +207 -0
- data/lib/mod_spox/Plugin.rb +97 -0
- data/lib/mod_spox/PluginHolder.rb +22 -0
- data/lib/mod_spox/PluginManager.rb +257 -0
- data/lib/mod_spox/PriorityQueue.rb +69 -0
- data/lib/mod_spox/Socket.rb +201 -0
- data/lib/mod_spox/Sockets.rb +226 -0
- data/lib/mod_spox/Timer.rb +60 -0
- data/lib/mod_spox/Version.rb +14 -0
- data/lib/mod_spox/handlers/BadNick.rb +19 -0
- data/lib/mod_spox/handlers/Bounce.rb +24 -0
- data/lib/mod_spox/handlers/Created.rb +27 -0
- data/lib/mod_spox/handlers/Handler.rb +39 -0
- data/lib/mod_spox/handlers/Invite.rb +28 -0
- data/lib/mod_spox/handlers/Join.rb +38 -0
- data/lib/mod_spox/handlers/Kick.rb +36 -0
- data/lib/mod_spox/handlers/LuserChannels.rb +19 -0
- data/lib/mod_spox/handlers/LuserClient.rb +18 -0
- data/lib/mod_spox/handlers/LuserMe.rb +16 -0
- data/lib/mod_spox/handlers/LuserOp.rb +19 -0
- data/lib/mod_spox/handlers/LuserUnknown.rb +19 -0
- data/lib/mod_spox/handlers/Mode.rb +62 -0
- data/lib/mod_spox/handlers/Motd.rb +38 -0
- data/lib/mod_spox/handlers/MyInfo.rb +24 -0
- data/lib/mod_spox/handlers/Names.rb +86 -0
- data/lib/mod_spox/handlers/Nick.rb +50 -0
- data/lib/mod_spox/handlers/NickInUse.rb +19 -0
- data/lib/mod_spox/handlers/Notice.rb +35 -0
- data/lib/mod_spox/handlers/Part.rb +39 -0
- data/lib/mod_spox/handlers/Ping.rb +25 -0
- data/lib/mod_spox/handlers/Pong.rb +23 -0
- data/lib/mod_spox/handlers/Privmsg.rb +39 -0
- data/lib/mod_spox/handlers/Quit.rb +29 -0
- data/lib/mod_spox/handlers/Topic.rb +38 -0
- data/lib/mod_spox/handlers/Welcome.rb +30 -0
- data/lib/mod_spox/handlers/Who.rb +83 -0
- data/lib/mod_spox/handlers/Whois.rb +117 -0
- data/lib/mod_spox/handlers/YourHost.rb +20 -0
- data/lib/mod_spox/messages/Messages.rb +6 -0
- data/lib/mod_spox/messages/incoming/BadNick.rb +16 -0
- data/lib/mod_spox/messages/incoming/Bounce.rb +18 -0
- data/lib/mod_spox/messages/incoming/Created.rb +15 -0
- data/lib/mod_spox/messages/incoming/Invite.rb +21 -0
- data/lib/mod_spox/messages/incoming/Join.rb +19 -0
- data/lib/mod_spox/messages/incoming/Kick.rb +26 -0
- data/lib/mod_spox/messages/incoming/LuserChannels.rb +15 -0
- data/lib/mod_spox/messages/incoming/LuserClient.rb +24 -0
- data/lib/mod_spox/messages/incoming/LuserMe.rb +18 -0
- data/lib/mod_spox/messages/incoming/LuserOp.rb +15 -0
- data/lib/mod_spox/messages/incoming/LuserUnknown.rb +15 -0
- data/lib/mod_spox/messages/incoming/Message.rb +22 -0
- data/lib/mod_spox/messages/incoming/Mode.rb +42 -0
- data/lib/mod_spox/messages/incoming/Motd.rb +18 -0
- data/lib/mod_spox/messages/incoming/MyInfo.rb +24 -0
- data/lib/mod_spox/messages/incoming/Names.rb +24 -0
- data/lib/mod_spox/messages/incoming/Nick.rb +26 -0
- data/lib/mod_spox/messages/incoming/NickInUse.rb +15 -0
- data/lib/mod_spox/messages/incoming/Notice.rb +9 -0
- data/lib/mod_spox/messages/incoming/Part.rb +21 -0
- data/lib/mod_spox/messages/incoming/Ping.rb +18 -0
- data/lib/mod_spox/messages/incoming/Pong.rb +9 -0
- data/lib/mod_spox/messages/incoming/Privmsg.rb +90 -0
- data/lib/mod_spox/messages/incoming/Quit.rb +18 -0
- data/lib/mod_spox/messages/incoming/Topic.rb +21 -0
- data/lib/mod_spox/messages/incoming/TopicInfo.rb +21 -0
- data/lib/mod_spox/messages/incoming/Welcome.rb +27 -0
- data/lib/mod_spox/messages/incoming/Who.rb +18 -0
- data/lib/mod_spox/messages/incoming/Whois.rb +49 -0
- data/lib/mod_spox/messages/incoming/YourHost.rb +18 -0
- data/lib/mod_spox/messages/internal/BotInitialized.rb +11 -0
- data/lib/mod_spox/messages/internal/ChangeNick.rb +15 -0
- data/lib/mod_spox/messages/internal/Connected.rb +20 -0
- data/lib/mod_spox/messages/internal/ConnectionFailed.rb +23 -0
- data/lib/mod_spox/messages/internal/DCCListener.rb +12 -0
- data/lib/mod_spox/messages/internal/DCCRequest.rb +12 -0
- data/lib/mod_spox/messages/internal/DCCSocket.rb +19 -0
- data/lib/mod_spox/messages/internal/Disconnected.rb +8 -0
- data/lib/mod_spox/messages/internal/Disconnecting.rb +8 -0
- data/lib/mod_spox/messages/internal/EstablishConnection.rb +22 -0
- data/lib/mod_spox/messages/internal/HaltBot.rb +8 -0
- data/lib/mod_spox/messages/internal/NickRequest.rb +9 -0
- data/lib/mod_spox/messages/internal/NickResponse.rb +15 -0
- data/lib/mod_spox/messages/internal/PluginLoadRequest.rb +21 -0
- data/lib/mod_spox/messages/internal/PluginLoadResponse.rb +17 -0
- data/lib/mod_spox/messages/internal/PluginModuleRequest.rb +14 -0
- data/lib/mod_spox/messages/internal/PluginModuleResponse.rb +18 -0
- data/lib/mod_spox/messages/internal/PluginReload.rb +18 -0
- data/lib/mod_spox/messages/internal/PluginRequest.rb +18 -0
- data/lib/mod_spox/messages/internal/PluginResponse.rb +21 -0
- data/lib/mod_spox/messages/internal/PluginUnloadRequest.rb +9 -0
- data/lib/mod_spox/messages/internal/PluginUnloadResponse.rb +9 -0
- data/lib/mod_spox/messages/internal/PluginsReady.rb +10 -0
- data/lib/mod_spox/messages/internal/QueueSocket.rb +8 -0
- data/lib/mod_spox/messages/internal/Reconnect.rb +8 -0
- data/lib/mod_spox/messages/internal/Request.rb +15 -0
- data/lib/mod_spox/messages/internal/Response.rb +15 -0
- data/lib/mod_spox/messages/internal/Shutdown.rb +8 -0
- data/lib/mod_spox/messages/internal/SignaturesUpdate.rb +8 -0
- data/lib/mod_spox/messages/internal/StatusRequest.rb +10 -0
- data/lib/mod_spox/messages/internal/StatusResponse.rb +18 -0
- data/lib/mod_spox/messages/internal/TimerAdd.rb +36 -0
- data/lib/mod_spox/messages/internal/TimerClear.rb +16 -0
- data/lib/mod_spox/messages/internal/TimerRemove.rb +23 -0
- data/lib/mod_spox/messages/internal/TimerResponse.rb +34 -0
- data/lib/mod_spox/messages/internal/TriggersUpdate.rb +8 -0
- data/lib/mod_spox/messages/internal/UnqueueSocket.rb +8 -0
- data/lib/mod_spox/messages/outgoing/Admin.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Away.rb +11 -0
- data/lib/mod_spox/messages/outgoing/ChannelMode.rb +25 -0
- data/lib/mod_spox/messages/outgoing/Connect.rb +24 -0
- data/lib/mod_spox/messages/outgoing/Die.rb +9 -0
- data/lib/mod_spox/messages/outgoing/Info.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Invite.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Ison.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Join.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Kick.rb +23 -0
- data/lib/mod_spox/messages/outgoing/Kill.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Links.rb +19 -0
- data/lib/mod_spox/messages/outgoing/List.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Lusers.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Motd.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Names.rb +20 -0
- data/lib/mod_spox/messages/outgoing/Nick.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Notice.rb +12 -0
- data/lib/mod_spox/messages/outgoing/Oper.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Part.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Pass.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Ping.rb +11 -0
- data/lib/mod_spox/messages/outgoing/Pong.rb +17 -0
- data/lib/mod_spox/messages/outgoing/Privmsg.rb +43 -0
- data/lib/mod_spox/messages/outgoing/Quit.rb +11 -0
- data/lib/mod_spox/messages/outgoing/Raw.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Rehash.rb +9 -0
- data/lib/mod_spox/messages/outgoing/Restart.rb +9 -0
- data/lib/mod_spox/messages/outgoing/ServList.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Simple.rb +12 -0
- data/lib/mod_spox/messages/outgoing/Squery.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Squit.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Stats.rb +18 -0
- data/lib/mod_spox/messages/outgoing/Summon.rb +23 -0
- data/lib/mod_spox/messages/outgoing/Time.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Topic.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Trace.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Unaway.rb +9 -0
- data/lib/mod_spox/messages/outgoing/User.rb +23 -0
- data/lib/mod_spox/messages/outgoing/UserHost.rb +15 -0
- data/lib/mod_spox/messages/outgoing/UserMode.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Users.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Version.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Who.rb +23 -0
- data/lib/mod_spox/messages/outgoing/WhoWas.rb +23 -0
- data/lib/mod_spox/messages/outgoing/Whois.rb +19 -0
- data/lib/mod_spox/migrations/001_initialize_models.rb +115 -0
- data/lib/mod_spox/migrations/002_persistent_sigs.rb +14 -0
- data/lib/mod_spox/migrations/003_auth_restructure.rb +31 -0
- data/lib/mod_spox/migrations/004_mode_index_fix.rb +18 -0
- data/lib/mod_spox/migrations/005_nick_mode_nopark.rb +18 -0
- data/lib/mod_spox/models/Auth.rb +65 -0
- data/lib/mod_spox/models/AuthMask.rb +13 -0
- data/lib/mod_spox/models/Channel.rb +89 -0
- data/lib/mod_spox/models/Config.rb +30 -0
- data/lib/mod_spox/models/Group.rb +30 -0
- data/lib/mod_spox/models/Models.rb +4 -0
- data/lib/mod_spox/models/Nick.rb +195 -0
- data/lib/mod_spox/models/NickMode.rb +32 -0
- data/lib/mod_spox/models/Server.rb +27 -0
- data/lib/mod_spox/models/Setting.rb +52 -0
- data/lib/mod_spox/models/Signature.rb +52 -0
- data/lib/mod_spox/models/Trigger.rb +9 -0
- data/lib/mod_spox/rfc2812.rb +49 -0
- data/populate_gemspec.rb +15 -0
- data/tests/BotHolder.rb +24 -0
- data/tests/handlers/tc_BadNick.rb +21 -0
- data/tests/handlers/tc_Created.rb +24 -0
- data/tests/handlers/tc_Invite.rb +50 -0
- data/tests/handlers/tc_Join.rb +33 -0
- data/tests/handlers/tc_Kick.rb +32 -0
- data/tests/handlers/tc_Mode.rb +85 -0
- data/tests/handlers/tc_Names.rb +35 -0
- data/tests/handlers/tc_Nick.rb +55 -0
- data/tests/handlers/tc_Part.rb +44 -0
- data/tests/handlers/tc_Ping.rb +40 -0
- data/tests/handlers/tc_Pong.rb +28 -0
- data/tests/handlers/tc_Privmsg.rb +85 -0
- data/tests/handlers/tc_Quit.rb +40 -0
- data/tests/handlers/tc_Who.rb +50 -0
- data/tests/handlers/tc_Whois.rb +61 -0
- data/tests/models/tc_Auth.rb +39 -0
- data/tests/models/tc_Channel.rb +52 -0
- data/tests/models/tc_Config.rb +19 -0
- data/tests/models/tc_Nick.rb +144 -0
- data/tests/models/tc_NickMode.rb +40 -0
- data/tests/models/tc_Setting.rb +21 -0
- data/tests/models/tc_Signature.rb +14 -0
- data/tests/run_tests.rb +6 -0
- metadata +362 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'mod_spox/messages/outgoing/Join'
|
2
|
+
require 'mod_spox/messages/outgoing/Who'
|
3
|
+
|
4
|
+
class Joiner < ModSpox::Plugin
|
5
|
+
def initialize(pipeline)
|
6
|
+
super(pipeline)
|
7
|
+
admin = Models::Group.filter(:name => 'admin').first
|
8
|
+
add_sig(:sig => 'join (\S+)', :method => :join, :group => admin, :params => [:channel])
|
9
|
+
@pipeline.hook(self, :send_who, :Incoming_Join)
|
10
|
+
end
|
11
|
+
|
12
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
13
|
+
# Join the given channel
|
14
|
+
def join(message, params)
|
15
|
+
@pipeline << Messages::Outgoing::Join.new(params[:channel])
|
16
|
+
end
|
17
|
+
|
18
|
+
# message:: ModSpox::Messages::Incoming::Join
|
19
|
+
# Send a WHO request for channel on join
|
20
|
+
def send_who(message)
|
21
|
+
@pipeline << ModSpox::Messages::Outgoing::Who.new(message.channel.name) if message.nick == me
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'mod_spox/messages/outgoing/Nick'
|
2
|
+
class Nicker < ModSpox::Plugin
|
3
|
+
def initialize(pipeline)
|
4
|
+
super(pipeline)
|
5
|
+
admin = Models::Group.filter(:name => 'admin').first
|
6
|
+
add_sig(:sig => 'nick (\S+)', :method => :change_nick, :group => admin, :params => [:nick])
|
7
|
+
end
|
8
|
+
|
9
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
10
|
+
# Join the given channel
|
11
|
+
def change_nick(message, params)
|
12
|
+
@pipeline << Messages::Outgoing::Nick.new(params[:nick])
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'mod_spox/messages/outgoing/Part'
|
2
|
+
class Parter < ModSpox::Plugin
|
3
|
+
|
4
|
+
def initialize(pipeline)
|
5
|
+
super(pipeline)
|
6
|
+
admin = Models::Group.filter(:name => 'admin').first
|
7
|
+
add_sig(:sig => 'part (\S+)', :method => :part, :group => admin, :params => [:channel])
|
8
|
+
add_sig(:sig => 'part', :method => :direct_part, :group => admin)
|
9
|
+
end
|
10
|
+
|
11
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
12
|
+
# Bot will part from given channel
|
13
|
+
def part(message, params)
|
14
|
+
@pipeline << Messages::Outgoing::Part.new(params[:channel])
|
15
|
+
end
|
16
|
+
|
17
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
18
|
+
# Bot will part from channel command is issued within
|
19
|
+
def direct_part(message, params)
|
20
|
+
@pipeline << Messages::Outgoing::Part.new(message.target)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
class Permissions < ModSpox::Plugin
|
2
|
+
|
3
|
+
def initialize(pipe)
|
4
|
+
super
|
5
|
+
admin = Models::Group.find_or_create(:name => 'admin')
|
6
|
+
add_sig(:sig => 'perm (\S+)', :group => admin, :method => :show_perm, :desc => 'Display permissions for plugin', :params => [:plugin])
|
7
|
+
add_sig(:sig => 'perm (\d+) (\S+)', :group => admin, :method => :set_perm, :desc => 'Sets permission for signature with given ID', :params => [:id, :group])
|
8
|
+
add_sig(:sig => 'group add (\S+)', :group => admin, :method => :add_group, :desc => 'Add a new authentication group', :params => [:group])
|
9
|
+
add_sig(:sig => 'invalid', :group => admin, :method => :invalid, :desc => 'foobar')
|
10
|
+
end
|
11
|
+
|
12
|
+
def show_perm(m, params)
|
13
|
+
output = ["Permissions for signatures owned by \2#{params[:plugin]}\2"]
|
14
|
+
Models::Signature.filter(:plugin => params[:plugin]).each do |s|
|
15
|
+
g = s.group
|
16
|
+
output << "[#{s.pk}] \2#{g.is_a?(Models::Group) ? g.name : 'unset'}\2 - #{s.signature} - #{s.description}"
|
17
|
+
end
|
18
|
+
if(output.size > 1)
|
19
|
+
reply m.replyto, output
|
20
|
+
else
|
21
|
+
error m.replyto, "Failed to locate signatures for given plugin: #{params[:plugin]}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def set_perm(m, params)
|
26
|
+
s = Models::Signature[params[:id].to_i]
|
27
|
+
if(s)
|
28
|
+
if(params[:group] == 'none')
|
29
|
+
g = true
|
30
|
+
else
|
31
|
+
g = Models::Group.filter(:name => params[:group]).first
|
32
|
+
end
|
33
|
+
if(g)
|
34
|
+
s.group_id = g.is_a?(Models::Group) ? g.pk : nil
|
35
|
+
s.save
|
36
|
+
information m.replyto, "Signature with ID #{s.pk} has been updated to group: #{g.is_a?(Models::Group) ? g.name : 'unset'}"
|
37
|
+
else
|
38
|
+
error m.replyto, "Group name is invalid. If it is a new group, add it first. (#{params[:group]})"
|
39
|
+
end
|
40
|
+
else
|
41
|
+
error m.replyto, "Failed to find signature with ID: #{params[:id]}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_group(m, params)
|
46
|
+
begin
|
47
|
+
raise 'Invalid group name: none' if params[:group] == 'none'
|
48
|
+
Models::Group.find_or_create(:name => params[:group])
|
49
|
+
information m.replyto, "New group \2#{params[:group]}\2 is now available"
|
50
|
+
rescue Object => boom
|
51
|
+
error m.replyto, "Unknown error when adding new group: #{params[:group]}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def invalid(m, params)
|
56
|
+
Models::Signature.dataset.update(:enabled => false)
|
57
|
+
information m.replyto, 'ok'
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
['mod_spox/messages/outgoing/Privmsg',
|
2
|
+
'mod_spox/messages/internal/PluginLoadRequest',
|
3
|
+
'mod_spox/messages/internal/PluginUnloadRequest',
|
4
|
+
'mod_spox/messages/internal/PluginReload',
|
5
|
+
'mod_spox/messages/internal/PluginModuleRequest'].each{|f|require f}
|
6
|
+
class PluginLoader < ModSpox::Plugin
|
7
|
+
|
8
|
+
def initialize(pipeline)
|
9
|
+
super(pipeline)
|
10
|
+
admin = Models::Group.filter(:name => 'admin').first
|
11
|
+
add_sig(:sig => 'plugins available', :method => :available_plugins, :group => admin, :desc => 'List all available plugins')
|
12
|
+
add_sig(:sig => 'plugins loaded', :method => :loaded_plugins, :group => admin, :desc => 'List all plugins currently loaded')
|
13
|
+
add_sig(:sig => 'plugins load (\S+)', :method => :load_plugin, :group => admin, :desc => 'Load the given plugin', :params => [:plugin])
|
14
|
+
add_sig(:sig => 'plugins unload (\S+)', :method => :unload_plugin, :group => admin, :desc => 'Unload given plugin', :params => [:plugin])
|
15
|
+
add_sig(:sig => 'plugins reload ?(\S+)?', :method => :reload_plugin, :group => admin, :desc => 'Reload single plugin or all plugins if names not provided', :params => [:plugin])
|
16
|
+
@pipeline.hook(self, :get_module, :Internal_PluginModuleResponse)
|
17
|
+
@plugins_mod = nil
|
18
|
+
end
|
19
|
+
|
20
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
21
|
+
# params:: matching signature params
|
22
|
+
# Output currently available plugins for loading
|
23
|
+
def available_plugins(message, params)
|
24
|
+
output = ["\2Currently available plugins:\2"]
|
25
|
+
find_plugins.each_pair do | plugin, path |
|
26
|
+
output << "\2#{plugin}:\2 #{path}"
|
27
|
+
end
|
28
|
+
reply message.replyto, output
|
29
|
+
end
|
30
|
+
|
31
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
32
|
+
# params:: matching signature params
|
33
|
+
# Output currently loaded plugins
|
34
|
+
def loaded_plugins(message, params)
|
35
|
+
@pipeline << Messages::Outgoing::Privmsg.new(message.replyto, "\2Currently loaded plugins:\2 #{plugin_list.join(', ')}")
|
36
|
+
end
|
37
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
38
|
+
# params:: matching signature params
|
39
|
+
# Load the given plugin
|
40
|
+
def load_plugin(message, params)
|
41
|
+
plugins = find_plugins
|
42
|
+
if(plugins.has_key?(params[:plugin].to_sym))
|
43
|
+
name = plugin_discovery(BotConfig[:pluginextraspath]).keys.include?(params[:plugin].to_sym) ? nil : "#{params[:plugin]}.rb"
|
44
|
+
@pipeline << Messages::Internal::PluginLoadRequest.new(self, plugins[params[:plugin].to_sym], name)
|
45
|
+
@pipeline << Messages::Outgoing::Privmsg.new(message.replyto, "Okay")
|
46
|
+
else
|
47
|
+
@pipeline << Messages::Outgoing::Privmsg.new(message.replyto, "Failed to find plugin: #{params[:plugin]}")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
52
|
+
# params:: matching signature params
|
53
|
+
# Unload the given plugin
|
54
|
+
def unload_plugin(message, params)
|
55
|
+
path = loaded_path(params[:plugin].to_sym)
|
56
|
+
unless(path.nil?)
|
57
|
+
name = plugin_discovery(BotConfig[:pluginextraspath]).keys.include?(params[:plugin].to_sym) ? nil : ".#{params[:plugin]}.rb"
|
58
|
+
@pipeline << Messages::Internal::PluginUnloadRequest.new(self, path, name)
|
59
|
+
@pipeline << Messages::Outgoing::Privmsg.new(message.replyto, "Okay")
|
60
|
+
else
|
61
|
+
@pipeline << Messages::Outgoing::Privmsg.new(message.replyto, "Failed to find loaded plugin named: #{params[:plugin]}")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
66
|
+
# params:: matching signature params
|
67
|
+
# Reloads plugins
|
68
|
+
def reload_plugin(message, params)
|
69
|
+
if(params[:plugin])
|
70
|
+
users = plugin_discovery(BotConfig[:userpluginpath])
|
71
|
+
extras = plugin_discovery(BotConfig[:pluginextraspath])
|
72
|
+
fresh = nil
|
73
|
+
stale = nil
|
74
|
+
users.each_pair{|name, path| stale = path if name == params[:plugin]}
|
75
|
+
extras.each_pair{|name, path| fresh = path if name == params[:plugin]}
|
76
|
+
if(fresh && stale)
|
77
|
+
@pipeline << Messages::Internal::PluginReload.new(fresh, stale)
|
78
|
+
reply message.replyto, "Reloading #{params[:plugin]}"
|
79
|
+
else
|
80
|
+
reply message.replyto, "\2Error:\2 Failed to find new and stale versions of: #{params[:plugin]}"
|
81
|
+
end
|
82
|
+
else
|
83
|
+
@pipeline << Messages::Internal::PluginReload.new
|
84
|
+
@pipeline << Messages::Outgoing::Privmsg.new(message.replyto, 'Full plugin reload requested')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# message:: ModSpox::Messages::Internal::PluginModuleResponse
|
89
|
+
# Receives the plugins module
|
90
|
+
def get_module(message)
|
91
|
+
@plugins_mod = message.module
|
92
|
+
end
|
93
|
+
|
94
|
+
# Upgrades extra plugins to latest version
|
95
|
+
def extras_upgrade
|
96
|
+
Logger.info("Starting plugin upgrade to current version: #{ModSpox.botversion}")
|
97
|
+
extras = plugin_discovery(BotConfig[:pluginextraspath])
|
98
|
+
pl = plugin_list
|
99
|
+
extras.keys.each{|d| extras.delete(d) unless pl.include?(d)}
|
100
|
+
extras.keys.each do |plugin|
|
101
|
+
path = loaded_path(plugin)
|
102
|
+
@pipeline << Messages::Internal::PluginUnloadRequest.new(self, path, plugin)
|
103
|
+
end
|
104
|
+
Logger.info('Waiting for plugins to complete unloading...')
|
105
|
+
sleep(3)
|
106
|
+
Logger.info('Loading active plugins back into the bot')
|
107
|
+
extras.each do |name, path|
|
108
|
+
@pipeline << Messages::Internal::PluginLoadRequest.new(self, path)
|
109
|
+
end
|
110
|
+
Logger.info("Plugin upgrade is now complete. Upgraded to version: #{ModSpox.botversion}")
|
111
|
+
end
|
112
|
+
|
113
|
+
private
|
114
|
+
|
115
|
+
# Returns the list of currently loaded plugins
|
116
|
+
def plugin_list
|
117
|
+
plug = []
|
118
|
+
@pipeline << Messages::Internal::PluginModuleRequest.new(self)
|
119
|
+
sleep(0.01) while @plugins_mod.nil?
|
120
|
+
@plugins_mod.constants.sort.each do |const|
|
121
|
+
klass = @plugins_mod.const_get(const)
|
122
|
+
if(klass < Plugin)
|
123
|
+
plug << const
|
124
|
+
end
|
125
|
+
end
|
126
|
+
@plugins_mod = nil
|
127
|
+
return plug
|
128
|
+
end
|
129
|
+
|
130
|
+
# Finds available plugins for loading
|
131
|
+
def find_plugins
|
132
|
+
users = plugin_discovery(BotConfig[:userpluginpath])
|
133
|
+
extras = plugin_discovery(BotConfig[:pluginextraspath])
|
134
|
+
plugins = users.merge(extras)
|
135
|
+
plugin_list.each do |name|
|
136
|
+
plugins.delete(name) if plugins.has_key?(name)
|
137
|
+
end
|
138
|
+
return plugins
|
139
|
+
end
|
140
|
+
|
141
|
+
# path:: path to directory
|
142
|
+
# Discovers any plugins within the files in the given path
|
143
|
+
def plugin_discovery(path)
|
144
|
+
plugins = Hash.new
|
145
|
+
Dir.new(path).each do |file|
|
146
|
+
begin
|
147
|
+
next unless file =~ /\.rb$/
|
148
|
+
sandbox = Module.new
|
149
|
+
sandbox.module_eval(IO.readlines("#{path}/#{file}").join("\n"))
|
150
|
+
sandbox.constants.each do |const|
|
151
|
+
klass = sandbox.const_get(const)
|
152
|
+
plugins[const.to_sym] = "#{path}/#{file}" if klass < Plugin
|
153
|
+
end
|
154
|
+
rescue Object => boom
|
155
|
+
Logger.warn("Failed to parse file: #{path}/#{file}. Reason: #{boom}\n#{boom.backtrace.join("\n")}")
|
156
|
+
next
|
157
|
+
end
|
158
|
+
end
|
159
|
+
return plugins
|
160
|
+
end
|
161
|
+
|
162
|
+
# name:: plugin name
|
163
|
+
# Returns the file path the given plugin originated from
|
164
|
+
def loaded_path(name)
|
165
|
+
Dir.new(BotConfig[:userpluginpath]).each do |file|
|
166
|
+
begin
|
167
|
+
next unless file =~ /\.rb$/
|
168
|
+
sandbox = Module.new
|
169
|
+
sandbox.module_eval(IO.readlines("#{BotConfig[:userpluginpath]}/#{file}").join("\n"))
|
170
|
+
sandbox.constants.each do |const|
|
171
|
+
return "#{BotConfig[:userpluginpath]}/#{file}" if const == name
|
172
|
+
end
|
173
|
+
rescue Object => boom
|
174
|
+
Logger.warn("Failed to load file: #{file}. Reason: #{boom}")
|
175
|
+
end
|
176
|
+
end
|
177
|
+
return nil
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'mod_spox/messages/outgoing/Pong'
|
2
|
+
require 'mod_spox/messages/outgoing/Ping'
|
3
|
+
require 'mod_spox/messages/internal/Reconnect'
|
4
|
+
require 'mod_spox/messages/internal/TimerAdd'
|
5
|
+
|
6
|
+
class Ponger < ModSpox::Plugin
|
7
|
+
|
8
|
+
def initialize(pipeline)
|
9
|
+
super(pipeline)
|
10
|
+
@lag = nil
|
11
|
+
@last = nil
|
12
|
+
@attempts = 0
|
13
|
+
add_sig(:sig => 'lag', :method => :print_lag, :desc => 'Shows bot\'s current lag to server')
|
14
|
+
@pipeline.hook(self, :ping, :Incoming_Ping)
|
15
|
+
@pipeline.hook(self, :get_lag_pong, :Incoming_Pong)
|
16
|
+
@lock = Mutex.new
|
17
|
+
@pipeline.hook(self, :check_start_ponger, :Internal_PluginsReady)
|
18
|
+
@running = false
|
19
|
+
send_lag_ping
|
20
|
+
end
|
21
|
+
|
22
|
+
# message:: ModSpox::Messages::Incoming::Ping
|
23
|
+
# Sends responding pongs to server pings
|
24
|
+
def ping(message)
|
25
|
+
@pipeline << Messages::Outgoing::Pong.new(message.server, message.string)
|
26
|
+
end
|
27
|
+
|
28
|
+
def send_lag_ping
|
29
|
+
if(@attempts > 5)
|
30
|
+
@pipeline << Messages::Internal::Reconnect.new
|
31
|
+
@lag = nil
|
32
|
+
@last = nil
|
33
|
+
@attempts = 0
|
34
|
+
else
|
35
|
+
t = Time.now
|
36
|
+
@last = t.to_f.to_s
|
37
|
+
@pipeline << Messages::Outgoing::Ping.new("#{@last}")
|
38
|
+
@attempts += 1
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_lag_pong(m)
|
43
|
+
@lock.synchronize do
|
44
|
+
t = m.string.to_f
|
45
|
+
return unless m.string == @last
|
46
|
+
@lag = Time.now.to_f - t
|
47
|
+
@last = nil
|
48
|
+
@attempts = 0
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def print_lag(m, params)
|
53
|
+
if(@lag.nil?)
|
54
|
+
warning m.replyto, 'Lag time currently unavailable'
|
55
|
+
else
|
56
|
+
information m.replyto, "Current lag time: #{sprintf('%0.4f', @lag)} seconds"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def start_ponger(m)
|
61
|
+
@running = true
|
62
|
+
send_lag_ping
|
63
|
+
@pipeline << Messages::Internal::TimerAdd.new(self, 60){ send_lag_ping }
|
64
|
+
end
|
65
|
+
|
66
|
+
def check_start_ponger(m)
|
67
|
+
@pipeline << Messages::Internal::TimerAdd.new(self, 30, nil, true){ @lock.synchronize{start_ponger(nil) unless @running} }
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
class PoolConfig < ModSpox::Plugin
|
2
|
+
|
3
|
+
def initialize(args)
|
4
|
+
super
|
5
|
+
group = Group.find_or_create(:name => 'admin')
|
6
|
+
add_sig(:sig => 'pool max workers(\s(\d+))?', :method => :max_workers, :group => group,
|
7
|
+
:desc => 'Show/set max number of worker threads', :params => [:max])
|
8
|
+
add_sig(:sig => 'pool worker timeout(\s(\d+))?', :method => :max_timeout, :group => group,
|
9
|
+
:desc => 'Show/set max worker timeout', :params => [:max])
|
10
|
+
add_sig(:sig => 'pool workers total', :method => :workers_total, :group => group,
|
11
|
+
:desc => 'Show current number of workers in pool')
|
12
|
+
end
|
13
|
+
|
14
|
+
def max_workers(message, params)
|
15
|
+
if(params[:max].nil?)
|
16
|
+
reply message.replyto, "Maximum number of worker threads allowed in pool: #{Pool.workers_max}"
|
17
|
+
else
|
18
|
+
params[:max] = params[:max].strip.to_i
|
19
|
+
if(params[:max] > 0)
|
20
|
+
config = Config.find_or_create(:name => 'pool_workers_min')
|
21
|
+
config.value = params[:max]
|
22
|
+
config.save
|
23
|
+
Pool.workers_max = params[:max]
|
24
|
+
reply message.replyto, "\2Thread Pool Update:\2 Number of worker threads updated to: #{params[:max]}"
|
25
|
+
else
|
26
|
+
reply message.replyto, "\2Error:\2 You must have at least one worker thread"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def max_timeout(message, params)
|
32
|
+
if(params[:max].nil?)
|
33
|
+
reply message.replyto, "Maximum number of seconds threads allowed per task: #{Pool.worker_timeout == 0 ? 'no limit' : Pool.worker_timeout}"
|
34
|
+
else
|
35
|
+
params[:max] = params[:max].strip.to_i
|
36
|
+
if(params[:max] >= 0)
|
37
|
+
config = Config.find_or_create(:name => 'pool_timeout')
|
38
|
+
config.value = params[:max]
|
39
|
+
config.save
|
40
|
+
Pool.worker_timeout = params[:max]
|
41
|
+
reply message.replyto, "\2Thread Pool Update:\2 Worker processing timeout updated to: #{params[:max]} seconds"
|
42
|
+
else
|
43
|
+
reply message.replyto, "\2Error:\2 Threads are not able to finish executing before they start"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def workers_total(message, params)
|
49
|
+
reply message.replyto, "Current number of worker threads in pool: #{Pool.workers}"
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'mod_spox/messages/internal/HaltBot'
|
2
|
+
|
3
|
+
class Quitter < ModSpox::Plugin
|
4
|
+
|
5
|
+
def initialize(pipeline)
|
6
|
+
super(pipeline)
|
7
|
+
add_sig(:sig => 'quit(\s.+)?', :method => :quit, :group => Models::Group.filter(:name => 'admin').first, :params => [:channel, :message])
|
8
|
+
end
|
9
|
+
|
10
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
11
|
+
# Instructs the bot to shutdown
|
12
|
+
def quit(message, params)
|
13
|
+
@pipeline << Messages::Internal::HaltBot.new
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
class Servers < ModSpox::Plugin
|
2
|
+
def initialize(pipeline)
|
3
|
+
super
|
4
|
+
admin = Models::Group.find_or_create(:name => 'admin')
|
5
|
+
add_sig(:sig => 'servers list', :method => :list, :group => admin, :desc => 'Show server list')
|
6
|
+
add_sig(:sig => 'servers add (\S+) (\d+)( \d+)?', :method => :add, :group => admin, :desc => 'Add server to list', :params => [:server, :port, :prio])
|
7
|
+
add_sig(:sig => 'servers del (\d+)', :method => :remove, :group => admin, :desc => 'Remove server from list', :params => [:id])
|
8
|
+
add_sig(:sig => 'servers prio (\d+) (\+|\-|\d+)', :method => :prio, :group => admin, :desc => 'Prioritize server', :params => [:id, :move])
|
9
|
+
end
|
10
|
+
|
11
|
+
def list(m, params)
|
12
|
+
output = ["\2Server list:\2"]
|
13
|
+
Models::Server.reverse_order(:priority).each do |s|
|
14
|
+
output << "\2[#{s.id}]\2 #{s.host}:#{s.port} \2Priority:\2 #{s.priority}"
|
15
|
+
end
|
16
|
+
reply m.replyto, output
|
17
|
+
end
|
18
|
+
|
19
|
+
def add(m, params)
|
20
|
+
begin
|
21
|
+
s = Models::Server.new(:host => params[:server], :port => params[:port].to_i)
|
22
|
+
s.priority = params[:prio].to_i if params[:prio]
|
23
|
+
s.save
|
24
|
+
information m.replyto, "New server has been added: #{params[:server]}:#{params[:port]}"
|
25
|
+
rescue Object => boom
|
26
|
+
error m.replyto, "Failed to add new server. Reason: #{boom}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def remove(m, params)
|
31
|
+
begin
|
32
|
+
raise "List must contain one server" unless Models::Server.count > 1
|
33
|
+
Models::Server[params[:id].to_i].destroy
|
34
|
+
information m.replyto, 'Server has been removed'
|
35
|
+
rescue Object => boom
|
36
|
+
error m.replyto, "Failed to remove server. Reason: #{boom}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def prio(m, params)
|
41
|
+
begin
|
42
|
+
s = Models::Server[params[:id].to_i]
|
43
|
+
if(params[:move] == '+')
|
44
|
+
s.priority += 1
|
45
|
+
elsif(params[:move] == '-')
|
46
|
+
s.priority -= 1 if s.priority > 0
|
47
|
+
else
|
48
|
+
s.priority = params[:move].to_i
|
49
|
+
end
|
50
|
+
s.save_changes
|
51
|
+
information m.replyto, 'Server priority has been updated.'
|
52
|
+
rescue Object => boom
|
53
|
+
error m.replyto, "Failed to update priority. Reason: #{boom}"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'mod_spox/messages/internal/StatusRequest'
|
2
|
+
|
3
|
+
class Status < ModSpox::Plugin
|
4
|
+
|
5
|
+
def initialize(pipeline)
|
6
|
+
super
|
7
|
+
add_sig(:sig => 'status', :method => :status, :desc => 'Show current status')
|
8
|
+
add_sig(:sig => 'version', :method => :version, :desc => 'Show version information')
|
9
|
+
add_sig(:sig => 'VERSION', :method => :version, :desc => 'Show version information')
|
10
|
+
@pipeline.hook(self, :get_status, :Internal_StatusResponse)
|
11
|
+
@resp = []
|
12
|
+
end
|
13
|
+
|
14
|
+
def status(m, pa)
|
15
|
+
@resp << m.replyto
|
16
|
+
@pipeline << Messages::Internal::StatusRequest.new(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def version(message, params)
|
20
|
+
reply message.replyto, "mod_spox IRC bot - Version: \2#{ModSpox.botversion}\2 (#{ModSpox.botcodename}) [http://modspox.rubyforge.org]"
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_status(m)
|
24
|
+
@resp.uniq!
|
25
|
+
@resp.each do |c|
|
26
|
+
reply c, "\2Status:\2 \2Uptime:\2 #{m.status[:uptime]} \2Plugins:\2 #{m.status[:plugins]} loaded \2Socket Connected:\2 #{m.status[:socket_connect].strftime("%Y/%m/%d-%H:%M:%S")} \2Lines sent:\2 #{m.status[:sent]} \2Lines Received:\2 #{m.status[:received]}"
|
27
|
+
@resp.delete(c)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'mod_spox/messages/internal/TriggersUpdate'
|
2
|
+
require 'mod_spox/messages/outgoing/Privmsg'
|
3
|
+
|
4
|
+
class Triggers < ModSpox::Plugin
|
5
|
+
|
6
|
+
include Messages::Outgoing
|
7
|
+
|
8
|
+
def initialize(pipeline)
|
9
|
+
super(pipeline)
|
10
|
+
admin = Models::Group.filter(:name => 'admin').first
|
11
|
+
add_sig(:sig => 'triggers active', :method => :active, :group => admin, :desc => 'List all currently active triggers')
|
12
|
+
add_sig(:sig => 'triggers list', :method => :list, :group => admin, :desc => 'List all triggers and their current status')
|
13
|
+
add_sig(:sig => 'triggers add (\S+)', :method => :add, :group => admin, :desc => 'Add a new trigger and activate it', :params => [:trigger])
|
14
|
+
add_sig(:sig => 'triggers remove (\d+)', :method => :remove, :group => admin, :desc => 'Remove trigger', :params => [:id])
|
15
|
+
add_sig(:sig => 'triggers activate (\d+)', :method => :activate, :group => admin, :desc => 'Activate the trigger', :params => [:id])
|
16
|
+
add_sig(:sig => 'triggers deactivate (\d+)', :method => :deactivate, :group => admin, :desc => 'Deactivate the trigger', :params => [:id])
|
17
|
+
end
|
18
|
+
|
19
|
+
def active(message, params)
|
20
|
+
triggers = Models::Trigger.filter(:active => true)
|
21
|
+
if(triggers)
|
22
|
+
output = ["\2Currently active triggers:\2"]
|
23
|
+
triggers.each do |t|
|
24
|
+
output << "#{t.pk}: #{t.trigger}"
|
25
|
+
end
|
26
|
+
reply message.replyto, output
|
27
|
+
else
|
28
|
+
@pipeline << Privmsg.new(message.replyto, 'No triggers are currently active')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def list(message, params)
|
33
|
+
triggers = Models::Trigger.all
|
34
|
+
if(triggers)
|
35
|
+
output = ["\2Trigger listing:\2"]
|
36
|
+
triggers.each do |t|
|
37
|
+
output << "#{t.pk}: #{t.trigger} -> \2#{t.active ? "activated" : "not activated"}\2"
|
38
|
+
end
|
39
|
+
reply message.replyto, output
|
40
|
+
else
|
41
|
+
@pipeline << Privmsg.new(message.replyto, 'No triggers found')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def add(message, params)
|
46
|
+
Models::Trigger.find_or_create(:trigger => params[:trigger]).update(:active => true)
|
47
|
+
@pipeline << Privmsg.new(message.replyto, "Trigger #{params[:trigger]} is now active")
|
48
|
+
@pipeline << Messages::Internal::TriggersUpdate.new
|
49
|
+
end
|
50
|
+
|
51
|
+
def remove(message, params)
|
52
|
+
trigger = Models::Trigger[params[:id]]
|
53
|
+
if(trigger)
|
54
|
+
trig = trigger.trigger
|
55
|
+
trigger.destroy
|
56
|
+
@pipeline << Privmsg.new(message.replyto, "Trigger #{trig} has been removed")
|
57
|
+
@pipeline << Messages::Internal::TriggersUpdate.new
|
58
|
+
else
|
59
|
+
@pipeline << Privmsg.new(message.replyto, "Failed to find trigger with ID: #{params[:id]}")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def activate(message, params)
|
64
|
+
trigger = Models::Trigger[params[:id]]
|
65
|
+
if(trigger)
|
66
|
+
trigger.update(:active => true)
|
67
|
+
@pipeline << Privmsg.new(message.replyto, "Trigger #{trigger.trigger} has been activated")
|
68
|
+
@pipeline << Messages::Internal::TriggersUpdate.new
|
69
|
+
else
|
70
|
+
@pipeline << Privmsg.new(message.replyto, "Failed to find trigger with ID: #{params[:id]}")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def deactivate(message, params)
|
75
|
+
trigger = Models::Trigger[params[:id]]
|
76
|
+
if(trigger)
|
77
|
+
trigger.update(:active => false)
|
78
|
+
@pipeline << Privmsg.new(message.replyto, "Trigger #{trigger.trigger} has been deactivated")
|
79
|
+
@pipeline << Messages::Internal::TriggersUpdate.new
|
80
|
+
else
|
81
|
+
@pipeline << Privmsg.new(message.replyto, "Failed to find trigger with ID: #{params[:id]}")
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'mod_spox/Exceptions'
|
2
|
+
|
3
|
+
module ModSpox
|
4
|
+
|
5
|
+
class BaseConfig
|
6
|
+
|
7
|
+
# file_path:: path to configuration file
|
8
|
+
# Creates new BaseConfig
|
9
|
+
def initialize(file_path)
|
10
|
+
@config = Hash.new
|
11
|
+
@file_path = file_path
|
12
|
+
parse_configuration
|
13
|
+
end
|
14
|
+
|
15
|
+
# name:: key of config item wanted
|
16
|
+
# Provides access to configuration data
|
17
|
+
def [](name)
|
18
|
+
name = name.to_sym unless name.is_a?(Symbol)
|
19
|
+
raise Exceptions::UnknownKey.new("Configuration has no value named: #{name.to_s}") unless @config.has_key?(name)
|
20
|
+
return @config[name]
|
21
|
+
end
|
22
|
+
|
23
|
+
def []=(key, value)
|
24
|
+
key = key.to_sym unless key.is_a?(Symbol)
|
25
|
+
@config[key] = value
|
26
|
+
write_configuration
|
27
|
+
end
|
28
|
+
|
29
|
+
# Parses the configuration file into a usable Hash
|
30
|
+
def parse_configuration
|
31
|
+
return unless File.exists?(BotConfig[:userconfigpath])
|
32
|
+
IO.readlines(BotConfig[:userconfigpath]).each{|line|
|
33
|
+
if(line =~ /^(\S+)\s*=\s*(\S*)\s*$/)
|
34
|
+
@config[$1.to_sym] = $2
|
35
|
+
end
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
# Writes the configuration file out to the provided file_path
|
40
|
+
# during initialization
|
41
|
+
def write_configuration
|
42
|
+
file = File.open(BotConfig[:userconfigpath], 'w')
|
43
|
+
@config.each_pair{|k,v|
|
44
|
+
file.puts("#{k.to_s}=#{v}")
|
45
|
+
}
|
46
|
+
file.close
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|