qwtf_discord_bot 6.0.4 → 6.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 44abd3f52df5308b4ebf30f466541ea533746bd1445b0d0f4da1bcd65899589e
4
- data.tar.gz: e343757d9e22e7b012a31ee64ffc5ecbb9a8553b90fa7e9d662203b9bea564e9
3
+ metadata.gz: 402ebf8fe6c235b94f6e1db48b228f13d0bdece3628873edf943f66f26c9d05c
4
+ data.tar.gz: 69c5fdad3c21f133a315a1f87ac9b92dc068efd13750e33f144bfdf64bf9ea8f
5
5
  SHA512:
6
- metadata.gz: 050ad69fb1fadd1620bc12874882579744e6e8dffbf249c22a255f7fd785faf02b3f95d1e3bad6fb612909744bf7ae22c5ca407696170cc567decaa869133da1
7
- data.tar.gz: 40e6a6c3657a4c030d93002edc6138406a33980c1d7f37e8fc3465060ba49aecd216dca43b3a8de56bd0c333535dcc7785c564ae617e3584ad0aa60dedbc3181
6
+ metadata.gz: fd4aa01e8a86d1e0e82b658c26e9f6bbfce16786e00c61bd6069c4be1a03a3a63ab8a05a497bb287cf861d8d0f37f210cf8f52510be5e812a47eba34f728d1a2
7
+ data.tar.gz: c2c25e668f9de93662ee2ddac5ac43d058c50d49be42647c1c1ec33046b10220cfcb1b3f5678b7d4a52899e99bad8092098f2159478b7435217de86263cea1c8
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- qwtf_discord_bot (6.0.4)
4
+ qwtf_discord_bot (6.1.4)
5
5
  discordrb (= 3.4.0)
6
6
  redis (~> 4.2)
7
7
  thor (~> 1.1)
@@ -93,4 +93,4 @@ DEPENDENCIES
93
93
  thor
94
94
 
95
95
  BUNDLED WITH
96
- 2.2.8
96
+ 2.2.21
data/VERSION CHANGED
@@ -1 +1 @@
1
- 6.0.4
1
+ 6.1.4
data/lib/dashboard.rb CHANGED
@@ -4,7 +4,6 @@ class Dashboard
4
4
  @endpoints = dashboard_config["endpoints"]
5
5
  @messages = {}
6
6
 
7
-
8
7
  channel_name = dashboard_config["name"]
9
8
 
10
9
  old_dashboard_channel = @server.channels.find do |chan|
data/lib/pug.rb CHANGED
@@ -11,17 +11,28 @@ class Pug
11
11
  end
12
12
 
13
13
  def join(player_id)
14
- redis.setnx(pug_key, Time.now.to_i)
15
- redis.sadd(team_key(0), player_id)
14
+ timestamp = Time.now.to_i
15
+ redis.setnx(pug_key, timestamp)
16
+ redis.zadd(queue_key, timestamp, player_id, nx: true)
16
17
  end
17
18
 
18
19
  def join_team(team_no:, player_id:)
19
- redis.setnx(pug_key, Time.now.to_i)
20
- leave_teams(player_id)
20
+ join(player_id)
21
+ unteam(player_id)
21
22
  redis.sadd(team_key(team_no), player_id)
22
23
  end
23
24
 
24
- def joined_players
25
+ def up_now_players
26
+ players[0, maxplayers]
27
+ end
28
+
29
+ def destroy_teams
30
+ teamed_players.each do |player_id|
31
+ unteam(player_id)
32
+ end
33
+ end
34
+
35
+ def teamed_players
25
36
  teams_keys.inject([]) do |players, team|
26
37
  players + redis.smembers(team).map(&:to_i)
27
38
  end
@@ -55,16 +66,24 @@ class Pug
55
66
  redis.set(teamsize_key, teamsize)
56
67
  end
57
68
 
69
+ def total_player_count
70
+ players.count
71
+ end
72
+
58
73
  def full?
59
- joined_player_count >= maxplayers
74
+ total_player_count >= maxplayers
75
+ end
76
+
77
+ def has_exactly_maxplayers?
78
+ total_player_count == maxplayers
60
79
  end
61
80
 
62
81
  def empty?
63
- joined_player_count.zero?
82
+ total_player_count.zero?
64
83
  end
65
84
 
66
- def joined_player_count
67
- joined_players.count
85
+ def teamed_player_count
86
+ teamed_players.count
68
87
  end
69
88
 
70
89
  def team_player_count(team_no)
@@ -72,11 +91,11 @@ class Pug
72
91
  end
73
92
 
74
93
  def player_slots
75
- "#{joined_player_count}/#{maxplayers}"
94
+ "#{total_player_count}/#{maxplayers}"
76
95
  end
77
96
 
78
97
  def slots_left
79
- maxplayers - joined_player_count
98
+ maxplayers - total_player_count
80
99
  end
81
100
 
82
101
  def game_map=(map)
@@ -104,7 +123,8 @@ class Pug
104
123
  end
105
124
 
106
125
  def leave(player_id)
107
- leave_teams(player_id)
126
+ leave_queue(player_id)
127
+ unteam(player_id)
108
128
  end
109
129
 
110
130
  def end_pug
@@ -114,13 +134,17 @@ class Pug
114
134
  end
115
135
 
116
136
  def joined?(player_id)
117
- joined_players.include?(player_id)
137
+ redis.zrank(queue_key, player_id)
118
138
  end
119
139
 
120
140
  def maxplayers
121
141
  teamsize * no_of_teams
122
142
  end
123
143
 
144
+ def queued_players
145
+ players - teamed_players
146
+ end
147
+
124
148
  def teams
125
149
  all_teams = teams_keys.inject({}) do |teams, team|
126
150
  teams.merge({ team.split(':').last.to_i => redis.smembers(team).map(&:to_i) })
@@ -129,16 +153,6 @@ class Pug
129
153
  all_teams.sort.to_h
130
154
  end
131
155
 
132
- def actual_teams
133
- teams.tap { |team| team.delete(0) }
134
- end
135
-
136
- def unteam_all_players
137
- joined_players.each do |player_id|
138
- join_team(team_no: 0, player_id: player_id)
139
- end
140
- end
141
-
142
156
  def update_last_result_time
143
157
  redis.set(last_result_time_key, Time.now.to_i)
144
158
  end
@@ -148,25 +162,37 @@ class Pug
148
162
  end
149
163
 
150
164
  def equal_number_of_players_on_each_team?
151
- team_player_counts = actual_teams.map do |_name, players|
165
+ team_player_counts = teams.map do |_name, players|
152
166
  players.size
153
167
  end
154
168
 
155
169
  team_player_counts.uniq.size == 1
156
170
  end
157
171
 
158
- private
159
-
160
- def leave_teams(player_id)
172
+ def unteam(player_id)
161
173
  teams_keys.each do |team|
162
174
  redis.srem(team, player_id)
163
175
  end
164
176
  end
165
177
 
178
+ def players
179
+ redis.zrange(queue_key, 0, -1).map(&:to_i)
180
+ end
181
+
182
+ private
183
+
184
+ def leave_queue(player_id)
185
+ redis.zrem(queue_key, player_id)
186
+ end
187
+
166
188
  def teams_keys
167
189
  redis.keys([pug_key, 'teams:*'].join(':'))
168
190
  end
169
191
 
192
+ def queue_key
193
+ [pug_key, 'queue'].join(':')
194
+ end
195
+
170
196
  def team_key(team_no)
171
197
  [pug_key, 'teams', team_no].join(':')
172
198
  end
@@ -208,6 +234,6 @@ class Pug
208
234
  end
209
235
 
210
236
  def no_of_teams
211
- [actual_teams.count, MIN_NO_OF_TEAMS].max
237
+ [teams.count, MIN_NO_OF_TEAMS].max
212
238
  end
213
239
  end
data/lib/qstat_request.rb CHANGED
@@ -11,28 +11,26 @@ class QstatRequest
11
11
  @result ||= execute
12
12
  end
13
13
 
14
- def to_embed
15
- return nil if is_empty?
16
-
17
- embed = Discordrb::Webhooks::Embed.new
18
-
19
- teams.each do |team|
20
- embed << team.to_embed_field
21
- end
22
-
23
- embed
24
- end
25
-
26
14
  def to_full_embed
27
15
  Discordrb::Webhooks::Embed.new.tap do |embed|
28
16
  embed.add_field(
29
17
  name: name,
30
- value: embed_summary,
18
+ value: join_link,
31
19
  )
32
20
 
33
21
  teams.each do |team|
34
22
  embed << team.to_embed_field
35
23
  end
24
+
25
+ footer = [game_map, "#{numplayers}/#{maxplayers} players"]
26
+
27
+ if has_spectators?
28
+ footer << "#{numspectators}/#{maxspectators} spectators"
29
+ end
30
+
31
+ embed.footer = Discordrb::Webhooks::EmbedFooter.new(
32
+ text: footer.join(MSG_SNIPPET_DELIMITER)
33
+ )
36
34
  end
37
35
  end
38
36
 
@@ -43,9 +41,7 @@ class QstatRequest
43
41
  end
44
42
 
45
43
  def server_summary
46
- return "#{@endpoint} isn't responding" unless game_map
47
-
48
- info = [name, @endpoint, game_map]
44
+ info = [name, game_map]
49
45
 
50
46
  info += if !has_spectators?
51
47
  ["#{numplayers}/#{maxplayers}"]
@@ -56,28 +52,13 @@ class QstatRequest
56
52
  ]
57
53
  end
58
54
 
55
+ info << join_link
56
+
59
57
  info.join(MSG_SNIPPET_DELIMITER)
60
58
  end
61
59
 
62
60
  def join_link
63
- "[Join](http://phobos.baseq.fr:9999/join?url=#{@endpoint})"
64
- end
65
-
66
- def embed_summary
67
- info = [@endpoint, game_map]
68
-
69
- info += if !has_spectators?
70
- ["#{numplayers}/#{maxplayers}"]
71
- else
72
- [
73
- "#{numplayers}/#{maxplayers} players",
74
- "#{numspectators}/#{maxspectators} spectators"
75
- ]
76
- end
77
-
78
- info << join_link
79
-
80
- info.join(MSG_SNIPPET_DELIMITER)
61
+ "<qw://#{@endpoint}>"
81
62
  end
82
63
 
83
64
  def is_empty?
@@ -92,6 +73,10 @@ class QstatRequest
92
73
  numplayers && numplayers > 0
93
74
  end
94
75
 
76
+ def live_server?
77
+ !game_map.nil?
78
+ end
79
+
95
80
  private
96
81
 
97
82
  def has_spectators?
@@ -9,6 +9,7 @@ class QwtfDiscordBotPug # :nodoc:
9
9
  MSG_SNIPPET_DELIMITER = ' · '
10
10
  TEAM_NAMES = { 1 => "Blue", 2 => "Red" }
11
11
  TEN_MINUTES = 10 * 60
12
+ VALID_MENTION = /<@!?\d+>/
12
13
 
13
14
  def run
14
15
  bot = Discordrb::Commands::CommandBot.new(
@@ -40,22 +41,15 @@ class QwtfDiscordBotPug # :nodoc:
40
41
  end
41
42
 
42
43
  join_pug(e, pug)
43
- start_pug(pug, e) if pug.full?
44
+ start_pug(pug, e) if pug.has_exactly_maxplayers?
44
45
  end
45
46
  end
46
47
 
47
48
  bot.command :choose do |event, *args|
48
49
  setup_pug(event) do |e, pug|
49
- if pug.joined_players.count > pug.maxplayers
50
- return send_embedded_message(
51
- description: "Too many players, increase `!teamsize` or `!kick` extras",
52
- channel: event.channel
53
- )
54
- end
55
-
56
- if pug.joined_players.count.odd?
50
+ if !pug.full?
57
51
  return send_embedded_message(
58
- description: "Can't choose teams with odd number of players",
52
+ description: "Not enough players, reduce !teamsize",
59
53
  channel: event.channel
60
54
  )
61
55
  end
@@ -177,17 +171,17 @@ class QwtfDiscordBotPug # :nodoc:
177
171
  )
178
172
  end
179
173
 
180
- args.each do |arg|
181
- unless arg.match(/<@!\d+>/)
174
+ args.each do |mention|
175
+ unless mention.match(VALID_MENTION)
182
176
  send_embedded_message(
183
- description: "#{arg} isn't a valid mention",
177
+ description: "#{mention} isn't a valid mention",
184
178
  channel: e.channel
185
179
  )
186
180
  next
187
181
  end
188
182
 
189
- user_id = mention_to_user_id(arg)
190
- display_name = e.display_name_for(user_id) || arg
183
+ user_id = mention_to_user_id(mention)
184
+ display_name = e.display_name_for(user_id) || mention
191
185
 
192
186
  unless pug.joined?(user_id)
193
187
  send_embedded_message(
@@ -257,16 +251,16 @@ class QwtfDiscordBotPug # :nodoc:
257
251
  )
258
252
  else
259
253
  args[1..-1].each do |mention|
260
- unless mention.match(/<@!\d+>/)
254
+ unless mention.match(VALID_MENTION)
261
255
  send_embedded_message(
262
- description: "#{arg} isn't a valid mention",
256
+ description: "#{mention} isn't a valid mention",
263
257
  channel: e.channel
264
258
  )
265
259
  next
266
260
  end
267
261
 
268
262
  user_id = mention_to_user_id(mention)
269
- display_name = e.display_name_for(user_id) || arg
263
+ display_name = e.display_name_for(user_id) || mention
270
264
  pug.join_team(team_no: team_no, player_id: user_id)
271
265
 
272
266
  send_embedded_message(
@@ -279,7 +273,7 @@ class QwtfDiscordBotPug # :nodoc:
279
273
  end
280
274
  end
281
275
 
282
- start_pug(pug, e) if !pug_already_full && pug.full?
276
+ start_pug(pug, e) if !pug_already_full && pug.has_exactly_maxplayers?
283
277
  end
284
278
  end
285
279
 
@@ -302,14 +296,14 @@ class QwtfDiscordBotPug # :nodoc:
302
296
  )
303
297
  end
304
298
 
305
- if pug.team(0).include?(user_id)
299
+ if !pug.teamed_players.include?(user_id)
306
300
  return send_embedded_message(
307
301
  description: "You aren't in a team",
308
302
  channel: e.channel
309
303
  )
310
304
  end
311
305
 
312
- pug.join_team(team_no: 0, player_id: user_id)
306
+ pug.unteam(user_id)
313
307
 
314
308
  send_embedded_message(
315
309
  description: "#{e.display_name} leaves team",
@@ -317,17 +311,25 @@ class QwtfDiscordBotPug # :nodoc:
317
311
  )
318
312
  else
319
313
  args.each do |mention|
320
- unless mention.match(/<@!\d+>/)
314
+ unless mention.match(VALID_MENTION)
321
315
  send_embedded_message(
322
- description: "#{arg} isn't a valid mention",
316
+ description: "#{mention} isn't a valid mention",
323
317
  channel: e.channel
324
318
  )
325
319
  next
326
320
  end
327
321
 
328
322
  user_id = mention_to_user_id(mention)
329
- display_name = e.display_name_for(user_id) || arg
330
- pug.join_team(team_no: 0, player_id: user_id)
323
+ display_name = e.display_name_for(user_id) || mention
324
+
325
+ unless pug.joined?(user_id)
326
+ return send_embedded_message(
327
+ description: "#{display_name} isn't in this PUG",
328
+ channel: e.channel
329
+ )
330
+ end
331
+
332
+ pug.unteam(user_id)
331
333
 
332
334
  send_embedded_message(
333
335
  description: "#{display_name} leaves team",
@@ -384,14 +386,14 @@ class QwtfDiscordBotPug # :nodoc:
384
386
 
385
387
  winning_team_no = args.first.to_i
386
388
 
387
- if pug.actual_teams.count < 2
389
+ if pug.teams.count < 2
388
390
  return send_embedded_message(
389
391
  description: "There must be at least two teams with players to submit a result",
390
392
  channel: e.channel
391
393
  )
392
394
  end
393
395
 
394
- team_results = pug.actual_teams.inject({}) do |teams, (name, player_ids)|
396
+ team_results = pug.teams.inject({}) do |teams, (name, player_ids)|
395
397
  players = player_ids.inject({}) do |memo, id|
396
398
  memo.merge({ id => e.display_name_for(id) })
397
399
  end
@@ -444,7 +446,7 @@ class QwtfDiscordBotPug # :nodoc:
444
446
  )
445
447
  end
446
448
 
447
- if pug.actual_teams.count < 2
449
+ if pug.teams.count < 2
448
450
  return send_embedded_message(
449
451
  description: "There must be at least two teams with players to submit a result",
450
452
  channel: e.channel
@@ -460,7 +462,7 @@ class QwtfDiscordBotPug # :nodoc:
460
462
  )
461
463
  end
462
464
 
463
- team_results = pug.actual_teams.inject({}) do |teams, (name, player_ids)|
465
+ team_results = pug.teams.inject({}) do |teams, (name, player_ids)|
464
466
  players = player_ids.inject({}) do |memo, id|
465
467
  memo.merge({ id => e.display_name_for(id) })
466
468
  end
@@ -644,7 +646,7 @@ class QwtfDiscordBotPug # :nodoc:
644
646
  def join_pug(e, pug)
645
647
  pug.join(e.user_id)
646
648
 
647
- if pug.joined_player_count == 1
649
+ if pug.total_player_count == 1
648
650
  snippets = ["#{e.display_name} creates a PUG", "#{pug.player_slots} joined"]
649
651
  message = pug.notify_roles
650
652
  else
@@ -669,7 +671,7 @@ class QwtfDiscordBotPug # :nodoc:
669
671
  def choose_fair_teams(pug:, event:, iteration: 0)
670
672
  if !pug.full?
671
673
  return send_embedded_message(
672
- description: "Can't choose teams until PUG is full",
674
+ description: "Not enough players, reduce !teamsize",
673
675
  channel: event.channel
674
676
  ) && nil
675
677
  end
@@ -680,7 +682,7 @@ class QwtfDiscordBotPug # :nodoc:
680
682
  )
681
683
 
682
684
  combinations = get_fair_teams(
683
- channel_id: event.channel.id, players: pug.joined_players
685
+ channel_id: event.channel.id, players: pug.up_now_players
684
686
  )
685
687
 
686
688
  teams = combinations[iteration]
@@ -693,6 +695,8 @@ class QwtfDiscordBotPug # :nodoc:
693
695
  ) && nil
694
696
  end
695
697
 
698
+ pug.destroy_teams
699
+
696
700
  teams.each do |team_no, player_ids|
697
701
  player_ids.each do |player_id|
698
702
  pug.join_team(team_no: team_no, player_id: player_id)
@@ -717,6 +721,18 @@ class QwtfDiscordBotPug # :nodoc:
717
721
  text: footer
718
722
  )
719
723
 
724
+ if pug.queued_players.any?
725
+ queue_display_names = pug.queued_players.map do |player_id|
726
+ event.display_name_for(player_id)
727
+ end
728
+
729
+ embed.add_field(
730
+ inline: true,
731
+ name: "Queue",
732
+ value: queue_display_names.join("\n")
733
+ )
734
+ end
735
+
720
736
  pug.teams.each do |team_no, player_ids|
721
737
  team_display_names = player_ids.map do |player_id|
722
738
  event.display_name_for(player_id)
@@ -732,14 +748,14 @@ class QwtfDiscordBotPug # :nodoc:
732
748
  end
733
749
 
734
750
  def start_pug(pug, event)
735
- choose_fair_teams(pug: pug, event: event) unless pug.actual_teams.any?
751
+ choose_fair_teams(pug: pug, event: event) unless pug.teams.any?
736
752
 
737
753
  footer = [
738
754
  pug.game_map,
739
755
  "#{pug.player_slots} joined",
740
756
  ].compact.join(MSG_SNIPPET_DELIMITER)
741
757
 
742
- mentions = pug.joined_players.map do |player_id|
758
+ mentions = pug.players.map do |player_id|
743
759
  event.mention_for(player_id)
744
760
  end
745
761
 
@@ -753,6 +769,18 @@ class QwtfDiscordBotPug # :nodoc:
753
769
  text: footer
754
770
  )
755
771
 
772
+ if pug.queued_players.any?
773
+ queue_display_names = pug.queued_players.map do |player_id|
774
+ event.display_name_for(player_id)
775
+ end
776
+
777
+ embed.add_field(
778
+ inline: true,
779
+ name: "Queue",
780
+ value: queue_display_names.join("\n")
781
+ )
782
+ end
783
+
756
784
  pug.teams.each do |team_no, player_ids|
757
785
  team_mentions = player_ids.map do |player_id|
758
786
  event.display_name_for(player_id)
@@ -16,20 +16,17 @@ class QwtfDiscordBotServer
16
16
  message = 'Provide a server address e.g. `!server ' \
17
17
  'sydney.fortressone.org` or use `!active` or `!all`'
18
18
  event.channel.send_message(message)
19
- puts message
19
+
20
+ return puts message
21
+ end
22
+
23
+ endpoint = args.first
24
+ request = QstatRequest.new(endpoint)
25
+
26
+ if !request.live_server?
27
+ event.channel.send_message("#{endpoint} isn't responding")
20
28
  else
21
- endpoint = args.first
22
- qstat_response = QstatRequest.new(endpoint)
23
- message = qstat_response.server_summary
24
- embed = qstat_response.to_embed
25
-
26
- if embed
27
- event.channel.send_embed(message, embed)
28
- puts message
29
- else
30
- event.channel.send_message(message)
31
- puts message
32
- end
29
+ event.channel.send_embed(nil, request.to_full_embed)
33
30
  end
34
31
  end
35
32
 
@@ -43,20 +40,16 @@ class QwtfDiscordBotServer
43
40
  if endpoints_for_this_channel.empty?
44
41
  message = 'There are no servers associated with this channel'
45
42
  event.channel.send_message(message)
46
- puts message
47
- else
48
- endpoints_for_this_channel.each do |endpoint|
49
- qstat_request = QstatRequest.new(endpoint.address)
50
- message = qstat_request.server_summary
51
- embed = qstat_request.to_embed
52
-
53
- if embed
54
- event.channel.send_embed(message, embed)
55
- puts message
56
- else
57
- event.channel.send_message(message)
58
- puts message
59
- end
43
+ return puts message
44
+ end
45
+
46
+ endpoints_for_this_channel.each do |endpoint|
47
+ request = QstatRequest.new(endpoint.address)
48
+
49
+ if !request.live_server?
50
+ event.channel.send_message("#{endpoint} isn't responding")
51
+ else
52
+ event.channel.send_embed(nil, request.to_full_embed)
60
53
  end
61
54
  end
62
55
 
@@ -73,35 +66,27 @@ class QwtfDiscordBotServer
73
66
  if endpoints_for_this_channel.empty?
74
67
  message = 'There are no servers associated with this channel'
75
68
  event.channel.send_message(message)
76
- puts message
77
- else
78
- qstat_requests = endpoints_for_this_channel.map do |endpoint|
79
- QstatRequest.new(endpoint.address)
80
- end
69
+ return puts message
70
+ end
81
71
 
82
- servers_with_players = qstat_requests.reject do |server|
83
- server.is_empty?
84
- end
72
+ qstat_requests = endpoints_for_this_channel.map do |endpoint|
73
+ QstatRequest.new(endpoint.address)
74
+ end
85
75
 
86
- if servers_with_players.empty?
87
- message = "All ##{event.channel.name} servers are empty"
88
- event.channel.send_message(message)
89
- puts message
90
- else
91
- servers_with_players.each do |server|
92
- message = server.server_summary
93
- embed = server.to_embed
94
-
95
- if embed
96
- event.channel.send_embed(message, embed)
97
- puts message
98
- else
99
- event.channel.send_message(message)
100
- puts message
101
- end
102
- end
103
- end
76
+ servers_with_players = qstat_requests.reject do |server|
77
+ server.is_empty?
104
78
  end
79
+
80
+ if servers_with_players.empty?
81
+ message = "All ##{event.channel.name} servers are empty"
82
+ event.channel.send_message(message)
83
+ return puts message
84
+ end
85
+
86
+ servers_with_players.each do |server|
87
+ event.channel.send_embed(nil, server.to_full_embed)
88
+ end
89
+
105
90
  return nil
106
91
  end
107
92
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qwtf_discord_bot
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.4
4
+ version: 6.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sheldon Johnson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-07 00:00:00.000000000 Z
11
+ date: 2021-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: discordrb