kag-gather 1.3.5 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/kag/bans/report.rb +14 -4
- data/lib/kag/bot/bot.rb +9 -1
- data/lib/kag/data.rb +15 -0
- data/lib/kag/gather/match.rb +19 -8
- data/lib/kag/gather/plugin.rb +45 -32
- data/lib/kag/gather/team.rb +16 -13
- data/lib/kag/user/plugin.rb +32 -0
- data/lib/kag/user/user.rb +71 -0
- data/lib/kag/version.rb +1 -1
- metadata +3 -1
data/lib/kag/bans/report.rb
CHANGED
@@ -143,10 +143,20 @@ module KAG
|
|
143
143
|
|
144
144
|
def self.is_banned?(user)
|
145
145
|
KAG::Config.data[:ignored] = {} unless KAG::Config.data[:ignored]
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
146
|
+
if KAG::Config.data.flooding?(user)
|
147
|
+
return true
|
148
|
+
end
|
149
|
+
|
150
|
+
if user.authname and user.authname != ""
|
151
|
+
begin
|
152
|
+
KAG::Config.data[:ignored].key?(user.authname.to_sym)
|
153
|
+
rescue Exception => e
|
154
|
+
puts e.message
|
155
|
+
puts e.backtrace
|
156
|
+
end
|
157
|
+
else
|
158
|
+
user.send "You must first AUTH on the IRC server before you can use this bot."
|
159
|
+
KAG::Config.data.add_action(user)
|
150
160
|
end
|
151
161
|
end
|
152
162
|
|
data/lib/kag/bot/bot.rb
CHANGED
@@ -6,6 +6,7 @@ require 'kag/gather/plugin'
|
|
6
6
|
require 'kag/bans/plugin'
|
7
7
|
require 'kag/irc/plugin'
|
8
8
|
require 'kag/bot/plugin'
|
9
|
+
require 'kag/user/plugin'
|
9
10
|
require 'commands/help'
|
10
11
|
|
11
12
|
module KAG
|
@@ -23,7 +24,14 @@ module KAG
|
|
23
24
|
c.realname = config[:realname].to_s != "" ? config[:realname] : "KAG Gatherer"
|
24
25
|
c.messages_per_second = 1
|
25
26
|
c.server_queue_size = 1
|
26
|
-
c.plugins.plugins = [
|
27
|
+
c.plugins.plugins = [
|
28
|
+
Cinch::Commands::Help,
|
29
|
+
KAG::Bot::Plugin,
|
30
|
+
KAG::Gather::Plugin,
|
31
|
+
KAG::Bans::Plugin,
|
32
|
+
KAG::IRC::Plugin,
|
33
|
+
KAG::User::Plugin
|
34
|
+
]
|
27
35
|
if config[:sasl]
|
28
36
|
c.sasl.username = config[:sasl][:username]
|
29
37
|
c.sasl.password = config[:sasl][:password]
|
data/lib/kag/data.rb
CHANGED
@@ -37,5 +37,20 @@ module KAG
|
|
37
37
|
f.write(self.to_json)
|
38
38
|
end
|
39
39
|
end
|
40
|
+
|
41
|
+
def add_action(user)
|
42
|
+
self[:action_log] = [] unless self[:action_log]
|
43
|
+
self[:action_log] << user.nick
|
44
|
+
self[:action_log].shift if self[:action_log].length > 10
|
45
|
+
save
|
46
|
+
end
|
47
|
+
|
48
|
+
def flooding?(user)
|
49
|
+
flooding = false
|
50
|
+
if self[:action_log]
|
51
|
+
flooding = true if self[:action_log].count(user.nick) > 8
|
52
|
+
end
|
53
|
+
flooding
|
54
|
+
end
|
40
55
|
end
|
41
56
|
end
|
data/lib/kag/gather/match.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
require 'cinch'
|
2
|
+
require 'cinch/helpers'
|
2
3
|
require 'symboltable'
|
3
4
|
require 'kag/config'
|
4
5
|
require 'kag/gather/team'
|
6
|
+
require 'kag/user/user'
|
5
7
|
|
6
8
|
module KAG
|
7
9
|
module Gather
|
8
10
|
class Match < SymbolTable
|
11
|
+
include Cinch::Helpers
|
12
|
+
|
9
13
|
def self.type_as_string
|
10
14
|
ms = KAG::Config.instance[:match_size].to_i
|
11
15
|
ts = (ms / 2).ceil
|
@@ -24,6 +28,13 @@ module KAG
|
|
24
28
|
debug "LOWER BOUND: #{lb.to_s}"
|
25
29
|
debug "PLAYERS: #{self[:players].join(",")}"
|
26
30
|
|
31
|
+
self[:players].each do |player|
|
32
|
+
u = User(player.to_s)
|
33
|
+
if u
|
34
|
+
KAG::User::User.add_match(u)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
27
38
|
self[:teams] = []
|
28
39
|
self[:teams] << KAG::Gather::Team.new({
|
29
40
|
:players => self[:players].slice(0,lb),
|
@@ -82,10 +93,10 @@ module KAG
|
|
82
93
|
evt - self[:end_votes]
|
83
94
|
end
|
84
95
|
|
85
|
-
def has_player?(
|
96
|
+
def has_player?(user)
|
86
97
|
playing = false
|
87
98
|
self[:teams].each do |team|
|
88
|
-
playing = true if team.has_player?(
|
99
|
+
playing = true if team.has_player?(user)
|
89
100
|
end
|
90
101
|
playing
|
91
102
|
end
|
@@ -116,11 +127,11 @@ module KAG
|
|
116
127
|
end
|
117
128
|
end
|
118
129
|
|
119
|
-
def remove_player(
|
130
|
+
def remove_player(user)
|
120
131
|
sub = false
|
121
132
|
self[:teams].each do |team|
|
122
|
-
if team.has_player?(
|
123
|
-
sub = team.remove_player(
|
133
|
+
if team.has_player?(user)
|
134
|
+
sub = team.remove_player(user)
|
124
135
|
end
|
125
136
|
end
|
126
137
|
if sub
|
@@ -141,10 +152,10 @@ module KAG
|
|
141
152
|
placement
|
142
153
|
end
|
143
154
|
|
144
|
-
def rename_player(
|
155
|
+
def rename_player(user)
|
145
156
|
self[:teams].each do |team|
|
146
|
-
if team.has_player?(
|
147
|
-
team.rename_player(
|
157
|
+
if team.has_player?(user)
|
158
|
+
team.rename_player(user)
|
148
159
|
end
|
149
160
|
end
|
150
161
|
end
|
data/lib/kag/gather/plugin.rb
CHANGED
@@ -37,34 +37,41 @@ module KAG
|
|
37
37
|
listen_to :leaving, :method => :on_leaving
|
38
38
|
def on_leaving(m,nick)
|
39
39
|
unless is_banned?(m.user)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
user = User(nick.to_s)
|
41
|
+
if user
|
42
|
+
match = get_match_in(user)
|
43
|
+
if match
|
44
|
+
sub = match.remove_player(user)
|
45
|
+
if sub
|
46
|
+
m.channel.msg sub[:msg]
|
47
|
+
end
|
48
|
+
elsif @queue.key?(nick)
|
49
|
+
remove_user_from_queue(nick)
|
46
50
|
end
|
47
|
-
|
48
|
-
|
51
|
+
else
|
52
|
+
reply m,"User #{nick} not found"
|
49
53
|
end
|
50
54
|
end
|
51
55
|
end
|
52
56
|
|
53
57
|
listen_to :nick, :method => :on_nick
|
54
58
|
def on_nick(m)
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
59
|
+
|
60
|
+
#unless is_banned?(m.user)
|
61
|
+
# match = get_match_in(m.user)
|
62
|
+
# if match
|
63
|
+
# match.rename_player(m.user)
|
64
|
+
# elsif @queue.key?(m.user.last_nick)
|
65
|
+
# @queue[m.user.nick] = @queue[m.user.last_nick]
|
66
|
+
# @queue.delete(m.user.last_nick)
|
67
|
+
# end
|
68
|
+
#end
|
64
69
|
end
|
65
70
|
|
66
|
-
|
67
|
-
|
71
|
+
command :sub,{},
|
72
|
+
summary: "Sub into a match",
|
73
|
+
description: "If a player leaves a match early, you can use this command to sub in and join the match"
|
74
|
+
def sub(m)
|
68
75
|
unless is_banned?(m.user)
|
69
76
|
@matches.each do |k,match|
|
70
77
|
if match.needs_sub?
|
@@ -90,9 +97,9 @@ module KAG
|
|
90
97
|
summary: "Remove yourself from the active queue for the next match"
|
91
98
|
def rem(m)
|
92
99
|
unless is_banned?(m.user)
|
93
|
-
match = get_match_in(m.user
|
100
|
+
match = get_match_in(m.user)
|
94
101
|
if match
|
95
|
-
match.remove_player(m.user
|
102
|
+
match.remove_player(m.user)
|
96
103
|
send_channels_msg "#{m.user.nick} has left the match at #{match.server[:key]}! You can sub in by typing !sub"
|
97
104
|
elsif @queue.key?(m.user.nick)
|
98
105
|
unless remove_user_from_queue(m.user.nick)
|
@@ -127,7 +134,7 @@ module KAG
|
|
127
134
|
description: "End the current match. This will only work if you are in the match. After !end is called by 3 different players, the match will end."
|
128
135
|
def end(m)
|
129
136
|
unless is_banned?(m.user)
|
130
|
-
match = get_match_in(m.user
|
137
|
+
match = get_match_in(m.user)
|
131
138
|
if match
|
132
139
|
match.add_end_vote
|
133
140
|
if match.voted_to_end?
|
@@ -170,10 +177,10 @@ module KAG
|
|
170
177
|
end
|
171
178
|
end
|
172
179
|
|
173
|
-
def get_match_in(
|
180
|
+
def get_match_in(user)
|
174
181
|
m = false
|
175
182
|
@matches.each do |k,match|
|
176
|
-
if match.has_player?(
|
183
|
+
if match.has_player?(user)
|
177
184
|
m = match
|
178
185
|
end
|
179
186
|
end
|
@@ -199,7 +206,8 @@ module KAG
|
|
199
206
|
|
200
207
|
match = KAG::Gather::Match.new(SymbolTable.new({
|
201
208
|
:server => server,
|
202
|
-
:players => players
|
209
|
+
:players => players,
|
210
|
+
:bot => self.bot
|
203
211
|
}))
|
204
212
|
match.start # prepare match data
|
205
213
|
messages = match.notify_teams_of_match_start # gather texts for private messages
|
@@ -288,7 +296,7 @@ module KAG
|
|
288
296
|
admin: true
|
289
297
|
def restart_map(m)
|
290
298
|
if is_admin(m.user)
|
291
|
-
match = get_match_in(m.user
|
299
|
+
match = get_match_in(m.user)
|
292
300
|
if match and match.server
|
293
301
|
match.server.restart_map
|
294
302
|
end
|
@@ -314,7 +322,7 @@ module KAG
|
|
314
322
|
admin: true
|
315
323
|
def next_map(m)
|
316
324
|
if is_admin(m.user)
|
317
|
-
match = get_match_in(m.user
|
325
|
+
match = get_match_in(m.user)
|
318
326
|
if match and match.server
|
319
327
|
match.server.next_map
|
320
328
|
end
|
@@ -340,12 +348,17 @@ module KAG
|
|
340
348
|
admin: true
|
341
349
|
def kick_from_match(m,nick)
|
342
350
|
if is_admin(m.user)
|
343
|
-
|
344
|
-
if
|
345
|
-
match
|
346
|
-
|
351
|
+
user = User(nick.to_s)
|
352
|
+
if user
|
353
|
+
match = get_match_in(user)
|
354
|
+
if match
|
355
|
+
match.remove_player(user)
|
356
|
+
m.reply "#{user.nick} has been kicked from the match"
|
357
|
+
else
|
358
|
+
m.reply "#{user.nick} is not in a match!"
|
359
|
+
end
|
347
360
|
else
|
348
|
-
|
361
|
+
reply m,"User #{nick} not found"
|
349
362
|
end
|
350
363
|
end
|
351
364
|
end
|
data/lib/kag/gather/team.rb
CHANGED
@@ -2,6 +2,7 @@ require 'cinch'
|
|
2
2
|
require 'cinch/user'
|
3
3
|
require 'symboltable'
|
4
4
|
require 'kag/config'
|
5
|
+
require 'kag/user/user'
|
5
6
|
|
6
7
|
module KAG
|
7
8
|
module Gather
|
@@ -42,30 +43,32 @@ module KAG
|
|
42
43
|
"#{self[:color]}#{self[:players].keys.join(", ")} (#{self[:name]})"
|
43
44
|
end
|
44
45
|
|
45
|
-
def has_player?(
|
46
|
-
self[:players].keys.include?(nick.to_sym)
|
46
|
+
def has_player?(user)
|
47
|
+
self[:players].keys.include?(user.nick.to_sym)
|
47
48
|
end
|
48
49
|
|
49
|
-
def rename_player(
|
50
|
-
if
|
51
|
-
cls = self[:players][last_nick.to_sym]
|
52
|
-
self[:players].delete(last_nick.to_sym)
|
53
|
-
self[:players][
|
50
|
+
def rename_player(user)
|
51
|
+
if self[:players].keys.include?(user.last_nick.to_sym)
|
52
|
+
cls = self[:players][user.last_nick.to_sym]
|
53
|
+
self[:players].delete(user.last_nick.to_sym)
|
54
|
+
self[:players][user.nick.to_sym] = cls
|
54
55
|
end
|
55
56
|
end
|
56
57
|
|
57
|
-
def remove_player(
|
58
|
-
if has_player?(
|
58
|
+
def remove_player(user)
|
59
|
+
if has_player?(user)
|
59
60
|
sub = {}
|
60
|
-
sub[:cls] = self[:players][nick]
|
61
|
+
sub[:cls] = self[:players][user.nick]
|
61
62
|
sub[:team] = self.clone
|
62
63
|
sub[:msg] = "Sub needed at #{self.match.server[:ip]} for #{sub[:team][:name]}, #{sub[:cls]} Class! Type !sub to claim it!"
|
63
|
-
sub[:channel_msg] = "#{nick} is now subbing in for #{self[:name]} at #{self.match.server[:key]}. Subs still needed: #{self.match[:subs_needed].length}"
|
64
|
+
sub[:channel_msg] = "#{user.nick} is now subbing in for #{self[:name]} at #{self.match.server[:key]}. Subs still needed: #{self.match[:subs_needed].length}"
|
64
65
|
sub[:private_msg] = "Please #{self.match.server.text_join} | #{sub[:cls]} on the #{self[:name]} Team"
|
65
|
-
self[:players].delete(nick)
|
66
|
+
self[:players].delete(user.nick)
|
67
|
+
|
68
|
+
KAG::User::User.subtract_match(user)
|
66
69
|
|
67
70
|
if self.match and self.match.server
|
68
|
-
self.match.server.kick(nick)
|
71
|
+
self.match.server.kick(user.nick)
|
69
72
|
end
|
70
73
|
|
71
74
|
sub
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'cinch'
|
2
|
+
require 'kag/common'
|
3
|
+
require 'commands/help'
|
4
|
+
require 'kag/user/user'
|
5
|
+
|
6
|
+
module KAG
|
7
|
+
module User
|
8
|
+
class Plugin
|
9
|
+
include Cinch::Plugin
|
10
|
+
include Cinch::Commands
|
11
|
+
include KAG::Common
|
12
|
+
|
13
|
+
command :stats,{},
|
14
|
+
summary: "Get the stats for a user"
|
15
|
+
def stats(m)
|
16
|
+
reply m,KAG::User::User.stats(m.user)
|
17
|
+
end
|
18
|
+
|
19
|
+
command :stats,{nick: :string},
|
20
|
+
summary: "Get the stats for a user",
|
21
|
+
method: :stats_specific
|
22
|
+
def stats_specific(m,nick)
|
23
|
+
user = User(nick)
|
24
|
+
if user and !user.unknown
|
25
|
+
reply m,KAG::User::User.stats(user)
|
26
|
+
else
|
27
|
+
reply m,"Could not find user #{nick}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'symboltable'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module KAG
|
5
|
+
module User
|
6
|
+
class User < SymbolTable
|
7
|
+
|
8
|
+
def initialize(user)
|
9
|
+
self[:authname] = user.authname
|
10
|
+
super({})
|
11
|
+
self.merge!(_load)
|
12
|
+
end
|
13
|
+
|
14
|
+
def reload
|
15
|
+
puts "Reloading data file..."
|
16
|
+
self.merge!(self._load)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Sets the value of the given +key+ to +val+.
|
20
|
+
def store(key, val)
|
21
|
+
super(key,val)
|
22
|
+
self.save
|
23
|
+
end
|
24
|
+
|
25
|
+
def save
|
26
|
+
File.open("data/#{self.authname}.json","w") do |f|
|
27
|
+
f.write(self.to_json)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.add_match(user)
|
32
|
+
u = KAG::User::User.new(user)
|
33
|
+
u[:matches] = 0 unless u[:matches]
|
34
|
+
u[:matches] = u[:matches].to_i + 1
|
35
|
+
u.save
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.subtract_match(user)
|
39
|
+
u = KAG::User::User.new(user)
|
40
|
+
if u[:matches]
|
41
|
+
u[:matches] = u[:matches].to_i + 1
|
42
|
+
else
|
43
|
+
u[:matches] = 0
|
44
|
+
end
|
45
|
+
u.save
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.stats(user)
|
49
|
+
u = KAG::User::User.new(user)
|
50
|
+
"#{user.nick} has played in #{u.matches} matches."
|
51
|
+
end
|
52
|
+
|
53
|
+
protected
|
54
|
+
|
55
|
+
def _load
|
56
|
+
return {} unless self[:authname]
|
57
|
+
|
58
|
+
unless File.exists?("data/#{self[:authname]}.json")
|
59
|
+
File.open("data/#{self[:authname]}.json","w") {|f| f.write("{}") }
|
60
|
+
end
|
61
|
+
|
62
|
+
f = ::IO.read("data/#{self[:authname]}.json")
|
63
|
+
if f and !f.empty?
|
64
|
+
SymbolTable.new(JSON.parse(f))
|
65
|
+
else
|
66
|
+
SymbolTable.new
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/lib/kag/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kag-gather
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -147,6 +147,8 @@ files:
|
|
147
147
|
- lib/kag/gather/team.rb
|
148
148
|
- lib/kag/irc/plugin.rb
|
149
149
|
- lib/kag/server.rb
|
150
|
+
- lib/kag/user/plugin.rb
|
151
|
+
- lib/kag/user/user.rb
|
150
152
|
- lib/kag/version.rb
|
151
153
|
- lib/patches.rb
|
152
154
|
- config/config.sample.json
|