kag-gather 1.3.4 → 1.3.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/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
|