mod_spox 0.2.0 → 0.3.0
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 +31 -1
- data/LICENSE +674 -0
- data/README.rdoc +73 -0
- data/bin/mod_spox +28 -28
- data/data/mod_spox/extras/AOLSpeak.rb +2 -3
- data/data/mod_spox/extras/AutoKick.rb +10 -23
- data/data/mod_spox/extras/AutoMode.rb +12 -23
- data/data/mod_spox/extras/Bash.rb +55 -0
- data/data/mod_spox/extras/Bouncer.rb +85 -57
- data/data/mod_spox/extras/Bullshit.rb +1 -1
- data/data/mod_spox/extras/Bytes.rb +1 -2
- data/data/mod_spox/extras/Confess.rb +27 -29
- data/data/mod_spox/extras/DCC.rb +11 -20
- data/data/mod_spox/extras/DevWatch.rb +21 -23
- data/data/mod_spox/extras/DownForEveryoneOrJustMe.rb +47 -0
- data/data/mod_spox/extras/EightBall.rb +1 -1
- data/data/mod_spox/extras/FML.rb +35 -0
- data/data/mod_spox/extras/Headers.rb +31 -50
- data/data/mod_spox/extras/Karma.rb +81 -29
- data/data/mod_spox/extras/Logger.rb +2 -2
- data/data/mod_spox/extras/LolSpeak.rb +1 -2
- data/data/mod_spox/extras/PhpCli.rb +138 -8
- data/data/mod_spox/extras/PhpFuncLookup.rb +20 -23
- data/data/mod_spox/extras/Pinger.rb +1 -1
- data/data/mod_spox/extras/Quotes.rb +8 -10
- data/data/mod_spox/extras/RegexTracker.rb +2 -4
- data/data/mod_spox/extras/Roulette.rb +20 -27
- data/data/mod_spox/extras/RubyCli.rb +93 -0
- data/data/mod_spox/extras/Search.rb +17 -3
- data/data/mod_spox/extras/Seen.rb +150 -0
- data/data/mod_spox/extras/SlashdotHeadlineGenerator.rb +500 -0
- data/data/mod_spox/extras/Talk.rb +2 -4
- data/data/mod_spox/extras/Topten.rb +10 -12
- data/data/mod_spox/extras/TracTicket.rb +3 -5
- data/data/mod_spox/extras/Translate.rb +20 -22
- data/data/mod_spox/extras/Twitter.rb +118 -33
- data/data/mod_spox/extras/UrbanDictionary.rb +8 -17
- data/data/mod_spox/extras/Weather.rb +1 -2
- data/data/mod_spox/plugins/Authenticator.rb +93 -98
- data/data/mod_spox/plugins/Banner.rb +26 -56
- data/data/mod_spox/plugins/Helper.rb +5 -6
- data/data/mod_spox/plugins/Initializer.rb +4 -14
- data/data/mod_spox/plugins/Joiner.rb +1 -1
- data/data/mod_spox/plugins/Nicker.rb +13 -0
- data/data/mod_spox/plugins/Parter.rb +2 -2
- data/data/mod_spox/plugins/Permissions.rb +60 -0
- data/data/mod_spox/plugins/PluginLoader.rb +7 -12
- data/data/mod_spox/plugins/Ponger.rb +51 -0
- data/data/mod_spox/plugins/Quitter.rb +1 -2
- data/data/mod_spox/plugins/Servers.rb +57 -0
- data/data/mod_spox/plugins/Status.rb +3 -2
- data/data/mod_spox/plugins/Triggers.rb +9 -9
- data/lib/mod_spox/Bot.rb +109 -33
- data/lib/mod_spox/BotConfig.rb +2 -2
- data/lib/mod_spox/ConfigurationWizard.rb +12 -12
- data/lib/mod_spox/Database.rb +1 -4
- data/lib/mod_spox/Exceptions.rb +26 -0
- data/lib/mod_spox/Helpers.rb +29 -68
- data/lib/mod_spox/Loader.rb +23 -24
- data/lib/mod_spox/Logger.rb +19 -17
- data/lib/mod_spox/MessageFactory.rb +50 -24
- data/lib/mod_spox/Pipeline.rb +21 -7
- data/lib/mod_spox/Plugin.rb +27 -3
- data/lib/mod_spox/PluginManager.rb +28 -15
- data/lib/mod_spox/PriorityQueue.rb +69 -0
- data/lib/mod_spox/Socket.rb +93 -51
- data/lib/mod_spox/Sockets.rb +76 -63
- data/lib/mod_spox/Timer.rb +21 -141
- data/lib/mod_spox/Version.rb +14 -0
- data/lib/mod_spox/handlers/BadNick.rb +1 -1
- data/lib/mod_spox/handlers/Bounce.rb +5 -5
- data/lib/mod_spox/handlers/Created.rb +13 -5
- data/lib/mod_spox/handlers/Handler.rb +12 -3
- data/lib/mod_spox/handlers/Invite.rb +14 -8
- data/lib/mod_spox/handlers/Join.rb +24 -20
- data/lib/mod_spox/handlers/Kick.rb +22 -13
- data/lib/mod_spox/handlers/Mode.rb +42 -36
- data/lib/mod_spox/handlers/Motd.rb +4 -0
- data/lib/mod_spox/handlers/Names.rb +66 -39
- data/lib/mod_spox/handlers/Nick.rb +20 -14
- data/lib/mod_spox/handlers/Part.rb +25 -8
- data/lib/mod_spox/handlers/Ping.rb +11 -5
- data/lib/mod_spox/handlers/Pong.rb +9 -5
- data/lib/mod_spox/handlers/Privmsg.rb +25 -17
- data/lib/mod_spox/handlers/Quit.rb +13 -8
- data/lib/mod_spox/handlers/Topic.rb +4 -0
- data/lib/mod_spox/handlers/Welcome.rb +16 -24
- data/lib/mod_spox/handlers/Who.rb +64 -48
- data/lib/mod_spox/handlers/Whois.rb +92 -60
- data/lib/mod_spox/messages/incoming/Nick.rb +2 -2
- data/lib/mod_spox/messages/incoming/Privmsg.rb +1 -1
- data/lib/mod_spox/messages/incoming/Whois.rb +1 -0
- data/lib/mod_spox/messages/internal/EstablishConnection.rb +1 -1
- 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/UnqueueSocket.rb +8 -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 +16 -46
- data/lib/mod_spox/models/AuthMask.rb +13 -0
- data/lib/mod_spox/models/Channel.rb +46 -27
- data/lib/mod_spox/models/Config.rb +10 -19
- data/lib/mod_spox/models/Group.rb +20 -8
- data/lib/mod_spox/models/Models.rb +1 -1
- data/lib/mod_spox/models/Nick.rb +105 -113
- data/lib/mod_spox/models/NickMode.rb +23 -9
- data/lib/mod_spox/models/Server.rb +12 -1
- data/lib/mod_spox/models/Setting.rb +12 -16
- data/lib/mod_spox/models/Signature.rb +28 -8
- 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 +34 -0
- data/tests/models/tc_Channel.rb +52 -0
- data/tests/models/tc_Config.rb +19 -0
- data/tests/models/tc_Nick.rb +142 -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 +4 -0
- metadata +284 -212
- data/README +0 -36
- data/lib/mod_spox/Cache.rb +0 -57
- data/lib/mod_spox/Monitors.rb +0 -84
- data/lib/mod_spox/Pool.rb +0 -164
- data/lib/mod_spox/models/AuthGroup.rb +0 -16
- data/lib/mod_spox/models/ChannelMode.rb +0 -14
- data/lib/mod_spox/models/NickChannel.rb +0 -45
- data/lib/mod_spox/models/NickGroup.rb +0 -16
data/lib/mod_spox/models/Nick.rb
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
require 'socket'
|
|
2
|
+
require 'mod_spox/models/Auth'
|
|
3
|
+
require 'mod_spox/models/Channel'
|
|
4
|
+
require 'mod_spox/models/NickMode'
|
|
5
|
+
require 'mod_spox/models/AuthMask'
|
|
6
|
+
|
|
7
|
+
|
|
2
8
|
|
|
3
9
|
module ModSpox
|
|
4
10
|
module Models
|
|
@@ -15,13 +21,29 @@ module ModSpox
|
|
|
15
21
|
# visible:: can the bot see the user (is in a channel the bot is parked)
|
|
16
22
|
# away:: is nick away
|
|
17
23
|
# botnick:: is the nick of the bot
|
|
18
|
-
|
|
24
|
+
|
|
19
25
|
class Nick < Sequel::Model
|
|
20
26
|
|
|
21
|
-
|
|
27
|
+
one_to_many :auths, :one_to_one => true, :class => 'ModSpox::Models::Auth'
|
|
28
|
+
many_to_many :channels, :join_table => :nick_channels, :class => 'ModSpox::Models::Channel'
|
|
29
|
+
one_to_many :modes, :class => 'ModSpox::Models::NickMode'
|
|
30
|
+
many_to_many :auth_masks, :join_table => :auth_masks_nicks, :class => 'ModSpox::Models::AuthMask'
|
|
22
31
|
|
|
32
|
+
# nick_name:: nick of user
|
|
33
|
+
# override to downcase nick
|
|
23
34
|
def nick=(nick_name)
|
|
24
|
-
|
|
35
|
+
nick_name.downcase!
|
|
36
|
+
super(nick_name)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def Nick.find_or_create(args)
|
|
40
|
+
args[:nick].downcase! if args[:nick]
|
|
41
|
+
super(args)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def Nick.filter(args)
|
|
45
|
+
args[:nick].downcase! if args[:nick]
|
|
46
|
+
super(args)
|
|
25
47
|
end
|
|
26
48
|
|
|
27
49
|
def Nick.locate(string, create = true)
|
|
@@ -33,169 +55,139 @@ module ModSpox
|
|
|
33
55
|
end
|
|
34
56
|
return nick
|
|
35
57
|
end
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
58
|
+
|
|
59
|
+
# addr: users address
|
|
60
|
+
# make sure everything is set properly
|
|
61
|
+
# when the address is set
|
|
62
|
+
def address=(addr)
|
|
63
|
+
return if (!values[:address].nil? && !values[:host].nil?) && (values[:address] == addr || values[:host] == addr)
|
|
39
64
|
oldaddress = values[:address]
|
|
40
65
|
begin
|
|
41
66
|
info = Object::Socket.getaddrinfo(address, nil)
|
|
42
|
-
|
|
43
|
-
|
|
67
|
+
addr = info[0][3]
|
|
68
|
+
update :host => info[0][2]
|
|
69
|
+
super(addr)
|
|
44
70
|
rescue Object => boom
|
|
45
|
-
|
|
46
|
-
|
|
71
|
+
super(addr)
|
|
72
|
+
update :host => address
|
|
47
73
|
ensure
|
|
48
74
|
if values[:address] != oldaddress
|
|
49
|
-
|
|
75
|
+
auth.update(:authed => false)
|
|
50
76
|
end
|
|
51
77
|
end
|
|
52
78
|
end
|
|
53
79
|
|
|
80
|
+
# val:: bool
|
|
81
|
+
# sets if nick is currently visible. if
|
|
82
|
+
# not all relating information is cleared
|
|
54
83
|
def visible=(val)
|
|
55
84
|
unless(val)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
85
|
+
update :username => nil
|
|
86
|
+
update :real_name => nil
|
|
87
|
+
update :address => nil
|
|
88
|
+
update :source => nil
|
|
89
|
+
update :connected_at => nil
|
|
90
|
+
update :connected_to => nil
|
|
91
|
+
update :seconds_idle => nil
|
|
92
|
+
update :away => false
|
|
93
|
+
remove_all_channels
|
|
94
|
+
auth.update(:authed => false)
|
|
64
95
|
end
|
|
65
|
-
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def source=(mask)
|
|
69
|
-
super
|
|
96
|
+
super(val)
|
|
70
97
|
end
|
|
71
98
|
|
|
72
99
|
# Auth model associated with nick
|
|
73
100
|
def auth
|
|
74
|
-
|
|
101
|
+
if(auths.empty?)
|
|
102
|
+
a = Auth.find_or_create(:nick_id => pk)
|
|
103
|
+
add_auth(a)
|
|
104
|
+
end
|
|
105
|
+
auths[0].refresh
|
|
106
|
+
return auths[0]
|
|
75
107
|
end
|
|
76
108
|
|
|
77
109
|
# AuthGroups nick is authed to
|
|
78
110
|
def auth_groups
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
nickgroups = NickGroup.filter(:nick_id => pk)
|
|
83
|
-
end
|
|
84
|
-
groups = []
|
|
85
|
-
NickGroup.filter(:nick_id => pk).each do | nickgroup |
|
|
86
|
-
groups << nickgroup.group
|
|
111
|
+
g = (auth.groups.empty? || !auth.authed) ? [] : auth.groups
|
|
112
|
+
unless(auth_masks.empty?)
|
|
113
|
+
auth_masks.each{|am| g += am.groups}
|
|
87
114
|
end
|
|
88
|
-
return
|
|
115
|
+
return g
|
|
89
116
|
end
|
|
90
117
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
auth.groups.each do |group|
|
|
97
|
-
NickGroup.find_or_create(:nick_id => pk, :group_id => group.pk)
|
|
98
|
-
end
|
|
118
|
+
# Checks nick's source against available
|
|
119
|
+
# authentication masks
|
|
120
|
+
def check_masks
|
|
121
|
+
AuthMask.all.each do |am|
|
|
122
|
+
add_auth_mask(am) if source =~ /#{am.mask}/ && !auth_masks.include?(am)
|
|
99
123
|
end
|
|
100
|
-
Auth.where('mask is not null').each do |a|
|
|
101
|
-
[source, "#{nick}!#{username}@#{host}", "#{nick}!#{username}@#{address}"].each do |chk_src|
|
|
102
|
-
Logger.info("Matching AUTH - #{chk_src} against #{a.mask}")
|
|
103
|
-
if(chk_src =~ /#{a.mask}/)
|
|
104
|
-
auth_ids << a.pk unless auth_ids.include?(a.pk)
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
auth_ids.each{|id| AuthGroup.filter(:auth_id => id).each{|ag| group_ids << ag.group_id}}
|
|
109
|
-
group_ids.uniq.each{|id| NickGroup.find_or_create(:nick_id => pk, :group_id => id)}
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
# Set nick as member of given group
|
|
113
|
-
def group=(group)
|
|
114
|
-
auth.group = group
|
|
115
124
|
end
|
|
116
125
|
|
|
126
|
+
# group:: Models::Group
|
|
127
|
+
# Return if nick is member of given group
|
|
117
128
|
def in_group?(group)
|
|
118
129
|
group = Group.filter(:name => group).first if group.is_a?(String)
|
|
119
130
|
return group.nil? ? false : auth_groups.include?(group)
|
|
120
131
|
end
|
|
121
132
|
|
|
122
|
-
# Remove nick from given group
|
|
123
|
-
def remove_group(group)
|
|
124
|
-
auth.remove_group(group)
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
# Clear this nick's auth status
|
|
128
|
-
def clear_auth
|
|
129
|
-
auth.authenticated(false)
|
|
130
|
-
NickGroup.filter(:nick_id => pk).destroy
|
|
131
|
-
end
|
|
132
|
-
|
|
133
133
|
# Modes associated with this nick
|
|
134
134
|
def nick_modes
|
|
135
|
-
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
# Add channel nick is found in
|
|
139
|
-
def channel_add(channel)
|
|
140
|
-
NickChannel.find_or_create(:nick_id => pk, :channel_id => channel.pk)
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
# Remove channel nick is no longer found in
|
|
144
|
-
def channel_remove(channel)
|
|
145
|
-
NickChannel.filter(:nick_id => pk, :channel_id => channel.pk).first.destroy
|
|
146
|
-
if(NickChannel.filter(:nick_id => pk).count < 1)
|
|
147
|
-
clear_auth
|
|
148
|
-
visible = false
|
|
149
|
-
end
|
|
135
|
+
modes
|
|
150
136
|
end
|
|
151
137
|
|
|
152
138
|
# Remove all channels
|
|
153
139
|
def clear_channels
|
|
154
|
-
|
|
140
|
+
remove_all_channels
|
|
155
141
|
visible = false
|
|
156
|
-
clear_auth
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
# Channels nick is currently in
|
|
160
|
-
def channels
|
|
161
|
-
chans = []
|
|
162
|
-
NickChannel.filter(:nick_id => pk).each do |nc|
|
|
163
|
-
chans << nc.channel
|
|
164
|
-
end
|
|
165
|
-
return chans
|
|
166
142
|
end
|
|
167
143
|
|
|
168
144
|
# channel:: Models::Channel
|
|
169
145
|
# Return if nick is operator in given channel
|
|
170
146
|
def is_op?(channel)
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
return false
|
|
147
|
+
raise Exceptions::NotInChannel.new(channel) unless channels_dataset.filter(:channel_id => channel.pk).count > 0
|
|
148
|
+
m = NickMode.filter(:nick_id => pk, :channel_id => channel.pk).first
|
|
149
|
+
return m ? m.set?('o') : false
|
|
175
150
|
end
|
|
176
151
|
|
|
177
152
|
# channel:: Models::Channel
|
|
178
153
|
# Return if nick is voiced in given channel
|
|
179
154
|
def is_voice?(channel)
|
|
180
|
-
|
|
181
|
-
|
|
155
|
+
raise Exceptions::NotInChannel.new(channel) unless channels_dataset.filter(:channel_id => channel.pk).count > 0
|
|
156
|
+
m = NickMode.filter(:nick_id => pk, :channel_id => channel.pk).first
|
|
157
|
+
return m ? m.set?('v') : false
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def set_mode(m)
|
|
161
|
+
m.each_char do |c|
|
|
162
|
+
update(:mode => "#{mode}#{c}") if mode.index(c).nil?
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def unset_mode(m)
|
|
167
|
+
m.each_char do |c|
|
|
168
|
+
update(:mode => mode.gsub(c,'')) unless mode.index(c).nil?
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def mode_set?(m)
|
|
173
|
+
return !mode.index(m).nil?
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def add_channel(c)
|
|
177
|
+
unless(channels_dataset.filter(:channel_id => c.pk).count > 0)
|
|
178
|
+
super(c)
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def remove_channel(c)
|
|
183
|
+
if(channels_dataset.filter(:channel_id => c.pk).count > 0)
|
|
184
|
+
super(c)
|
|
182
185
|
end
|
|
183
|
-
return false
|
|
184
186
|
end
|
|
185
187
|
|
|
188
|
+
# TODO: rewrite this to work
|
|
186
189
|
def Nick.transfer_groups(old_nick, new_nick)
|
|
187
|
-
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
# Purge all nick information
|
|
191
|
-
def self.clean
|
|
192
|
-
Nick.set(:username => nil, :real_name => nil, :address => nil,
|
|
193
|
-
:source => nil, :connected_at => nil, :connected_to => nil,
|
|
194
|
-
:seconds_idle => nil, :away => false, :visible => false, :botnick => false)
|
|
195
|
-
NickMode.destroy_all
|
|
196
|
-
NickChannel.destroy_all
|
|
197
|
-
NickGroup.destroy_all
|
|
198
|
-
Auth.set(:authed => false)
|
|
190
|
+
# do nothing
|
|
199
191
|
end
|
|
200
192
|
|
|
201
193
|
end
|
|
@@ -1,17 +1,31 @@
|
|
|
1
|
+
require 'mod_spox/models/Nick'
|
|
2
|
+
require 'mod_spox/models/Channel'
|
|
1
3
|
module ModSpox
|
|
2
4
|
module Models
|
|
3
|
-
# Attributes provided by model:
|
|
4
|
-
# mode:: Mode that is set
|
|
5
|
-
class NickMode < Sequel::Model
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
class NickMode < Sequel::Model
|
|
7
|
+
many_to_one :nick, :class => 'ModSpox::Models::Nick'
|
|
8
|
+
many_to_one :channel, :class => 'ModSpox::Models::Channel'
|
|
9
|
+
|
|
10
|
+
# m:: mode character
|
|
11
|
+
# add a mode for a nick channel combo
|
|
12
|
+
def set_mode(m)
|
|
13
|
+
update(:mode => "#{values[:mode]}#{m}") if values[:mode].nil? || values[:mode].index(m).nil?
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# m:: mode character
|
|
17
|
+
# remove a mode for a nick channel combo
|
|
18
|
+
def unset_mode(m)
|
|
19
|
+
update(:mode => values[:mode].gsub(m, ''))
|
|
10
20
|
end
|
|
11
21
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
22
|
+
def set?(m)
|
|
23
|
+
return mode.nil? ? false : !mode.index(m).nil?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# clear all modes for a nick channel combo
|
|
27
|
+
def clear_modes
|
|
28
|
+
update(:mode => '')
|
|
15
29
|
end
|
|
16
30
|
end
|
|
17
31
|
end
|
|
@@ -7,8 +7,19 @@ module ModSpox
|
|
|
7
7
|
# connected:: bot is connected to this server
|
|
8
8
|
class Server < Sequel::Model
|
|
9
9
|
|
|
10
|
+
def Server.filter(args={})
|
|
11
|
+
args[:host].downcase! if args.has_key?(:host)
|
|
12
|
+
super(args)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def Server.find_or_create(args={})
|
|
16
|
+
args[:host].downcase! if args.has_key?(:host)
|
|
17
|
+
super(args)
|
|
18
|
+
end
|
|
19
|
+
|
|
10
20
|
def host=(host_name)
|
|
11
|
-
|
|
21
|
+
host_name.downcase!
|
|
22
|
+
super(host_name)
|
|
12
23
|
end
|
|
13
24
|
|
|
14
25
|
end
|
|
@@ -6,38 +6,34 @@ module ModSpox
|
|
|
6
6
|
#
|
|
7
7
|
# This model can be used to store complex objects. These objects are dumped
|
|
8
8
|
# and stored for later retrieval
|
|
9
|
+
# TODO: remove [] from any usage
|
|
9
10
|
class Setting < Sequel::Model
|
|
10
11
|
|
|
11
12
|
#serialize(:value, :format => :marshal)
|
|
12
13
|
|
|
13
14
|
def name=(setting_name)
|
|
14
|
-
|
|
15
|
+
setting_name.downcase!
|
|
16
|
+
super(setting_name)
|
|
15
17
|
end
|
|
16
18
|
|
|
17
19
|
def value=(val)
|
|
18
|
-
|
|
20
|
+
val = [Marshal.dump(val.dup)].pack('m')
|
|
21
|
+
super(val)
|
|
19
22
|
end
|
|
20
23
|
|
|
21
24
|
def value
|
|
22
25
|
return values[:value] ? Marshal.load(values[:value].unpack('m')[0]) : nil
|
|
23
26
|
end
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
setting = Setting.filter(:name => key).first
|
|
30
|
-
return setting ? setting.value : nil
|
|
28
|
+
def Setting.set(sym, value)
|
|
29
|
+
s = Setting.find_or_create(:name => "#{sym}")
|
|
30
|
+
s.value = value
|
|
31
|
+
s.save
|
|
31
32
|
end
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
# Note: Will fail if attempting to save hashes. Must set value explicitly
|
|
37
|
-
def self.[]=(key, val)
|
|
38
|
-
key = key.to_s if key.is_a?(Symbol)
|
|
39
|
-
model = Setting.find_or_create(:name => key)
|
|
40
|
-
model.update_with_params(:value => [Marshal.dump(val.dup)].pack('m'))
|
|
34
|
+
def Setting.val(sym)
|
|
35
|
+
s = Setting.filter(:name => "#{sym}").first
|
|
36
|
+
return s ? s.value : nil
|
|
41
37
|
end
|
|
42
38
|
end
|
|
43
39
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'mod_spox/models/Group'
|
|
2
|
+
|
|
1
3
|
module ModSpox
|
|
2
4
|
module Models
|
|
3
5
|
# Attributes provided by model:
|
|
@@ -8,23 +10,41 @@ module ModSpox
|
|
|
8
10
|
# description:: description of trigger
|
|
9
11
|
class Signature < Sequel::Model
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
many_to_one :group, :class => 'ModSpox::Models::Group'
|
|
12
14
|
|
|
13
15
|
def params=(prms)
|
|
14
|
-
raise InvalidType.new('Parameter names must be provided in an array') unless prms.kind_of?(Array)
|
|
15
|
-
|
|
16
|
+
raise Exceptions::InvalidType.new('Parameter names must be provided in an array') unless prms.nil? || prms.kind_of?(Array)
|
|
17
|
+
prms = prms.join('|') unless prms.nil?
|
|
18
|
+
super(prms)
|
|
16
19
|
end
|
|
17
20
|
|
|
18
21
|
def params
|
|
19
22
|
return values[:params].nil? ? [] : values[:params].split('|')
|
|
20
23
|
end
|
|
21
24
|
|
|
22
|
-
def
|
|
23
|
-
|
|
25
|
+
def signature=(v)
|
|
26
|
+
v = [Marshal.dump(v)].pack('m')
|
|
27
|
+
super(v)
|
|
24
28
|
end
|
|
25
|
-
|
|
26
|
-
def
|
|
27
|
-
|
|
29
|
+
|
|
30
|
+
def signature
|
|
31
|
+
values[:signature] ? Marshal.load(values[:signature].unpack('m')[0]) : nil
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def Signature.find_or_create(args)
|
|
35
|
+
t = nil
|
|
36
|
+
if(args.has_key?(:signature) && args.has_key?(:params) && args.has_key?(:method) && args.has_key?(:plugin))
|
|
37
|
+
args[:params] = [] if args[:params].nil?
|
|
38
|
+
Signature.filter(:method => args[:method], :plugin => args[:plugin], :params => args[:params].join('|')).each do |s|
|
|
39
|
+
t = s if s.signature == args[:signature]
|
|
40
|
+
end
|
|
41
|
+
args[:params] = nil if args[:params].empty?
|
|
42
|
+
end
|
|
43
|
+
unless(t)
|
|
44
|
+
t = create(args)
|
|
45
|
+
end
|
|
46
|
+
t.update(:enabled => true)
|
|
47
|
+
return t
|
|
28
48
|
end
|
|
29
49
|
|
|
30
50
|
end
|