kag-gather 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/gather.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'patches'
1
2
  require 'kag/gather'
2
3
 
3
4
  KAG::Bot.new
data/lib/kag/config.rb CHANGED
@@ -1,10 +1,12 @@
1
1
  require 'singleton'
2
2
  require 'symboltable'
3
3
  require 'json'
4
+ require 'kag/data'
4
5
 
5
6
  module KAG
6
7
  class Config < SymbolTable
7
8
  include Singleton
9
+ @@data = KAG::Data.new
8
10
 
9
11
  def initialize
10
12
  super
@@ -23,5 +25,9 @@ module KAG
23
25
  puts "Reloading configuration file..."
24
26
  self.merge!(self._get_config)
25
27
  end
28
+
29
+ def self.data
30
+ @@data
31
+ end
26
32
  end
27
33
  end
data/lib/kag/data.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'singleton'
2
+ require 'symboltable'
3
+ require 'json'
4
+
5
+ module KAG
6
+ class Data < Hash
7
+ def initialize(hash=nil)
8
+ super
9
+ self.merge!(self._load)
10
+ end
11
+
12
+ def _load
13
+ unless File.exists?("config/data.json")
14
+ File.open("config/data.json","w") {|f| f.write("{}") }
15
+ end
16
+ f = ::IO.read("config/data.json")
17
+ if f and !f.empty?
18
+ SymbolTable.new(JSON.parse(f))
19
+ else
20
+ SymbolTable.new
21
+ end
22
+ end
23
+
24
+ def reload
25
+ puts "Reloading data file..."
26
+ self.merge!(self._load)
27
+ end
28
+
29
+ # Sets the value of the given +key+ to +val+.
30
+ def store(key, val)
31
+ super(key,val)
32
+ self.save
33
+ end
34
+
35
+ def save
36
+ File.open("config/data.json","w") do |f|
37
+ f.write(self.to_json)
38
+ end
39
+ end
40
+ end
41
+ end
data/lib/kag/gather.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'cinch'
2
2
  require 'kag/bot'
3
3
  require 'kag/config'
4
+ require 'kag/data'
5
+ require 'kag/report'
4
6
  require 'kag/server'
5
7
  require 'kag/match'
6
8
 
@@ -31,37 +33,43 @@ module KAG
31
33
 
32
34
  listen_to :leaving, :method => :on_leaving
33
35
  def on_leaving(m,nick)
34
- nick = nick.to_s
35
- match = get_match_in(nick)
36
- if match
37
- sub = match.remove_player(nick)
38
- if sub
39
- m.channel.msg sub[:msg]
36
+ unless is_banned?(m.user)
37
+ nick = nick.to_s
38
+ match = get_match_in(nick)
39
+ if match
40
+ sub = match.remove_player(nick)
41
+ if sub
42
+ m.channel.msg sub[:msg]
43
+ end
44
+ elsif @queue.key?(nick)
45
+ remove_user_from_queue(nick)
40
46
  end
41
- elsif @queue.key?(nick)
42
- remove_user_from_queue(nick)
43
47
  end
44
48
  end
45
49
 
46
50
  listen_to :nick, :method => :on_nick
47
51
  def on_nick(m)
48
- match = get_match_in(m.user.last_nick)
49
- if match
50
- match.rename_player(m.user.last_nick,m.user.nick)
51
- elsif @queue.key?(m.user.last_nick)
52
- @queue[m.user.nick] = @queue[m.user.last_nick]
53
- @queue.delete(m.user.last_nick)
52
+ unless is_banned?(m.user)
53
+ match = get_match_in(m.user.last_nick)
54
+ if match
55
+ match.rename_player(m.user.last_nick,m.user.nick)
56
+ elsif @queue.key?(m.user.last_nick)
57
+ @queue[m.user.nick] = @queue[m.user.last_nick]
58
+ @queue.delete(m.user.last_nick)
59
+ end
54
60
  end
55
61
  end
56
62
 
57
63
  match "sub", :method => :evt_sub
58
64
  def evt_sub(m)
59
- @matches.each do |k,match|
60
- if match.needs_sub?
61
- placement = match.sub_in(m.user.nick)
62
- if placement
63
- reply m,placement[:channel_msg]
64
- User(m.user.nick).send placement[:private_msg]
65
+ unless is_banned?(m.user)
66
+ @matches.each do |k,match|
67
+ if match.needs_sub?
68
+ placement = match.sub_in(m.user.nick)
69
+ if placement
70
+ reply m,placement[:channel_msg]
71
+ User(m.user.nick).send placement[:private_msg]
72
+ end
65
73
  end
66
74
  end
67
75
  end
@@ -69,50 +77,81 @@ module KAG
69
77
 
70
78
  match "add", :method => :evt_add
71
79
  def evt_add(m)
72
- add_user_to_queue(m,m.user.nick)
80
+ unless is_banned?(m.user)
81
+ add_user_to_queue(m,m.user.nick)
82
+ end
73
83
  end
74
84
 
75
85
  match "rem", method: :evt_rem
76
86
  def evt_rem(m)
77
- match = get_match_in(m.user.nick)
78
- if match
79
- match.remove_player(m.user.nick)
80
- send_channels_msg "#{m.user.nick} has left the match at #{match.server[:key]}! You can sub in by typing !sub"
81
- elsif @queue.key?(m.user.nick)
82
- unless remove_user_from_queue(m.user.nick)
83
- debug "#{nick} is not in the queue."
87
+ unless is_banned?(m.user)
88
+ match = get_match_in(m.user.nick)
89
+ if match
90
+ match.remove_player(m.user.nick)
91
+ send_channels_msg "#{m.user.nick} has left the match at #{match.server[:key]}! You can sub in by typing !sub"
92
+ elsif @queue.key?(m.user.nick)
93
+ unless remove_user_from_queue(m.user.nick)
94
+ debug "#{nick} is not in the queue."
95
+ end
84
96
  end
85
97
  end
86
98
  end
87
99
 
88
100
  match "list", :method => :evt_list
89
101
  def evt_list(m)
90
- users = []
91
- @queue.each do |n,u|
92
- users << n
102
+ unless is_banned?(m.user)
103
+ users = []
104
+ @queue.each do |n,u|
105
+ users << n
106
+ end
107
+ m.user.send "Queue (#{KAG::Match.type_as_string}) [#{@queue.length}] #{users.join(", ")}"
93
108
  end
94
- m.user.send "Queue (#{KAG::Match.type_as_string}) [#{@queue.length}] #{users.join(", ")}"
95
109
  end
96
110
 
97
111
  match "status", :method => :evt_status
98
112
  def evt_status(m)
99
- reply m,"Matches in progress: #{@matches.length.to_s}"
113
+ unless is_banned?(m.user)
114
+ reply m,"Matches in progress: #{@matches.length.to_s}"
115
+ end
100
116
  end
101
117
 
102
118
  match "end", :method => :evt_end
103
119
  def evt_end(m)
104
- match = get_match_in(m.user.nick)
105
- if match
106
- match.add_end_vote
107
- if match.voted_to_end?
108
- match.cease
109
- @matches.delete(match.server[:key])
110
- send_channels_msg("Match at #{match.server[:key]} finished!")
120
+ unless is_banned?(m.user)
121
+ match = get_match_in(m.user.nick)
122
+ if match
123
+ match.add_end_vote
124
+ if match.voted_to_end?
125
+ match.cease
126
+ @matches.delete(match.server[:key])
127
+ send_channels_msg("Match at #{match.server[:key]} finished!")
128
+ else
129
+ reply m,"End vote started, #{match.get_needed_end_votes_left} more votes to end match at #{match.server[:key]}"
130
+ end
111
131
  else
112
- reply m,"End vote started, #{match.get_needed_end_votes_left} more votes to end match at #{match.server[:key]}"
132
+ reply m,"You're not in a match, silly! Stop trying to hack me."
133
+ end
134
+ end
135
+ end
136
+
137
+ match "help", :method => :evt_help
138
+ def evt_help(m)
139
+ unless is_banned?(m.user)
140
+ msg = "Commands: !add, !rem, !list, !status, !help, !end, !report"
141
+ msg = msg + ", !rem [nick], !add [nick], !add_silent, !rem_silent, !unreport, !clear, !restart, !quit" if is_admin(m.user)
142
+ User(m.user.nick).send(msg)
143
+ end
144
+ end
145
+
146
+ match /report (.+)/,:method => :report
147
+ def report(m,nick)
148
+ unless is_banned?(m.user)
149
+ u = User(nick)
150
+ if u and !u.unknown
151
+ KAG::Report.new(m,u)
152
+ else
153
+ reply m,"User #{nick} not found!"
113
154
  end
114
- else
115
- reply m,"You're not in a match, silly! Stop trying to hack me."
116
155
  end
117
156
  end
118
157
 
@@ -167,19 +206,20 @@ module KAG
167
206
  return false
168
207
  end
169
208
 
209
+ # reset queue first to prevent 11-player load
210
+ @queue = {}
211
+
170
212
  match = KAG::Match.new(SymbolTable.new({
171
213
  :server => server,
172
214
  :players => players
173
215
  }))
174
- match.start
175
- messages = match.notify_teams_of_match_start
216
+ match.start # prepare match data
217
+ messages = match.notify_teams_of_match_start # gather texts for private messages
218
+ send_channels_msg(match.text_for_match_start,false) # send channel-wide first
176
219
  messages.each do |nick,msg|
177
220
  User(nick.to_s).send(msg) unless nick.to_s.include?("player")
178
- sleep(2)
221
+ sleep(2) # prevent excess flood stuff
179
222
  end
180
- send_channels_msg(match.text_for_match_start,false)
181
-
182
- @queue = {}
183
223
  @matches[server[:key]] = match
184
224
  end
185
225
  end
@@ -198,19 +238,13 @@ module KAG
198
238
 
199
239
  def get_unused_server
200
240
  server = false
241
+ @servers.shuffle!
201
242
  @servers.each do |k,s|
202
243
  server = s unless s.in_use?
203
244
  end
204
245
  server
205
246
  end
206
247
 
207
- match "help", :method => :evt_help
208
- def evt_help(m)
209
- msg = "Commands: !add, !rem, !list, !status, !help, !end"
210
- msg = msg + ", !rem [nick], !add [nick], !add_silent, !rem_silent, !clear, !restart, !quit" if is_admin(m.user)
211
- User(m.user.nick).send(msg)
212
- end
213
-
214
248
  # admin methods
215
249
 
216
250
  def debug(msg)
@@ -399,5 +433,74 @@ module KAG
399
433
  m.reply "Configuration reloaded."
400
434
  end
401
435
  end
436
+
437
+ match /unreport (.+)/,:method => :unreport
438
+ def unreport(m,nick)
439
+ if is_admin(m.user)
440
+ user = User(nick)
441
+ if user and !user.unknown
442
+ KAG::Report.remove(user,m,self)
443
+ else
444
+ reply m,"Could not find user #{nick}"
445
+ end
446
+ end
447
+ end
448
+
449
+ match /ignore (.+)/,:method => :ignore
450
+ def ignore(m,nick)
451
+ if is_admin(m.user)
452
+ user = User(nick)
453
+ if user and !user.unknown
454
+ KAG::Report.ignore(user,m,self)
455
+ else
456
+ reply m,"Could not find user #{nick}"
457
+ end
458
+ end
459
+ end
460
+
461
+ match /unignore (.+)/,:method => :unignore
462
+ def unignore(m,nick)
463
+ if is_admin(m.user)
464
+ user = User(nick)
465
+ if user and !user.unknown
466
+ KAG::Report.unignore(user,m,self)
467
+ else
468
+ reply m,"Could not find user #{nick}"
469
+ end
470
+ end
471
+ end
472
+
473
+ match /hostname (.+)/,:method => :hostname
474
+ def hostname(m,nick)
475
+ if is_admin(m.user)
476
+ user = User(nick)
477
+ if user and !user.unknown
478
+ reply m,"Hostname for #{nick} is #{user.host}"
479
+ else
480
+ reply m,"Could not find user #{nick}"
481
+ end
482
+ end
483
+ end
484
+
485
+ match /authname (.+)/,:method => :authname
486
+ def authname(m,nick)
487
+ if is_admin(m.user)
488
+ user = User(nick)
489
+ if user and !user.unknown
490
+ reply m,"Authname for #{nick} is #{user.authname}"
491
+ else
492
+ reply m,"Could not find user #{nick}"
493
+ end
494
+ end
495
+ end
496
+
497
+ def is_banned?(user)
498
+ d = KAG::Config.data
499
+ if d
500
+ d[:ignored].key?(user.host.to_sym)
501
+ else
502
+ false
503
+ end
504
+ end
402
505
  end
403
506
  end
data/lib/kag/report.rb ADDED
@@ -0,0 +1,146 @@
1
+ require 'symboltable'
2
+ require 'kag/data'
3
+ require 'kag/config'
4
+
5
+ module KAG
6
+ class Report < SymbolTable
7
+
8
+ def initialize(m,user)
9
+ hash = {
10
+ :nick => user.nick,
11
+ :authname => user.authname,
12
+ :host => user.host,
13
+ :realname => user.realname,
14
+ :gather => self,
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 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
+ gather.reply message,"User #{self[:nick]} reported. #{self[:nick]} has now been reported #{data[:reported][self[:host].to_sym][:count]} times." if gather.class == KAG::Gather
85
+ end
86
+
87
+ def self.ignore(user,message,gather)
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(user,message,gather)
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(user,message,gather)
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/server.rb CHANGED
@@ -21,7 +21,12 @@ module KAG
21
21
 
22
22
  def socket
23
23
  unless self[:_socket]
24
- self[:_socket] = TCPSocket.new(self[:ip],self[:port])
24
+ begin
25
+ self[:_socket] = TCPSocket.new(self[:ip],self[:port])
26
+ rescue Exception => e
27
+ puts e.message
28
+ puts e.backtrace.join("\n")
29
+ end
25
30
  end
26
31
  puts self[:_]
27
32
  self[:_socket]
@@ -38,12 +43,19 @@ module KAG
38
43
  puts "[RCON] Could not establish TCP socket to connect"
39
44
  return false
40
45
  end
41
- self.socket.puts self[:rcon_password]
42
- z = self.socket.gets
43
- puts "[RCON] "+z.to_s
44
- z.include?("now authenticated")
45
- self[:_connected] = true
46
- true
46
+ success = false
47
+ begin
48
+ self.socket.puts self[:rcon_password]
49
+ z = self.socket.gets
50
+ puts "[RCON] "+z.to_s
51
+ z.include?("now authenticated")
52
+ self[:_connected] = true
53
+ success = true
54
+ rescue Exception => e
55
+ puts e.message
56
+ puts e.backtrace.join("\n")
57
+ end
58
+ success
47
59
  end
48
60
 
49
61
  def disconnect
data/lib/kag/team.rb CHANGED
@@ -58,7 +58,7 @@ module KAG
58
58
  sub = {}
59
59
  sub[:cls] = self[:players][nick]
60
60
  sub[:team] = self.clone
61
- sub[:msg] = "Sub needed at #{self.match.server[:ip]} for #{sub[:team]}, #{sub[:cls]} Class! Type !sub to claim it!"
61
+ sub[:msg] = "Sub needed at #{self.match.server[:ip]} for #{sub[:team][:name]}, #{sub[:cls]} Class! Type !sub to claim it!"
62
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
63
  sub[:private_msg] = "Please #{self.match.server.text_join} | #{sub[:cls]} on the #{self[:name]} Team"
64
64
  self[:players].delete(nick)
data/lib/kag/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module KAG
2
- VERSION = '1.3.1'
2
+ VERSION = '1.3.2'
3
3
  def self.version
4
4
  VERSION
5
5
  end
data/lib/patches.rb ADDED
@@ -0,0 +1,16 @@
1
+ class Hash
2
+ @keys_not_used = nil
3
+ def random_key
4
+ @keys_not_used = self.dup if (!@keys_not_used or @keys_not_used.size == 0)
5
+ key = @keys_not_used.keys[rand(@keys_not_used.size)]
6
+ @keys_not_used.delete(key)
7
+ key
8
+ end
9
+ def shuffle
10
+ self.class[self.to_a.sample(self.length)]
11
+ end
12
+
13
+ def shuffle!
14
+ self.replace(self.shuffle)
15
+ end
16
+ end
metadata CHANGED
@@ -1,128 +1,128 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kag-gather
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 1.3.1
4
+ version: 1.3.2
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Shaun McCormick
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-22 00:00:00.000000000 Z
12
+ date: 2013-03-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cinch
16
- version_requirements: !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
17
18
  requirements:
18
19
  - - '='
19
20
  - !ruby/object:Gem::Version
20
21
  version: 2.0.4
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
21
25
  none: false
22
- requirement: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - '='
25
28
  - !ruby/object:Gem::Version
26
29
  version: 2.0.4
27
- none: false
28
- prerelease: false
29
- type: :runtime
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: json
32
- version_requirements: !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
33
34
  requirements:
34
35
  - - ! '>='
35
36
  - !ruby/object:Gem::Version
36
37
  version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
37
41
  none: false
38
- requirement: !ruby/object:Gem::Requirement
39
42
  requirements:
40
43
  - - ! '>='
41
44
  - !ruby/object:Gem::Version
42
45
  version: '0'
43
- none: false
44
- prerelease: false
45
- type: :runtime
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: symboltable
48
- version_requirements: !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
49
50
  requirements:
50
51
  - - '='
51
52
  - !ruby/object:Gem::Version
52
53
  version: 1.0.2
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
53
57
  none: false
54
- requirement: !ruby/object:Gem::Requirement
55
58
  requirements:
56
59
  - - '='
57
60
  - !ruby/object:Gem::Version
58
61
  version: 1.0.2
59
- none: false
60
- prerelease: false
61
- type: :runtime
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: kagerator
64
- version_requirements: !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
65
66
  requirements:
66
67
  - - '='
67
68
  - !ruby/object:Gem::Version
68
69
  version: 1.0.3
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
69
73
  none: false
70
- requirement: !ruby/object:Gem::Requirement
71
74
  requirements:
72
75
  - - '='
73
76
  - !ruby/object:Gem::Version
74
77
  version: 1.0.3
75
- none: false
76
- prerelease: false
77
- type: :runtime
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: rake
80
- version_requirements: !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
81
82
  requirements:
82
83
  - - ! '>='
83
84
  - !ruby/object:Gem::Version
84
85
  version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
85
89
  none: false
86
- requirement: !ruby/object:Gem::Requirement
87
90
  requirements:
88
91
  - - ! '>='
89
92
  - !ruby/object:Gem::Version
90
93
  version: '0'
91
- none: false
92
- prerelease: false
93
- type: :development
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: rspec
96
- version_requirements: !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
97
98
  requirements:
98
99
  - - ! '>='
99
100
  - !ruby/object:Gem::Version
100
101
  version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
101
105
  none: false
102
- requirement: !ruby/object:Gem::Requirement
103
106
  requirements:
104
107
  - - ! '>='
105
108
  - !ruby/object:Gem::Version
106
109
  version: '0'
107
- none: false
108
- prerelease: false
109
- type: :development
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: guard-rspec
112
- version_requirements: !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
113
114
  requirements:
114
115
  - - ! '>='
115
116
  - !ruby/object:Gem::Version
116
117
  version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
117
121
  none: false
118
- requirement: !ruby/object:Gem::Requirement
119
122
  requirements:
120
123
  - - ! '>='
121
124
  - !ruby/object:Gem::Version
122
125
  version: '0'
123
- none: false
124
- prerelease: false
125
- type: :development
126
126
  description: ''
127
127
  email:
128
128
  - splittingred@gmail.com
@@ -134,37 +134,38 @@ files:
134
134
  - lib/gather.rb
135
135
  - lib/kag/bot.rb
136
136
  - lib/kag/config.rb
137
+ - lib/kag/data.rb
137
138
  - lib/kag/gather.rb
138
139
  - lib/kag/match.rb
140
+ - lib/kag/report.rb
139
141
  - lib/kag/server.rb
140
142
  - lib/kag/team.rb
141
143
  - lib/kag/version.rb
144
+ - lib/patches.rb
142
145
  - config/config.sample.json
143
146
  homepage: https://github.com/splittingred/kag-gather
144
147
  licenses:
145
148
  - GPLv2
146
- post_install_message:
149
+ post_install_message:
147
150
  rdoc_options: []
148
151
  require_paths:
149
152
  - lib
150
153
  required_ruby_version: !ruby/object:Gem::Requirement
154
+ none: false
151
155
  requirements:
152
156
  - - ! '>='
153
157
  - !ruby/object:Gem::Version
154
158
  version: 1.9.2
155
- none: false
156
159
  required_rubygems_version: !ruby/object:Gem::Requirement
160
+ none: false
157
161
  requirements:
158
162
  - - ! '>='
159
163
  - !ruby/object:Gem::Version
160
164
  version: 1.3.6
161
- none: false
162
165
  requirements: []
163
- rubyforge_project:
164
- rubygems_version: 1.8.25
165
- signing_key:
166
+ rubyforge_project:
167
+ rubygems_version: 1.8.24
168
+ signing_key:
166
169
  specification_version: 3
167
170
  summary: KAG Gather IRC Bot
168
171
  test_files: []
169
- has_rdoc:
170
- ...