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,122 @@
|
|
1
|
+
require 'mod_spox/messages/outgoing/ChannelMode'
|
2
|
+
class AutoMode < ModSpox::Plugin
|
3
|
+
|
4
|
+
include Models
|
5
|
+
|
6
|
+
def initialize(pipeline)
|
7
|
+
super
|
8
|
+
@admin = Group.find_or_create(:name => 'moder')
|
9
|
+
@user = Group.find_or_create(:name => 'modee')
|
10
|
+
add_sig(:sig => 'addop (\S+)', :method => :addop, :group => @admin, :desc => 'Add a nick to the auto op list', :req => 'public', :params => [:nick])
|
11
|
+
add_sig(:sig => 'addvoice (\S+)', :method => :addvoice, :group => @admin, :desc => 'Add a nick to the auto voice list', :req => 'public', :params => [:nick])
|
12
|
+
add_sig(:sig => 'op', :method => :op, :group => @user, :desc => 'Instruct bot to give you operator status', :req => 'public')
|
13
|
+
add_sig(:sig => 'voice', :method => :voice, :group => @user, :desc => 'Instruct bot to give you voice status', :req => 'public')
|
14
|
+
add_sig(:sig => 'automode list (\S+)', :method => :list, :group => @admin, :desc => 'Show list of current auto-modes for channel', :params => [:channel])
|
15
|
+
add_sig(:sig => 'delmode (\S+)', :method => :remove, :group => @admin, :desc => 'Remove nick from any auto-modes in channel', :req => 'public', :params => [:nick])
|
16
|
+
ModeRecord.create_table unless ModeRecord.table_exists?
|
17
|
+
@pipeline.hook(self, :check_join, :Incoming_Join)
|
18
|
+
end
|
19
|
+
|
20
|
+
def addop(m, p)
|
21
|
+
nick = Helpers.find_model(p[:nick], false)
|
22
|
+
if(nick.is_a?(Nick))
|
23
|
+
ModeRecord.find_or_create(:nick_id => nick.pk, :channel_id => m.target.pk, :voice => false)
|
24
|
+
add_modee(nick)
|
25
|
+
reply m.replyto, "#{nick.nick} has been added to the auto-op list"
|
26
|
+
else
|
27
|
+
reply m.replyto, "\2Error:\2 Failed to find record of: #{p[:nick]}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def addvoice(m, p)
|
32
|
+
nick = Helpers.find_model(p[:nick], false)
|
33
|
+
if(nick.is_a?(Nick))
|
34
|
+
ModeRecord.find_or_create(:nick_id => nick.pk, :channel_id => m.target.pk, :voice => true)
|
35
|
+
add_modee(nick)
|
36
|
+
reply m.replyto, "#{nick.nick} has been added to the auto-voice list"
|
37
|
+
else
|
38
|
+
reply m.replyto, "\2Error:\2 Failed to find record of: #{p[:nick]}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def op(m, p)
|
43
|
+
record = ModeRecord.filter(:nick_id => m.source.pk, :channel_id => m.target.pk).first
|
44
|
+
if(record && !record.voice)
|
45
|
+
@pipeline << Messages::Outgoing::ChannelMode.new(m.target, '+o', m.source.nick) if me.is_op?(m.target)
|
46
|
+
else
|
47
|
+
reply m.replyto, "\2Error:\2 You are not listed on the auto-op list"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def voice(m, p)
|
52
|
+
ModeRecord.filter(:nick_id => m.source.pk, :channel_id => m.target.pk).each do |record|
|
53
|
+
@pipeline << Messages::Outgoing::ChannelMode.new(m.target, '+v', m.source.nick) if me.is_op?(m.target) && record.voice
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def list(m, p)
|
58
|
+
channel = Helpers.find_model(p[:channel], false)
|
59
|
+
if(channel.is_a?(Channel))
|
60
|
+
records = ModeRecord.filter(:channel_id => channel.pk)
|
61
|
+
if(records.count > 0)
|
62
|
+
reply m.replyto, "\2Auto-Mode Listing:\2"
|
63
|
+
sleep(0.01)
|
64
|
+
records.each do |record|
|
65
|
+
reply m.replyto, "#{record.nick.nick} \2->\2 #{record.voice == false ? "op" : "voice"}"
|
66
|
+
end
|
67
|
+
else
|
68
|
+
reply m.replyto, "\2Warning:\2 No users found in auto-mode list"
|
69
|
+
end
|
70
|
+
else
|
71
|
+
reply m.replyto, "\2Error:\2 Failed to find channel: #{p[:channel]}"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def remove(m, p)
|
76
|
+
nick = Helpers.find_model(p[:nick], false)
|
77
|
+
if(nick.is_a?(Nick))
|
78
|
+
ModeRecord.filter(:channel_id => m.target.pk, :nick_id => nick.pk).destroy
|
79
|
+
remove_modee(nick)
|
80
|
+
reply m.replyto, "All auto-modes for user: #{p[:nick]} have been removed"
|
81
|
+
else
|
82
|
+
reply m.replyto, "\2Error:\2 Failed to find nick: #{p[:nick]}"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def check_join(m)
|
87
|
+
return unless me.is_op?(m.channel)
|
88
|
+
matches = ModeRecord.filter(:nick_id => m.nick.pk, :channel_id => m.channel.pk)
|
89
|
+
if(matches.count > 0)
|
90
|
+
matches.each do |record|
|
91
|
+
mode = record.voice ? '+v' : '+o'
|
92
|
+
@pipeline << Messages::Outgoing::ChannelMode.new(m.channel, mode, m.nick.nick)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def add_modee(nick)
|
98
|
+
modee = Group.find_or_create(:name => 'modee')
|
99
|
+
nick.group = modee
|
100
|
+
end
|
101
|
+
|
102
|
+
def remove_modee(nick)
|
103
|
+
modee = Group.find_or_create(:name => 'modee')
|
104
|
+
if(ModeRecord.filter(:nick_id => nick.pk).count < 1)
|
105
|
+
nick.remove_group(modee)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
class ModeRecord < Sequel::Model
|
110
|
+
set_schema do
|
111
|
+
primary_key :id
|
112
|
+
boolean :voice, :null => false, :default => true
|
113
|
+
foreign_key :nick_id, :table => :nicks, :null => false
|
114
|
+
foreign_key :channel_id, :table => :channels, :null => false
|
115
|
+
index [:nick_id, :channel_id, :voice], :unique => true
|
116
|
+
end
|
117
|
+
|
118
|
+
many_to_one :channel, :class => ModSpox::Models::Channel
|
119
|
+
many_to_one :nick, :class => ModSpox::Models::Nick
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'mod_spox/messages/outgoing/Join'
|
2
|
+
|
3
|
+
class AutoRejoin < ModSpox::Plugin
|
4
|
+
|
5
|
+
def initialize(pipeline)
|
6
|
+
super
|
7
|
+
@pipeline.hook(self, :check_kick, :Incoming_Kick)
|
8
|
+
@pipeline.hook(self, :check_join, :Incoming_Join)
|
9
|
+
@pipeline.hook(self, :check_part, :Incoming_Part)
|
10
|
+
@pipeline.hook(self, :do_joins, :Incoming_Welcome)
|
11
|
+
end
|
12
|
+
|
13
|
+
def check_kick(message)
|
14
|
+
if(message.kickee == me)
|
15
|
+
@pipeline << Messages::Outgoing::Join.new(message.channel)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def check_join(m)
|
20
|
+
if(m.nick == me)
|
21
|
+
m.channel.update(:autojoin => true)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def check_part(m)
|
26
|
+
if(m.nick == me)
|
27
|
+
m.channel.update(:autojoin => false)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def do_joins(m)
|
32
|
+
Models::Channel.filter(:autojoin => true).each do |channel|
|
33
|
+
@pipeline << Messages::Outgoing::Join.new(channel)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# ex: set ts=4 et:
|
2
|
+
require "net/http"
|
3
|
+
require "cgi"
|
4
|
+
|
5
|
+
# bash.org quote plugin
|
6
|
+
# by pizza
|
7
|
+
|
8
|
+
class Bash < ModSpox::Plugin
|
9
|
+
|
10
|
+
def initialize(pipeline)
|
11
|
+
super
|
12
|
+
add_sig(:sig => 'bash( (top|latest|#\d+))?', :method => :random, :desc => 'Bash quote fetcher', :params => [:wspace, :cmd])
|
13
|
+
@site = 'http://bash.org/'
|
14
|
+
end
|
15
|
+
|
16
|
+
def random(m, params)
|
17
|
+
begin
|
18
|
+
u = @site + '?top'
|
19
|
+
if 'latest' == params[:cmd]
|
20
|
+
u = @site + '?latest'
|
21
|
+
elsif /^#(\d+)$/.match(params[:cmd])
|
22
|
+
u = @site + '?' + $1
|
23
|
+
end
|
24
|
+
reply m.replyto, get_text(u)
|
25
|
+
rescue Object => boom
|
26
|
+
error m.replyto, "Failed to fetch. #{boom}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def get_text(url)
|
33
|
+
begin
|
34
|
+
data = Net::HTTP.get_response(URI.parse(url)).body
|
35
|
+
# parse individual entries, they have a "qt" section within "quote"
|
36
|
+
m = data.scan(/<p class="qt">(.*?)<\/p>/m)
|
37
|
+
raise 'No quotes found' unless m.length > 0
|
38
|
+
if m.length > 1
|
39
|
+
m = m.delete_if{|x| x[0].length > 200 }
|
40
|
+
raise 'Only overly long quotes found' unless m.length > 0
|
41
|
+
end
|
42
|
+
i = rand(m.length) # NOTE: this works fine for individuals, since rand(1) is always 0
|
43
|
+
n = m[i][0].gsub(/<[^<]+>/, '') # select a random quote
|
44
|
+
o = Helpers.convert_entities(n) # unescape html entities
|
45
|
+
p = o.gsub("\r\n", " ").strip # replace newlines with spaces and trim
|
46
|
+
q = p.gsub(/(<([^>]+)>(?:[^<]+))<\2>/){ $1 } # replace duplicated name tags; condense lines
|
47
|
+
r = q.gsub(/\s{2,}/, ' ') # condense spaces
|
48
|
+
return r
|
49
|
+
rescue Object => boom
|
50
|
+
Logger.error(boom)
|
51
|
+
raise boom
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
@@ -0,0 +1,220 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
|
3
|
+
class Bouncer < ModSpox::Plugin
|
4
|
+
|
5
|
+
def initialize(pipeline)
|
6
|
+
super
|
7
|
+
bounce = Group.find_or_create(:name => 'bouncer')
|
8
|
+
add_sig(:sig => 'bouncer port( (\d+))?', :method => :port, :group => bounce, :desc => 'Show or set bouncer port',
|
9
|
+
:params => [:port])
|
10
|
+
add_sig(:sig => 'bouncer (start|stop|restart)', :method => :do_service, :group => bounce, :desc => 'Start, stop, or restart bouncer')
|
11
|
+
add_sig(:sig => 'bouncer status', :method => :status, :group => bounce, :desc => 'Show current bouncer status')
|
12
|
+
add_sig(:sig => 'bouncer disconnect', :method => :disconnect, :group => bounce, :desc => 'Disconnect all connected clients')
|
13
|
+
add_sig(:sig => 'bouncer clients'< :method => :clients, :group => bounce, :desc => 'List clients connected to bouncer')
|
14
|
+
@pipeline.hook(self, :get_msgs, :Incoming)
|
15
|
+
@listener = nil
|
16
|
+
@clients = []
|
17
|
+
@socket = nil
|
18
|
+
@processor = nil
|
19
|
+
@to_server = Queue.new
|
20
|
+
start_listener if Models::Config.filter(:name => 'bouncer_port').count > 0
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_msgs(message)
|
24
|
+
unless(@clients.empty?)
|
25
|
+
Logger.info("Bouncer has #{@clients.size} clients to send a message to")
|
26
|
+
@clients.each do |client|
|
27
|
+
begin
|
28
|
+
output = message.raw_content.is_a?(Array) ? message.raw_content.join("\n") : message.raw_content + "\n"
|
29
|
+
client[:connection].puts(output)
|
30
|
+
rescue Object => boom
|
31
|
+
Logger.warn("Bouncer encountered unexpected error. Disconnecting client. #{boom}")
|
32
|
+
client[:thread].kill if client[:thread].alive?
|
33
|
+
@clients.delete(client)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def port(m, params)
|
40
|
+
if(params[:port])
|
41
|
+
if(Models::Config.filter(:name => 'bouncer_port').count > 0)
|
42
|
+
reply m.replyto, "Bouncer port is set to: #{Models::Config.filter(:name => 'bouncer_port').first.value
|
43
|
+
else
|
44
|
+
error m.replyo, 'No port has been set for bouncer'
|
45
|
+
end
|
46
|
+
else
|
47
|
+
parmas[:port].strip!
|
48
|
+
c = Models::Config.find_or_create(:name => 'bouncer_port')
|
49
|
+
c.value = params[:port]
|
50
|
+
c.save
|
51
|
+
information m.replyto, "Bouncer port is not set to: #{params[:port]}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def do_service(m, params)
|
56
|
+
begin
|
57
|
+
case params[:action]
|
58
|
+
when 'start'
|
59
|
+
if(listening?)
|
60
|
+
error m.replyto, 'Bouncer is already running'
|
61
|
+
else
|
62
|
+
start_listener
|
63
|
+
information m.replyto, 'Bouncer has been started'
|
64
|
+
end
|
65
|
+
when 'stop'
|
66
|
+
if(listening?)
|
67
|
+
stop_listener
|
68
|
+
information m.replyto, 'Bouncer has been stopped'
|
69
|
+
else
|
70
|
+
error m.replyto, 'Bouncer is not currently running'
|
71
|
+
end
|
72
|
+
when 'restart'
|
73
|
+
stop_listener
|
74
|
+
start_listener
|
75
|
+
information m.replyto, 'Bouncer has been restarted'
|
76
|
+
end
|
77
|
+
rescue Object => boom
|
78
|
+
error m.replyto, "Error was encountered during #{params[:action]} process. (#{boom})"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def disconnect(m, params)
|
83
|
+
unless(@clients.empty?)
|
84
|
+
@clients.each do |client|
|
85
|
+
client[:connection].close unless client[:connection].closed?
|
86
|
+
@clients.delete(client)
|
87
|
+
end
|
88
|
+
information m.replyto, 'All clients have been disconnected'
|
89
|
+
else
|
90
|
+
warning m.replyto, 'No clients are connected to bouncer'
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def status(m, params)
|
95
|
+
warning m.replyto, 'not implemented'
|
96
|
+
end
|
97
|
+
|
98
|
+
private
|
99
|
+
|
100
|
+
def start_listener
|
101
|
+
port = Models::Config.filter(:name => 'bouncer_port').first
|
102
|
+
raise 'Port has not been set' unless port
|
103
|
+
port = port.value.to_i
|
104
|
+
@socket = OpenSSL::SSL::SSLServer.new(port)
|
105
|
+
@listener = Thread.new do
|
106
|
+
until(@socket.closed?)
|
107
|
+
begin
|
108
|
+
new_con = @socket.accept_nonblock
|
109
|
+
add_client(new_con)
|
110
|
+
rescue Errno::EAGAIN, Errno::EWOULDBLOCK, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR
|
111
|
+
IO.select([@socket])
|
112
|
+
retry
|
113
|
+
rescue Object => boom
|
114
|
+
Logger.warn "Bouncer listener encountered an error: #{boom}"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def add_client
|
121
|
+
end
|
122
|
+
|
123
|
+
class Bouncer < ModSpox::Plugin
|
124
|
+
|
125
|
+
def status(message, params)
|
126
|
+
end
|
127
|
+
|
128
|
+
private
|
129
|
+
|
130
|
+
def start_listener
|
131
|
+
port = Config[:bouncer_port]
|
132
|
+
if(port)
|
133
|
+
@socket = TCPServer.new(port)
|
134
|
+
@listener = Thread.new do
|
135
|
+
until(@socket.closed?)
|
136
|
+
begin
|
137
|
+
new_con = @socket.accept_nonblock
|
138
|
+
Logger.info("BOUNCER: New connection established on bouncer")
|
139
|
+
@clients << {
|
140
|
+
:connection => new_con,
|
141
|
+
:thread => Thread.new(new_con) do | con |
|
142
|
+
begin
|
143
|
+
Logger.info("CONNECTION: #{con}")
|
144
|
+
until(con.closed?)
|
145
|
+
Logger.info("WAITING FOR STUFF ON :#{con}")
|
146
|
+
Kernel.select([con], nil, nil, nil)
|
147
|
+
Logger.info("Woken up and ready to read")
|
148
|
+
string = con.gets
|
149
|
+
Logger.info("BOUNCER GOT MESSAGE: #{string}")
|
150
|
+
if(string.empty?)
|
151
|
+
raise Exception.new("EMPTY STRING")
|
152
|
+
else
|
153
|
+
@to_server << {:message => string, :socket => con}
|
154
|
+
end
|
155
|
+
end
|
156
|
+
rescue Object => boom
|
157
|
+
Logger.warn("THREAD BOUNCER ERROR: #{boom}")
|
158
|
+
end
|
159
|
+
end
|
160
|
+
}
|
161
|
+
rescue Errno::EAGAIN, Errno::EWOULDBLOCK, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR
|
162
|
+
IO.select([@socket])
|
163
|
+
retry
|
164
|
+
end
|
165
|
+
end
|
166
|
+
@listener = nil
|
167
|
+
end
|
168
|
+
start_processor
|
169
|
+
else
|
170
|
+
Logger.warn("Error: Bouncer was not started. Failed to find set port number")
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def stop_listener
|
175
|
+
@socket.close
|
176
|
+
@listener.kill unless @listener.nil?
|
177
|
+
@listener = nil
|
178
|
+
@to_server.clear
|
179
|
+
@processor.kill if !@processor.nil? && @processor.alive?
|
180
|
+
@processor = nil
|
181
|
+
end
|
182
|
+
|
183
|
+
def start_processor
|
184
|
+
@processor.kill if !@processor.nil? && @processor.alive?
|
185
|
+
@processor = Thread.new do
|
186
|
+
begin
|
187
|
+
while(@listener) do
|
188
|
+
info = @to_server.pop
|
189
|
+
Logger.info("Processing message: #{info[:message]}")
|
190
|
+
if(info[:message] =~ /^USER\s/i)
|
191
|
+
initialize_connection(info[:socket])
|
192
|
+
else
|
193
|
+
@pipeline << Messages::Outgoing::Raw.new(info[:message])
|
194
|
+
end
|
195
|
+
end
|
196
|
+
rescue Object => boom
|
197
|
+
Logger.warn("BOUNCER ERROR: #{boom}")
|
198
|
+
unless(@clients.empty?)
|
199
|
+
@clients.each do |socket|
|
200
|
+
socket[:connection].close
|
201
|
+
@clients.delete(socket)
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
def listening?
|
209
|
+
return !@listener.nil?
|
210
|
+
end
|
211
|
+
|
212
|
+
def initialize_connection(connection)
|
213
|
+
# send channel info and such to client
|
214
|
+
connection.puts(":localhost 001 #{me.nick} :Welcome to the network #{me.source}\n")
|
215
|
+
Models::Channel.filter(:parked => true).each do |channel|
|
216
|
+
connection.puts(":#{me.source} JOIN :#{channel.name}\n")
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# ex: set ts=4 et:
|
2
|
+
# rip-off of Dack's Web Economy Bullshit Generator (http://dack.com/web/bullshit.html)
|
3
|
+
# Copyright 2007 Ryan "pizza" Flynn
|
4
|
+
# Ported 2008 spox
|
5
|
+
|
6
|
+
class Bullshit < ModSpox::Plugin
|
7
|
+
include ModSpox::Models
|
8
|
+
def initialize(pipeline)
|
9
|
+
super(pipeline)
|
10
|
+
add_sig(:sig => 'bullshit', :method => :bullshit, :desc => 'Web economy bullshit generator')
|
11
|
+
@bs = [[ "aggregate","architect","benchmark","brand","cultivate","deliver","deploy","disintermediate","drive","e-enable","embrace","empower","enable","engage","engineer","enhance","envisioneer","evolve","expedite","exploit","extend","facilitate","generate","grow","harness","implement","incentivize","incubate","innovate","integrate","iterate","leverage","matrix","maximize","mesh","monetize","morph","optimize","orchestrate","productize","recontextualize","redefine","reintermediate","reinvent","repurpose","revolutionize","scale","seize","strategize","streamline","syndicate","synergize","synthesize","target","transform","transition","unleash","utilize","visualize","whiteboard" ],
|
12
|
+
[ "24/365","24/7","B2B","B2C","back-end","best-of-breed","bleeding-edge","bricks-and-clicks","clicks-and-mortar","collaborative","compelling","cross-platform","cross-media","customized","cutting-edge","distributed","dot-com","dynamic","e-business","efficient","end-to-end","enterprise","extensible","frictionless","front-end","global","granular","holistic","impactful","innovative","integrated","interactive","intuitive","killer","leading-edge","magnetic","mission-critical","next-generation","one-to-one","open-source","out-of-the-box","plug-and-play","proactive","real-time","revolutionary","rich","robust","scalable","seamless","sexy","sticky","strategic","synergistic","transparent","turn-key","ubiquitous","user-centric","value-added","vertical","viral","virtual","visionary","web-enabled","wireless","world-class" ],
|
13
|
+
[ "action-items","applications","architectures","bandwidth","channels","communities","content","convergence","deliverables","e-business","e-commerce","e-markets","e-services","e-tailers","experiences","eyeballs","functionalities","infomediaries","infrastructures","initiatives","interfaces","markets","methodologies","metrics","mindshare","models","networks","niches","paradigms","partnerships","platforms","portals","relationships","ROI","synergies","web-readiness","schemas","solutions","supply-chains","systems","technologies","users","vortals","web services" ]]
|
14
|
+
end
|
15
|
+
|
16
|
+
def bullshit(message, params)
|
17
|
+
reply(message.replyto, @bs[0][rand(@bs[0].length)] + " " + @bs[1][rand(@bs[1].length)] + " " + @bs[2][rand(@bs[2].length)])
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class Bytes < ModSpox::Plugin
|
2
|
+
include Models
|
3
|
+
def initialize(args)
|
4
|
+
super
|
5
|
+
add_sig(:sig => 'bytes (\d+)', :method => :convert, :desc => 'Convert bytes to human readable string', :params => [:bytes])
|
6
|
+
end
|
7
|
+
|
8
|
+
def convert(message, params)
|
9
|
+
reply message.replyto, "#{params[:bytes]} is roughly #{Helpers.format_size(params[:bytes].to_i)}"
|
10
|
+
end
|
11
|
+
end
|