mod_spox 0.0.4 → 0.0.5
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 +16 -0
- data/INSTALL +4 -1
- data/bin/mod_spox +3 -1
- data/data/mod_spox/extras/AOLSpeak.rb +2 -2
- data/data/mod_spox/extras/AutoKick.rb +3 -8
- data/data/mod_spox/extras/AutoMode.rb +135 -0
- data/data/mod_spox/extras/EightBall.rb +1 -0
- data/data/mod_spox/extras/Headers.rb +4 -3
- data/data/mod_spox/extras/PhpFuncLookup.rb +14 -11
- data/data/mod_spox/extras/Roulette.rb +3 -3
- data/data/mod_spox/extras/Search.rb +3 -2
- data/data/mod_spox/extras/Talk.rb +1 -9
- data/data/mod_spox/extras/Translate.rb +3 -3
- data/data/mod_spox/extras/UrbanDictionary.rb +5 -3
- data/data/mod_spox/extras/Weather.rb +5 -4
- data/data/mod_spox/plugins/Authenticator.rb +2 -2
- data/data/mod_spox/plugins/Banner.rb +207 -2
- data/data/mod_spox/plugins/Helper.rb +1 -1
- data/data/mod_spox/plugins/PluginLoader.rb +22 -6
- data/data/mod_spox/plugins/Triggers.rb +6 -4
- data/lib/mod_spox/Action.rb +2 -0
- data/lib/mod_spox/BaseConfig.rb +2 -0
- data/lib/mod_spox/Bot.rb +32 -6
- data/lib/mod_spox/BotConfig.rb +3 -0
- data/lib/mod_spox/Cache.rb +57 -0
- data/lib/mod_spox/ConfigurationWizard.rb +6 -2
- data/lib/mod_spox/Helpers.rb +36 -18
- data/lib/mod_spox/Loader.rb +5 -54
- data/lib/mod_spox/Logger.rb +49 -3
- data/lib/mod_spox/MessageFactory.rb +5 -0
- data/lib/mod_spox/Monitors.rb +14 -12
- data/lib/mod_spox/Pipeline.rb +38 -6
- data/lib/mod_spox/Plugin.rb +3 -0
- data/lib/mod_spox/PluginHolder.rb +22 -0
- data/lib/mod_spox/PluginManager.rb +123 -25
- data/lib/mod_spox/Pool.rb +52 -23
- data/lib/mod_spox/Socket.rb +21 -10
- data/lib/mod_spox/Timer.rb +32 -6
- data/lib/mod_spox/handlers/BadNick.rb +2 -0
- data/lib/mod_spox/handlers/Bounce.rb +3 -0
- data/lib/mod_spox/handlers/Created.rb +2 -0
- data/lib/mod_spox/handlers/Handler.rb +5 -0
- data/lib/mod_spox/handlers/Invite.rb +2 -0
- data/lib/mod_spox/handlers/Join.rb +21 -5
- data/lib/mod_spox/handlers/Kick.rb +2 -0
- data/lib/mod_spox/handlers/LuserChannels.rb +2 -0
- data/lib/mod_spox/handlers/LuserClient.rb +1 -0
- data/lib/mod_spox/handlers/LuserMe.rb +1 -0
- data/lib/mod_spox/handlers/LuserOp.rb +2 -0
- data/lib/mod_spox/handlers/LuserUnknown.rb +2 -0
- data/lib/mod_spox/handlers/Mode.rb +2 -0
- data/lib/mod_spox/handlers/Motd.rb +5 -2
- data/lib/mod_spox/handlers/MyInfo.rb +2 -0
- data/lib/mod_spox/handlers/Names.rb +5 -1
- data/lib/mod_spox/handlers/Nick.rb +2 -0
- data/lib/mod_spox/handlers/NickInUse.rb +2 -0
- data/lib/mod_spox/handlers/Notice.rb +16 -4
- data/lib/mod_spox/handlers/Part.rb +2 -0
- data/lib/mod_spox/handlers/Ping.rb +2 -0
- data/lib/mod_spox/handlers/Pong.rb +2 -0
- data/lib/mod_spox/handlers/Privmsg.rb +16 -4
- data/lib/mod_spox/handlers/Quit.rb +2 -0
- data/lib/mod_spox/handlers/Topic.rb +2 -0
- data/lib/mod_spox/handlers/Welcome.rb +3 -0
- data/lib/mod_spox/handlers/Who.rb +3 -1
- data/lib/mod_spox/handlers/Whois.rb +8 -0
- data/lib/mod_spox/handlers/YourHost.rb +2 -0
- data/lib/mod_spox/messages/Messages.rb +6 -0
- data/lib/mod_spox/messages/incoming/BadNick.rb +1 -0
- data/lib/mod_spox/messages/incoming/Bounce.rb +1 -0
- data/lib/mod_spox/messages/incoming/Created.rb +1 -0
- data/lib/mod_spox/messages/incoming/Invite.rb +1 -0
- data/lib/mod_spox/messages/incoming/Join.rb +1 -0
- data/lib/mod_spox/messages/incoming/Kick.rb +1 -0
- data/lib/mod_spox/messages/incoming/LuserChannels.rb +1 -0
- data/lib/mod_spox/messages/incoming/LuserClient.rb +1 -0
- data/lib/mod_spox/messages/incoming/LuserMe.rb +1 -0
- data/lib/mod_spox/messages/incoming/LuserOp.rb +1 -0
- data/lib/mod_spox/messages/incoming/LuserUnknown.rb +1 -0
- data/lib/mod_spox/messages/incoming/Mode.rb +1 -0
- data/lib/mod_spox/messages/incoming/Motd.rb +1 -0
- data/lib/mod_spox/messages/incoming/MyInfo.rb +1 -0
- data/lib/mod_spox/messages/incoming/Names.rb +1 -0
- data/lib/mod_spox/messages/incoming/Nick.rb +1 -0
- data/lib/mod_spox/messages/incoming/NickInUse.rb +1 -0
- data/lib/mod_spox/messages/incoming/Notice.rb +1 -0
- data/lib/mod_spox/messages/incoming/Part.rb +1 -0
- data/lib/mod_spox/messages/incoming/Ping.rb +1 -0
- data/lib/mod_spox/messages/incoming/Pong.rb +1 -0
- data/lib/mod_spox/messages/incoming/Privmsg.rb +1 -0
- data/lib/mod_spox/messages/incoming/Quit.rb +1 -0
- data/lib/mod_spox/messages/incoming/Topic.rb +1 -0
- data/lib/mod_spox/messages/incoming/TopicInfo.rb +1 -0
- data/lib/mod_spox/messages/incoming/Welcome.rb +1 -0
- data/lib/mod_spox/messages/incoming/Who.rb +1 -0
- data/lib/mod_spox/messages/incoming/Whois.rb +1 -0
- data/lib/mod_spox/messages/incoming/YourHost.rb +1 -0
- data/lib/mod_spox/messages/internal/NickRequest.rb +1 -0
- data/lib/mod_spox/messages/internal/NickResponse.rb +1 -0
- data/lib/mod_spox/messages/internal/PluginLoadRequest.rb +1 -0
- data/lib/mod_spox/messages/internal/PluginLoadResponse.rb +1 -0
- data/lib/mod_spox/messages/internal/PluginModuleRequest.rb +1 -0
- data/lib/mod_spox/messages/internal/PluginModuleResponse.rb +1 -0
- data/lib/mod_spox/messages/internal/PluginReload.rb +10 -0
- data/lib/mod_spox/messages/internal/PluginRequest.rb +1 -0
- data/lib/mod_spox/messages/internal/PluginResponse.rb +1 -0
- data/lib/mod_spox/messages/internal/PluginUnloadRequest.rb +1 -0
- data/lib/mod_spox/messages/internal/PluginUnloadResponse.rb +1 -0
- data/lib/mod_spox/messages/internal/StatusResponse.rb +1 -0
- data/lib/mod_spox/messages/internal/TimerAdd.rb +1 -0
- data/lib/mod_spox/messages/internal/TimerClear.rb +8 -0
- data/lib/mod_spox/messages/internal/TimerResponse.rb +1 -0
- data/lib/mod_spox/messages/outgoing/Away.rb +1 -0
- data/lib/mod_spox/messages/outgoing/Notice.rb +1 -0
- data/lib/mod_spox/messages/outgoing/Ping.rb +1 -0
- data/lib/mod_spox/messages/outgoing/Quit.rb +1 -0
- data/lib/mod_spox/messages/outgoing/Raw.rb +16 -0
- data/lib/mod_spox/models/Models.rb +4 -0
- data/lib/mod_spox/models/Nick.rb +9 -0
- data/lib/mod_spox/models/Setting.rb +3 -5
- data/lib/mod_spox/models/Signature.rb +2 -3
- metadata +8 -2
data/CHANGELOG
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
0.0.5 Release (Alpha status)
|
|
2
|
+
* Added new RAW message type for outgoing messages
|
|
3
|
+
* Ability to load/unload/reload individual plugins
|
|
4
|
+
* Plugins that fail to load are completely removed
|
|
5
|
+
* memcache support
|
|
6
|
+
* PluginHolder introduced to reduce instances of stale plugins
|
|
7
|
+
* Faster signature matching
|
|
8
|
+
* Updated threading for better performance
|
|
9
|
+
* Removed Base64 dependency
|
|
10
|
+
* Ban exemptions available
|
|
11
|
+
* New AutoMode plugin
|
|
12
|
+
* Fixed connection monitoring
|
|
13
|
+
* Removed lazying loading of classes/modules
|
|
14
|
+
* Output bursting is now working properly
|
|
15
|
+
* Added multiline support in Privmsgs to allow ordered output
|
|
16
|
+
|
|
1
17
|
0.0.4 Release (Alpha status)
|
|
2
18
|
* Signatures now encoded when stored
|
|
3
19
|
* SQLite lockup fixed on new version of sequel
|
data/INSTALL
CHANGED
data/bin/mod_spox
CHANGED
|
@@ -18,7 +18,7 @@ rescue Object => boom
|
|
|
18
18
|
# ignore if not found #
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
$BOTVERSION='0.0.
|
|
21
|
+
$BOTVERSION='0.0.5'
|
|
22
22
|
$VERBOSITY = 0
|
|
23
23
|
$MOD_SPOX_PATH = nil
|
|
24
24
|
|
|
@@ -66,5 +66,7 @@ opts.each do |opt, arg|
|
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
initialize_bot
|
|
69
|
+
require 'mod_spox/Bot'
|
|
70
|
+
|
|
69
71
|
bot = Bot.new
|
|
70
72
|
bot.run
|
|
@@ -28,9 +28,9 @@ class AOLSpeak < ModSpox::Plugin
|
|
|
28
28
|
else
|
|
29
29
|
channel = message.target
|
|
30
30
|
end
|
|
31
|
-
nick =
|
|
31
|
+
nick = Helpers.find_model(params[:nick], false)
|
|
32
32
|
if(channel && nick)
|
|
33
|
-
@banner.ban(nick, channel, 60, @aolspeak[rand(@aolspeak.size) - 1], invite=false, show_time=false)
|
|
33
|
+
@banner.plugin.ban(nick, channel, 60, @aolspeak[rand(@aolspeak.size) - 1], invite=false, show_time=false)
|
|
34
34
|
else
|
|
35
35
|
reply message.replyto, "\2Error:\2 Failed to find channel: #{params[:channel]}" unless channel
|
|
36
36
|
reply message.replyto, "\2Error:\2 Failed to find nick: #{params[:nick]}" unless nick
|
|
@@ -34,17 +34,12 @@ class AutoKick < ModSpox::Plugin
|
|
|
34
34
|
|
|
35
35
|
def add(message, params)
|
|
36
36
|
if(params[:channel])
|
|
37
|
-
channel = Channel.filter(:name => params[:channel])
|
|
37
|
+
channel = Channel.filter(:name => params[:channel]).first
|
|
38
38
|
else
|
|
39
39
|
channel = message.target
|
|
40
40
|
end
|
|
41
41
|
if(channel)
|
|
42
|
-
record = AutoKickRecord.
|
|
43
|
-
record.channel_id = channel.pk
|
|
44
|
-
record.pattern = params[:regex]
|
|
45
|
-
record.message = params[:message]
|
|
46
|
-
record.bantime = params[:time]
|
|
47
|
-
record.save
|
|
42
|
+
record = AutoKickRecord.find_or_create(:pattern => params[:regex], :message => params[:message], :bantime => params[:time].to_i, :channel_id => channel.pk)
|
|
48
43
|
reply message.replyto, "New autokick rule has been created"
|
|
49
44
|
do_listen
|
|
50
45
|
else
|
|
@@ -69,7 +64,7 @@ class AutoKick < ModSpox::Plugin
|
|
|
69
64
|
reg = Regexp.new(pattern)
|
|
70
65
|
unless(reg.match(message.message).nil?)
|
|
71
66
|
record = AutoKickRecord.filter(:pattern => pattern).first
|
|
72
|
-
@banner.ban(message.source, message.target, record.bantime, record.message, invite=false, show_time=true)
|
|
67
|
+
@banner.plugin.ban(message.source, message.target, record.bantime, record.message, invite=false, show_time=true)
|
|
73
68
|
end
|
|
74
69
|
end
|
|
75
70
|
end
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
class AutoMode < ModSpox::Plugin
|
|
2
|
+
|
|
3
|
+
include Models
|
|
4
|
+
|
|
5
|
+
def initialize(pipeline)
|
|
6
|
+
super
|
|
7
|
+
@admin = Group.find_or_create(:name => 'moder')
|
|
8
|
+
@user = Group.find_or_create(:name => 'modee')
|
|
9
|
+
Signature.find_or_create(:signature => 'addop (\S+)', :plugin => name, :method => 'addop', :group_id => @admin.pk,
|
|
10
|
+
:description => 'Add a nick to the auto op list', :requirement => 'public').params = [:nick]
|
|
11
|
+
Signature.find_or_create(:signature => 'addvoice (\S+)', :plugin => name, :method => 'addvoice', :group_id => @admin.pk,
|
|
12
|
+
:description => 'Add a nick to the auto voice list', :requirement => 'public').params = [:nick]
|
|
13
|
+
Signature.find_or_create(:signature => 'op', :plugin => name, :method => 'op', :group_id => @user.pk,
|
|
14
|
+
:description => 'Instruct bot to give you operator status', :requirement => 'public')
|
|
15
|
+
Signature.find_or_create(:signature => 'voice', :plugin => name, :method => 'voice', :group_id => @user.pk,
|
|
16
|
+
:description => 'Instruct bot to give you voice status', :requirement => 'public')
|
|
17
|
+
Signature.find_or_create(:signature => 'automode list (\S+)', :plugin => name, :method => 'list', :group_id => @admin.pk,
|
|
18
|
+
:description => 'Show list of current auto-modes for channel').params = [:channel]
|
|
19
|
+
Signature.find_or_create(:signature => 'delmode (\S+)', :plugin => name, :method => 'remove', :group_id => @admin.pk,
|
|
20
|
+
:description => 'Remove nick from any auto-modes in channel', :requirement => 'public').params = [:nick]
|
|
21
|
+
ModeRecord.create_table unless ModeRecord.table_exists?
|
|
22
|
+
@pipeline.hook(self, :check_join, :Incoming_Join)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def addop(m, p)
|
|
26
|
+
nick = Helpers.find_model(p[:nick], false)
|
|
27
|
+
if(nick.is_a?(Nick))
|
|
28
|
+
ModeRecord.find_or_create(:nick_id => nick.pk, :channel_id => m.target.pk, :voice => false)
|
|
29
|
+
add_modee(nick)
|
|
30
|
+
reply m.replyto, "#{nick.nick} has been added to the auto-op list"
|
|
31
|
+
else
|
|
32
|
+
reply m.replyto, "\2Error:\2 Failed to find record of: #{p[:nick]}"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def addvoice(m, p)
|
|
37
|
+
nick = Helpers.find_model(p[:nick], false)
|
|
38
|
+
if(nick.is_a?(Nick))
|
|
39
|
+
ModeRecord.find_or_create(:nick_id => nick.pk, :channel_id => m.target.pk, :voice => true)
|
|
40
|
+
add_modee(nick)
|
|
41
|
+
reply m.replyto, "#{nick.nick} has been added to the auto-voice list"
|
|
42
|
+
else
|
|
43
|
+
reply m.replyto, "\2Error:\2 Failed to find record of: #{p[:nick]}"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def op(m, p)
|
|
48
|
+
record = ModeRecord.filter(:nick_id => m.source.pk, :channel_id => m.target.pk).first
|
|
49
|
+
if(record && !record.voice)
|
|
50
|
+
@pipeline << Messages::Outgoing::ChannelMode.new(m.target, '+o', m.source.nick) if me.is_op?(m.target)
|
|
51
|
+
else
|
|
52
|
+
reply m.replyto, "\2Error:\2 You are not listed on the auto-op list"
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def voice(m, p)
|
|
57
|
+
record = ModeRecord.filter(:nick_id => m.source.pk, :channel_id => m.target.pk).first
|
|
58
|
+
if(record && record.voice)
|
|
59
|
+
@pipeline << Messages::Outgoing::ChannelMode.new(m.target, '+v', m.source.nick) if me.is_op?(m.target)
|
|
60
|
+
else
|
|
61
|
+
reply m.replyto, "\2Error:\2 You are not listed on the auto-voice list"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def list(m, p)
|
|
66
|
+
channel = Helpers.find_model(p[:channel], false)
|
|
67
|
+
if(channel.is_a?(Channel))
|
|
68
|
+
records = ModeRecord.filter(:channel_id => channel.pk)
|
|
69
|
+
if(records.size > 0)
|
|
70
|
+
reply m.replyto, "\2Auto-Mode Listing:\2"
|
|
71
|
+
sleep(0.01)
|
|
72
|
+
records.each do |record|
|
|
73
|
+
reply m.replyto, "#{record.nick.nick} \2->\2 #{record.voice == false ? "op" : "voice"}"
|
|
74
|
+
end
|
|
75
|
+
else
|
|
76
|
+
reply m.replyto, "\2Warning:\2 No users found in auto-mode list"
|
|
77
|
+
end
|
|
78
|
+
else
|
|
79
|
+
reply m.replyto, "\2Error:\2 Failed to find channel: #{p[:channel]}"
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def remove(m, p)
|
|
84
|
+
nick = Helpers.find_model(p[:nick], false)
|
|
85
|
+
if(nick.is_a?(Nick))
|
|
86
|
+
ModeRecord.filter(:channel_id => m.target.pk, :nick_id => nick.pk).destroy
|
|
87
|
+
remove_modee(nick)
|
|
88
|
+
reply m.replyto, "All auto-modes for user: #{p[:nick]} have been removed"
|
|
89
|
+
else
|
|
90
|
+
reply m.replyto, "\2Error:\2 Failed to find nick: #{p[:nick]}"
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def check_join(m)
|
|
95
|
+
return unless me.is_op?(m.channel)
|
|
96
|
+
matches = ModeRecord.filter(:nick_id => m.nick.pk, :channel_id => m.channel.pk)
|
|
97
|
+
if(matches.size > 0)
|
|
98
|
+
matches.each do |record|
|
|
99
|
+
mode = record.voice ? '+v' : '+o'
|
|
100
|
+
@pipeline << Messages::Outgoing::ChannelMode.new(m.channel, mode, m.nick.nick)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def add_modee(nick)
|
|
106
|
+
modee = Group.find_or_create(:name => 'modee')
|
|
107
|
+
nick.group = modee
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def remove_modee(nick)
|
|
111
|
+
modee = Group.find_or_create(:name => 'modee')
|
|
112
|
+
if(ModeRecord.filter(:nick_id => nick.pk).size < 1)
|
|
113
|
+
nick.remove_group(modee)
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
class ModeRecord < Sequel::Model
|
|
118
|
+
set_schema do
|
|
119
|
+
primary_key :id
|
|
120
|
+
boolean :voice, :null => false, :default => true
|
|
121
|
+
foreign_key :nick_id, :table => :nicks, :null => false
|
|
122
|
+
foreign_key :channel_id, :table => :channels, :null => false
|
|
123
|
+
index [:nick_id, :channel_id, :voice], :unique => true
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def channel
|
|
127
|
+
ModSpox::Models::Channel[channel_id]
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def nick
|
|
131
|
+
ModSpox::Models::Nick[nick_id]
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
end
|
|
@@ -25,6 +25,7 @@ class EightBall < ModSpox::Plugin
|
|
|
25
25
|
|
|
26
26
|
def eightball(message, params)
|
|
27
27
|
@pipeline << Messages::Outgoing::Privmsg.new(message.replyto, 'shakes magic 8 ball...', true)
|
|
28
|
+
sleep(1)
|
|
28
29
|
reply message.replyto, "#{message.source.nick}: #{@responses[rand(@responses.size) - 1]}"
|
|
29
30
|
end
|
|
30
31
|
|
|
@@ -36,11 +36,12 @@ class Headers < ModSpox::Plugin
|
|
|
36
36
|
con = Net::HTTP.new(location, port)
|
|
37
37
|
con.use_ssl = secure
|
|
38
38
|
response = con.get(page, nil)
|
|
39
|
-
|
|
39
|
+
output = ["Response code: #{response.code}"]
|
|
40
40
|
response.each{|key,val|
|
|
41
|
-
|
|
41
|
+
output << "#{key}: #{val}"
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
output << "Header listing complete"
|
|
44
|
+
reply message.replyto, output
|
|
44
45
|
rescue Object => boom
|
|
45
46
|
reply message.replyto, "Error retrieving headers: #{boom}"
|
|
46
47
|
end
|
|
@@ -190,11 +190,12 @@ class PhpFuncLookup < ModSpox::Plugin
|
|
|
190
190
|
desc.gsub!(/[\r\n]/, ' ')
|
|
191
191
|
desc.gsub!(/<.+?>/, ' ')
|
|
192
192
|
desc = CGI::unescapeHTML(desc.gsub(/\s+/, ' '))
|
|
193
|
-
|
|
194
|
-
|
|
193
|
+
output = ["\2PHP Superglobal\2"]
|
|
194
|
+
output << "\2#{name}:\2 #{desc}"
|
|
195
195
|
else
|
|
196
|
-
|
|
196
|
+
output = "No superglobal found matching: #{name}"
|
|
197
197
|
end
|
|
198
|
+
reply m.replyto, output
|
|
198
199
|
end
|
|
199
200
|
|
|
200
201
|
def parse_wildcard(m, name)
|
|
@@ -218,8 +219,9 @@ class PhpFuncLookup < ModSpox::Plugin
|
|
|
218
219
|
end
|
|
219
220
|
end
|
|
220
221
|
matches.sort!
|
|
221
|
-
|
|
222
|
-
|
|
222
|
+
output = ["Lots of matching functions. Truncating list to 20 results."]
|
|
223
|
+
output << matches.values_at(0..19).join(', ')
|
|
224
|
+
reply m.replyto, output
|
|
223
225
|
end
|
|
224
226
|
|
|
225
227
|
def parse_function(m, name, filename)
|
|
@@ -231,19 +233,20 @@ class PhpFuncLookup < ModSpox::Plugin
|
|
|
231
233
|
versions = CGI::unescapeHTML(versions)
|
|
232
234
|
proto = CGI::unescapeHTML(proto.gsub(/<.+?>/, ' ').gsub(/[\s]+/, ' '))
|
|
233
235
|
desc = CGI::unescapeHTML(desc.gsub(/<.+?>/, ' ').gsub(/[\s]+/, ' '))
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
236
|
+
output = [versions]
|
|
237
|
+
output << "\2#{proto}\2"
|
|
238
|
+
output << desc
|
|
239
|
+
output << "http://www.php.net/manual/en/#{filename.gsub(/\.html$/, '.php')}"
|
|
240
|
+
reply m.replyto, output
|
|
238
241
|
end
|
|
239
242
|
|
|
240
243
|
def parse_operator(m, name)
|
|
241
244
|
Logger.log "parse_operator name=#{name}"
|
|
242
245
|
name.downcase!
|
|
243
246
|
type, title, ejemplo = @ops[name]
|
|
244
|
-
|
|
247
|
+
output = ["\2#{name}\2 is the \2#{title.to_a.join("\2 or \2")}\2 operator"]
|
|
245
248
|
type.to_a.each do |t|
|
|
246
|
-
|
|
249
|
+
output << "http://php.net/manual/en/language.operators.#{t}.php"
|
|
247
250
|
end
|
|
248
251
|
end
|
|
249
252
|
|
|
@@ -61,7 +61,7 @@ class Roulette < ModSpox::Plugin
|
|
|
61
61
|
def shoot(message, params)
|
|
62
62
|
return unless message.is_public?
|
|
63
63
|
cur_game = game(message.target)
|
|
64
|
-
nick =
|
|
64
|
+
nick = Helpers.find_model(params[:nick], false)
|
|
65
65
|
if(cur_game.shots == 1 && nick && Info.filter(:game_id => cur_game.pk, :nick_id => nick.pk))
|
|
66
66
|
do_shot(nick, message.target)
|
|
67
67
|
else
|
|
@@ -96,7 +96,7 @@ class Roulette < ModSpox::Plugin
|
|
|
96
96
|
def stats(message, params)
|
|
97
97
|
return unless message.is_public?
|
|
98
98
|
if(params[:nick])
|
|
99
|
-
nick =
|
|
99
|
+
nick = Helpers.find_model(params[:nick], false)
|
|
100
100
|
unless(nick)
|
|
101
101
|
reply(message.replyto, "\2Error:\2 Failed to find record of #{params[:nick]}")
|
|
102
102
|
return
|
|
@@ -183,7 +183,7 @@ class Roulette < ModSpox::Plugin
|
|
|
183
183
|
def kill_nick(nick, channel)
|
|
184
184
|
unless(@banner.nil?)
|
|
185
185
|
begin
|
|
186
|
-
@banner.ban(nick, channel, 30, '*BANG*', true, false)
|
|
186
|
+
@banner.plugin.ban(nick, channel, 30, '*BANG*', true, false)
|
|
187
187
|
rescue Banner::NotOperator => boom
|
|
188
188
|
reply(channel, "#{nick.nick}: *BANG*")
|
|
189
189
|
rescue Object => boom
|
|
@@ -22,10 +22,11 @@ class Search < ModSpox::Plugin
|
|
|
22
22
|
title = CGI::unescapeHTML(title)
|
|
23
23
|
results.push [title, url]
|
|
24
24
|
end
|
|
25
|
-
|
|
25
|
+
output = ["Search results for \2#{params[:terms]}:\2"]
|
|
26
26
|
results.slice(0, limit).each do |title, url|
|
|
27
|
-
|
|
27
|
+
output << "#{title} -> #{Helpers.tinyurl(url)} [#{url.scan(/^http:\/\/.+?\//)[0]}]"
|
|
28
28
|
end
|
|
29
|
+
reply message.replyto, output
|
|
29
30
|
rescue Object => boom
|
|
30
31
|
@pipeline << Privmsg.new(message.replyto, "Failed to find any results for: #{params[:terms]} Reason: #{boom}")
|
|
31
32
|
end
|
|
@@ -22,20 +22,12 @@ class Talk < ModSpox::Plugin
|
|
|
22
22
|
private
|
|
23
23
|
|
|
24
24
|
def send_p(message, params, action=false)
|
|
25
|
-
target =
|
|
25
|
+
target = Helpers.find_model(params[:target], false)
|
|
26
26
|
if(target.nil?)
|
|
27
27
|
reply message.replyto, "\2Error:\2 Failed to locate target: #{params[:target]}"
|
|
28
28
|
else
|
|
29
29
|
@pipeline << Messages::Outgoing::Privmsg.new(target, params[:text], action)
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
|
-
|
|
33
|
-
def find_target(string)
|
|
34
|
-
result = Channel.filter(:name => string).first
|
|
35
|
-
return result if result
|
|
36
|
-
result = Nick.filter(:nick => string).first
|
|
37
|
-
return result if result
|
|
38
|
-
return nil
|
|
39
|
-
end
|
|
40
32
|
|
|
41
33
|
end
|
|
@@ -16,7 +16,7 @@ class Translate < ModSpox::Plugin
|
|
|
16
16
|
|
|
17
17
|
def auto_add(message, params)
|
|
18
18
|
return unless message.is_public?
|
|
19
|
-
nick =
|
|
19
|
+
nick = Helpers.find_model(params[:nick], false)
|
|
20
20
|
if(nick && nick.channels.include?(message.target))
|
|
21
21
|
@watchers[message.target.pk] = {} unless @watchers.has_key?(message.target.pk)
|
|
22
22
|
@watchers[message.target.pk][nick.pk] = params[:lang] unless @watchers[message.target.pk].has_key?(nick.pk)
|
|
@@ -29,7 +29,7 @@ class Translate < ModSpox::Plugin
|
|
|
29
29
|
|
|
30
30
|
def auto_remove(message, params)
|
|
31
31
|
return unless message.is_public?
|
|
32
|
-
nick =
|
|
32
|
+
nick = Helpers.find_model(params[:nick], false)
|
|
33
33
|
if(nick)
|
|
34
34
|
if(@watchers.has_key?(message.target.pk))
|
|
35
35
|
@watchers[message.target.pk].delete(nick.pk) if @watchers[message.target.pk].has_key?(nick.pk)
|
|
@@ -54,7 +54,7 @@ class Translate < ModSpox::Plugin
|
|
|
54
54
|
reply message.replyto, "\2Translation (#{message.source.nick}):\2 #{do_translation("#{@watchers[message.target.pk][message.source.pk]}en", message.message)}"
|
|
55
55
|
elsif(message.message =~ /^(\S+)[:,]/)
|
|
56
56
|
Logger.log("Matched a nick: #{$1}")
|
|
57
|
-
nick =
|
|
57
|
+
nick = Helpers.find_model($1, false)
|
|
58
58
|
return unless nick
|
|
59
59
|
if(@watchers[message.target.pk].has_key?(nick.pk))
|
|
60
60
|
reply message.replyto, "\2(#{do_translation("en|#{@watchers[message.target.pk][nick.pk]}", 'translation')})\2 #{do_translation("en|#{@watchers[message.target.pk][nick.pk]}", message.message)}"
|
|
@@ -22,14 +22,16 @@ class UrbanDictionary < ModSpox::Plugin
|
|
|
22
22
|
udict = SOAP::RPC::Driver.new(site, 'urn:UrbanSearch')
|
|
23
23
|
udict.add_method('lookup', 'key', 'term')
|
|
24
24
|
defs = udict.lookup(key, params[:term])
|
|
25
|
+
output = []
|
|
25
26
|
if defs.size < result + 1
|
|
26
27
|
@pipeline << Privmsg.new(message.replyto, "Error: Definition number #{result+1} for term: #{params[:term]} not found.")
|
|
27
28
|
else
|
|
28
29
|
defin = defs[result].definition.length > 500 ? defs[result].definition.slice(0..500) + " *[CUT]*" : defs[result].definition
|
|
29
30
|
exp = defs[result].example.length > 500 ? defs[result].example.slice(0..500) + " *[CUT]*" : defs[result].example
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
output << ["Definition for \2#{defs[result].word}:\2"]
|
|
32
|
+
output << defin
|
|
33
|
+
output << "\2Example usage:\2 #{exp}" if exp.length > 0
|
|
34
|
+
reply message.replyto, output
|
|
33
35
|
end
|
|
34
36
|
rescue Timeout::Error
|
|
35
37
|
@pipeline << Privmsg.new(message.replyto, "Failed to establish connection to server.")
|
|
@@ -40,10 +40,11 @@ class Weather < ModSpox::Plugin
|
|
|
40
40
|
end
|
|
41
41
|
i += 1
|
|
42
42
|
end
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
output = ["Weather for: \2#{location}\2"]
|
|
44
|
+
output << "Current Temp: #{curtemp} - Feels like: #{feeltemp}"
|
|
45
|
+
output << "[UV Index: #{uv.gsub(/&.+?;/, '')}][Wind: #{wind.gsub(/&.+?;/, '')}][Humiditiy: #{humid.gsub(/&.+?;/, '')}][Pressure: #{pressure.gsub(/&.+?;/, '')}][Dew Point: #{dewpoint.gsub(/&.+?;/, '')}][Visibility: #{visibility.gsub(/&.+?;/, '')}]"
|
|
46
|
+
output << future.values_at(0..2).join(' ')
|
|
47
|
+
reply message.replyto, output
|
|
47
48
|
else
|
|
48
49
|
reply message.replyto, "Failed to retrieve weather data."
|
|
49
50
|
end
|
|
@@ -159,7 +159,7 @@ class Authenticator < ModSpox::Plugin
|
|
|
159
159
|
# params:: Signature parameters
|
|
160
160
|
# Display info for given nick
|
|
161
161
|
def nick_info(message, params)
|
|
162
|
-
nick =
|
|
162
|
+
nick = Helpers.find_model(params[:nick], false)
|
|
163
163
|
if(nick)
|
|
164
164
|
info = []
|
|
165
165
|
info << "\2INFO [#{nick.nick}]:\2"
|
|
@@ -204,7 +204,7 @@ class Authenticator < ModSpox::Plugin
|
|
|
204
204
|
# Remove given nick from authenticationg group
|
|
205
205
|
def unset_nick(message, params)
|
|
206
206
|
group = Models::Group.filter(:name => params[:group]).first
|
|
207
|
-
nick =
|
|
207
|
+
nick = Helpers.find_model(params[:nick], false)
|
|
208
208
|
if(group && nick)
|
|
209
209
|
nick.remove_group(group)
|
|
210
210
|
@pipeline << Messages::Outgoing::Privmsg.new(message.replyto, "Removed #{params[:nick]} from the #{params[:group]} authentication group.")
|