kag-gather 1.3.4 → 1.3.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/commands/command.rb +126 -0
- data/lib/commands/commands.rb +64 -0
- data/lib/commands/help.rb +101 -0
- data/lib/gather.rb +2 -3
- data/lib/kag/bans/plugin.rb +93 -0
- data/lib/kag/bans/report.rb +172 -0
- data/lib/kag/bot/bot.rb +42 -0
- data/lib/kag/bot/plugin.rb +56 -0
- data/lib/kag/common.rb +34 -0
- data/lib/kag/gather/match.rb +159 -0
- data/lib/kag/gather/plugin.rb +354 -0
- data/lib/kag/gather/team.rb +84 -0
- data/lib/kag/irc/plugin.rb +101 -0
- data/lib/kag/version.rb +1 -1
- data/readme.md +1 -1
- metadata +14 -7
- data/lib/kag/bot.rb +0 -34
- data/lib/kag/gather.rb +0 -507
- data/lib/kag/match.rb +0 -158
- data/lib/kag/report.rb +0 -146
- data/lib/kag/team.rb +0 -82
data/lib/kag/match.rb
DELETED
@@ -1,158 +0,0 @@
|
|
1
|
-
require 'cinch'
|
2
|
-
require 'symboltable'
|
3
|
-
require 'kag/config'
|
4
|
-
require 'kag/team'
|
5
|
-
|
6
|
-
module KAG
|
7
|
-
class Match < SymbolTable
|
8
|
-
|
9
|
-
def self.type_as_string
|
10
|
-
ms = KAG::Config.instance[:match_size].to_i
|
11
|
-
ts = (ms / 2).ceil
|
12
|
-
"#{ts.to_s}v#{ts.to_s} #{KAG::Config.instance[:match_type]}"
|
13
|
-
end
|
14
|
-
|
15
|
-
def setup_teams
|
16
|
-
self[:players].shuffle!
|
17
|
-
match_size = KAG::Config.instance[:match_size].to_i
|
18
|
-
match_size = 2 if match_size < 2
|
19
|
-
|
20
|
-
lb = (match_size / 2).ceil.to_i
|
21
|
-
lb = 1 if lb < 1
|
22
|
-
|
23
|
-
debug "MATCH SIZE #{match_size.to_s}"
|
24
|
-
debug "LOWER BOUND: #{lb.to_s}"
|
25
|
-
debug "PLAYERS: #{self[:players].join(",")}"
|
26
|
-
|
27
|
-
self[:teams] = []
|
28
|
-
self[:teams] << KAG::Team.new({
|
29
|
-
:players => self[:players].slice(0,lb),
|
30
|
-
:match => self,
|
31
|
-
:color => "\x0312",
|
32
|
-
:name => "Blue"
|
33
|
-
}).setup
|
34
|
-
self[:teams] << KAG::Team.new({
|
35
|
-
:players => self[:players].slice(lb,match_size),
|
36
|
-
:match => self,
|
37
|
-
:color => "\x0304",
|
38
|
-
:name => "Red"
|
39
|
-
}).setup
|
40
|
-
self[:teams]
|
41
|
-
end
|
42
|
-
|
43
|
-
def start
|
44
|
-
self[:end_votes] = 0 unless self[:end_votes]
|
45
|
-
self[:subs_needed] = []
|
46
|
-
setup_teams
|
47
|
-
restart_map
|
48
|
-
end
|
49
|
-
|
50
|
-
def text_for_match_start
|
51
|
-
msg = "MATCH: #{KAG::Match.type_as_string} - "
|
52
|
-
self[:teams].each do |team|
|
53
|
-
msg = msg+" "+team.text_for_match_start
|
54
|
-
end
|
55
|
-
msg+" \x0301(!end when done)"
|
56
|
-
end
|
57
|
-
|
58
|
-
def notify_teams_of_match_start
|
59
|
-
messages = {}
|
60
|
-
self[:teams].each do |t|
|
61
|
-
ms = t.notify_of_match_start
|
62
|
-
ms.each do |nick,msg|
|
63
|
-
messages[nick] = msg
|
64
|
-
end
|
65
|
-
end
|
66
|
-
messages
|
67
|
-
end
|
68
|
-
|
69
|
-
def add_end_vote
|
70
|
-
self[:end_votes] = 0 unless self[:end_votes] > 0
|
71
|
-
self[:end_votes] = self[:end_votes] + 1
|
72
|
-
end
|
73
|
-
|
74
|
-
def voted_to_end?
|
75
|
-
evt = KAG::Config.instance[:end_vote_threshold].to_i
|
76
|
-
evt = 3 if evt < 1
|
77
|
-
self[:end_votes] >= evt
|
78
|
-
end
|
79
|
-
|
80
|
-
def get_needed_end_votes_left
|
81
|
-
evt = KAG::Config.instance[:end_vote_threshold].to_i
|
82
|
-
evt - self[:end_votes]
|
83
|
-
end
|
84
|
-
|
85
|
-
def has_player?(nick)
|
86
|
-
playing = false
|
87
|
-
self[:teams].each do |team|
|
88
|
-
playing = true if team.has_player?(nick)
|
89
|
-
end
|
90
|
-
playing
|
91
|
-
end
|
92
|
-
|
93
|
-
def cease
|
94
|
-
if self.server
|
95
|
-
if self.server.has_rcon?
|
96
|
-
self[:teams].each do |team|
|
97
|
-
team.kick_all
|
98
|
-
end
|
99
|
-
else
|
100
|
-
debug "NO RCON, so could not kick!"
|
101
|
-
end
|
102
|
-
self.server.disconnect
|
103
|
-
self.server.delete(:match)
|
104
|
-
true
|
105
|
-
else
|
106
|
-
debug "No server for match defined!"
|
107
|
-
false
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def restart_map
|
112
|
-
if self.server.has_rcon?
|
113
|
-
self.server.restart_map
|
114
|
-
else
|
115
|
-
debug "Cannot restart map, no RCON defined"
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def remove_player(nick)
|
120
|
-
sub = false
|
121
|
-
self[:teams].each do |team|
|
122
|
-
if team.has_player?(nick)
|
123
|
-
sub = team.remove_player(nick)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
if sub
|
127
|
-
self[:subs_needed] << sub
|
128
|
-
end
|
129
|
-
sub
|
130
|
-
end
|
131
|
-
|
132
|
-
def needs_sub?
|
133
|
-
self[:subs_needed].length > 0
|
134
|
-
end
|
135
|
-
|
136
|
-
def sub_in(nick)
|
137
|
-
placement = false
|
138
|
-
if needs_sub?
|
139
|
-
placement = self[:subs_needed].shift
|
140
|
-
end
|
141
|
-
placement
|
142
|
-
end
|
143
|
-
|
144
|
-
def rename_player(last_nick,new_nick)
|
145
|
-
self[:teams].each do |team|
|
146
|
-
if team.has_player?(last_nick)
|
147
|
-
team.rename_player(last_nick,new_nick)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def debug(msg)
|
153
|
-
if KAG::Config.instance[:debug]
|
154
|
-
puts msg
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
data/lib/kag/report.rb
DELETED
@@ -1,146 +0,0 @@
|
|
1
|
-
require 'symboltable'
|
2
|
-
require 'kag/data'
|
3
|
-
require 'kag/config'
|
4
|
-
|
5
|
-
module KAG
|
6
|
-
class Report < SymbolTable
|
7
|
-
|
8
|
-
def initialize(gather,m,user)
|
9
|
-
hash = {
|
10
|
-
:nick => user.nick,
|
11
|
-
:authname => user.authname,
|
12
|
-
:host => user.host,
|
13
|
-
:realname => user.realname,
|
14
|
-
:gather => gather,
|
15
|
-
:message => m,
|
16
|
-
:count => 1
|
17
|
-
}
|
18
|
-
super(hash)
|
19
|
-
_ensure_data
|
20
|
-
if reported?
|
21
|
-
if can_report?
|
22
|
-
if past_threshold?
|
23
|
-
ignore
|
24
|
-
else
|
25
|
-
up_report_count
|
26
|
-
end
|
27
|
-
else
|
28
|
-
self.gather.reply self.message,"You have already reported #{self[:nick]}. You can only report a user once."
|
29
|
-
end
|
30
|
-
else
|
31
|
-
report
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def can_report?
|
36
|
-
r = _report
|
37
|
-
if r and r[:reporters]
|
38
|
-
!r[:reporters].include?(self.message.user.authname)
|
39
|
-
else
|
40
|
-
true
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def _ensure_data
|
45
|
-
data[:reported] = {} unless data[:reported]
|
46
|
-
data[:ignored] = {} unless data[:ignored]
|
47
|
-
end
|
48
|
-
|
49
|
-
def reported?
|
50
|
-
data[:reported].key?(self[:host].to_sym)
|
51
|
-
end
|
52
|
-
|
53
|
-
def report
|
54
|
-
puts self.message.inspect
|
55
|
-
c = self.dup
|
56
|
-
c.delete(:gather)
|
57
|
-
c.delete(:message)
|
58
|
-
c[:reporters] = [self.message.user.authname]
|
59
|
-
data[:reported][self[:host].to_sym] = c
|
60
|
-
data.save
|
61
|
-
|
62
|
-
self.gather.reply self.message,"User #{self[:nick]} reported." if self.gather.class == KAG::Gather
|
63
|
-
end
|
64
|
-
|
65
|
-
def ignore
|
66
|
-
c = self.clone
|
67
|
-
c.delete(:gather)
|
68
|
-
c.delete(:message)
|
69
|
-
data[:ignored][self[:host].to_sym] = c
|
70
|
-
data.save
|
71
|
-
self.gather.reply self.message,"User #{self[:nick]} ignored." if self.gather.class == KAG::Gather
|
72
|
-
end
|
73
|
-
|
74
|
-
def past_threshold?
|
75
|
-
_report[:count].to_i > KAG::Config.instance[:report_threshold].to_i
|
76
|
-
end
|
77
|
-
|
78
|
-
def up_report_count
|
79
|
-
_report[:count] = _report[:count].to_i + 1
|
80
|
-
_report[:reporters] = [] unless _report[:reporters]
|
81
|
-
_report[:reporters] << self.message.user.authname
|
82
|
-
data.save
|
83
|
-
|
84
|
-
self.gather.reply message,"User #{self[:nick]} reported. #{self[:nick]} has now been reported #{data[:reported][self[:host].to_sym][:count]} times." if self.gather.class == KAG::Gather
|
85
|
-
end
|
86
|
-
|
87
|
-
def self.ignore(gather,message,user)
|
88
|
-
KAG::Config.data[:ignored] = {} unless KAG::Config.data[:ignored]
|
89
|
-
if KAG::Config.data[:ignored] and !KAG::Config.data[:ignored].key?(user.host.to_sym)
|
90
|
-
c = SymbolTable.new({
|
91
|
-
:nick => user.nick,
|
92
|
-
:authname => user.authname,
|
93
|
-
:host => user.host,
|
94
|
-
:realname => user.realname,
|
95
|
-
:gather => gather,
|
96
|
-
:message => message,
|
97
|
-
:reporters => [message.user.authname]
|
98
|
-
})
|
99
|
-
KAG::Config.data[:ignored][user.host.to_sym] = c
|
100
|
-
KAG::Config.data.save
|
101
|
-
|
102
|
-
gather.reply message,"User #{user.nick} added to ignore list." if gather.class == KAG::Gather
|
103
|
-
true
|
104
|
-
else
|
105
|
-
gather.reply message,"User #{user.nick} already in ignore list!" if gather.class == KAG::Gather
|
106
|
-
false
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
def self.remove(gather,message,user)
|
111
|
-
if KAG::Config.data[:reported] and KAG::Config.data[:reported].key?(user.host.to_sym)
|
112
|
-
KAG::Config.data[:reported].delete(user.host.to_sym)
|
113
|
-
KAG::Config.data.save
|
114
|
-
|
115
|
-
gather.reply message,"User #{user.nick} removed from report list." if gather.class == KAG::Gather
|
116
|
-
true
|
117
|
-
else
|
118
|
-
gather.reply message,"User #{user.nick} not in report list!" if gather.class == KAG::Gather
|
119
|
-
false
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
def self.unignore(gather,message,user)
|
124
|
-
if KAG::Config.data[:ignored] and KAG::Config.data[:ignored].key?(user.host.to_sym)
|
125
|
-
KAG::Config.data[:ignored].delete(user.host.to_sym)
|
126
|
-
KAG::Config.data.save
|
127
|
-
|
128
|
-
gather.reply message,"User #{user.nick} removed from ignore list." if gather.class == KAG::Gather
|
129
|
-
true
|
130
|
-
else
|
131
|
-
gather.reply message,"User #{user.nick} not in ignore list!" if gather.class == KAG::Gather
|
132
|
-
false
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
protected
|
137
|
-
|
138
|
-
def data
|
139
|
-
KAG::Config.data
|
140
|
-
end
|
141
|
-
|
142
|
-
def _report
|
143
|
-
data[:reported][self[:host].to_sym]
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|
data/lib/kag/team.rb
DELETED
@@ -1,82 +0,0 @@
|
|
1
|
-
require 'cinch'
|
2
|
-
require 'cinch/user'
|
3
|
-
require 'symboltable'
|
4
|
-
require 'kag/config'
|
5
|
-
|
6
|
-
module KAG
|
7
|
-
class Team < SymbolTable
|
8
|
-
|
9
|
-
def setup
|
10
|
-
setup_classes
|
11
|
-
self
|
12
|
-
end
|
13
|
-
|
14
|
-
def setup_classes
|
15
|
-
classes = KAG::Config.instance[:classes].clone
|
16
|
-
classes.shuffle!
|
17
|
-
players = self[:players].clone
|
18
|
-
self[:players] = {}
|
19
|
-
players.each do |p|
|
20
|
-
self[:players][p.to_sym] = classes.shift
|
21
|
-
end
|
22
|
-
self
|
23
|
-
end
|
24
|
-
|
25
|
-
def notify_of_match_start
|
26
|
-
server = self.match.server
|
27
|
-
msg = "Join \x0305#{server[:key]} - #{server[:ip]}:#{server[:port]} \x0306password #{server[:password]}\x0301 | Visit kag://#{server[:ip]}/#{server[:password]} | "
|
28
|
-
msg = msg + " \x0303Class: " if KAG::Config.instance[:pick_classes]
|
29
|
-
|
30
|
-
messages = {}
|
31
|
-
self[:players].each do |nick,cls|
|
32
|
-
player_msg = msg.clone
|
33
|
-
player_msg = player_msg+cls if KAG::Config.instance[:pick_classes] and cls and !cls.empty?
|
34
|
-
player_msg = player_msg+" #{self[:color]}#{self[:name]} with: #{self[:players].keys.join(", ")}"
|
35
|
-
messages[nick] = player_msg
|
36
|
-
end
|
37
|
-
messages
|
38
|
-
end
|
39
|
-
|
40
|
-
def text_for_match_start
|
41
|
-
"#{self[:color]}#{self[:players].keys.join(", ")} (#{self[:name]})"
|
42
|
-
end
|
43
|
-
|
44
|
-
def has_player?(nick)
|
45
|
-
self[:players].keys.include?(nick.to_sym)
|
46
|
-
end
|
47
|
-
|
48
|
-
def rename_player(last_nick,new_nick)
|
49
|
-
if has_player?(nick)
|
50
|
-
cls = self[:players][last_nick.to_sym]
|
51
|
-
self[:players].delete(last_nick.to_sym)
|
52
|
-
self[:players][new_nick.to_sym] = cls
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def remove_player(nick)
|
57
|
-
if has_player?(nick)
|
58
|
-
sub = {}
|
59
|
-
sub[:cls] = self[:players][nick]
|
60
|
-
sub[:team] = self.clone
|
61
|
-
sub[:msg] = "Sub needed at #{self.match.server[:ip]} for #{sub[:team][:name]}, #{sub[:cls]} Class! Type !sub to claim it!"
|
62
|
-
sub[:channel_msg] = "#{nick} is now subbing in for #{self[:name]} at #{self.match.server[:key]}. Subs still needed: #{self.match[:subs_needed].length}"
|
63
|
-
sub[:private_msg] = "Please #{self.match.server.text_join} | #{sub[:cls]} on the #{self[:name]} Team"
|
64
|
-
self[:players].delete(nick)
|
65
|
-
|
66
|
-
if self.match and self.match.server
|
67
|
-
self.match.server.kick(nick)
|
68
|
-
end
|
69
|
-
|
70
|
-
sub
|
71
|
-
else
|
72
|
-
false
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def kick_all
|
77
|
-
self[:players].each do |nick,cls|
|
78
|
-
self.match.server.kick(nick.to_s)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|