qwtf_discord_bot 6.0.4 → 6.1.0

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: a2cbd2052764c82fc832ccac617eb4a2c26e2861827c95b430ee0ad341274027
4
+ data.tar.gz: 4d67b365bda23d496afd20ea375a2486f52fe1b59cf29f6844435254cc7cacb6
5
5
  SHA512:
6
- metadata.gz: 050ad69fb1fadd1620bc12874882579744e6e8dffbf249c22a255f7fd785faf02b3f95d1e3bad6fb612909744bf7ae22c5ca407696170cc567decaa869133da1
7
- data.tar.gz: 40e6a6c3657a4c030d93002edc6138406a33980c1d7f37e8fc3465060ba49aecd216dca43b3a8de56bd0c333535dcc7785c564ae617e3584ad0aa60dedbc3181
6
+ metadata.gz: 1dbde41666f182f177cdc0a5d7e4329388769515e238918be21f7f5dd203f974c43034c95f7b02b0fa965d49885e06e435b5aec0a8a14bff9f87f33068b3ae4b
7
+ data.tar.gz: 2080539c53ec3a5225e000aa872860613b90aa50616fcf006c356835b78e2f2ccc9570a8f902d3bdcafe602ca48e83957e12703017ee71c11010b4585150f153
data/VERSION CHANGED
@@ -1 +1 @@
1
- 6.0.4
1
+ 6.1.0
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,20 @@ 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
60
75
  end
61
76
 
62
77
  def empty?
63
- joined_player_count.zero?
78
+ total_player_count.zero?
64
79
  end
65
80
 
66
- def joined_player_count
67
- joined_players.count
81
+ def teamed_player_count
82
+ teamed_players.count
68
83
  end
69
84
 
70
85
  def team_player_count(team_no)
@@ -72,11 +87,11 @@ class Pug
72
87
  end
73
88
 
74
89
  def player_slots
75
- "#{joined_player_count}/#{maxplayers}"
90
+ "#{total_player_count}/#{maxplayers}"
76
91
  end
77
92
 
78
93
  def slots_left
79
- maxplayers - joined_player_count
94
+ maxplayers - total_player_count
80
95
  end
81
96
 
82
97
  def game_map=(map)
@@ -104,7 +119,8 @@ class Pug
104
119
  end
105
120
 
106
121
  def leave(player_id)
107
- leave_teams(player_id)
122
+ leave_queue(player_id)
123
+ unteam(player_id)
108
124
  end
109
125
 
110
126
  def end_pug
@@ -114,13 +130,17 @@ class Pug
114
130
  end
115
131
 
116
132
  def joined?(player_id)
117
- joined_players.include?(player_id)
133
+ redis.zrank(queue_key, player_id)
118
134
  end
119
135
 
120
136
  def maxplayers
121
137
  teamsize * no_of_teams
122
138
  end
123
139
 
140
+ def queued_players
141
+ players - teamed_players
142
+ end
143
+
124
144
  def teams
125
145
  all_teams = teams_keys.inject({}) do |teams, team|
126
146
  teams.merge({ team.split(':').last.to_i => redis.smembers(team).map(&:to_i) })
@@ -129,16 +149,6 @@ class Pug
129
149
  all_teams.sort.to_h
130
150
  end
131
151
 
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
152
  def update_last_result_time
143
153
  redis.set(last_result_time_key, Time.now.to_i)
144
154
  end
@@ -148,25 +158,37 @@ class Pug
148
158
  end
149
159
 
150
160
  def equal_number_of_players_on_each_team?
151
- team_player_counts = actual_teams.map do |_name, players|
161
+ team_player_counts = teams.map do |_name, players|
152
162
  players.size
153
163
  end
154
164
 
155
165
  team_player_counts.uniq.size == 1
156
166
  end
157
167
 
158
- private
159
-
160
- def leave_teams(player_id)
168
+ def unteam(player_id)
161
169
  teams_keys.each do |team|
162
170
  redis.srem(team, player_id)
163
171
  end
164
172
  end
165
173
 
174
+ def players
175
+ redis.zrange(queue_key, 0, -1).map(&:to_i)
176
+ end
177
+
178
+ private
179
+
180
+ def leave_queue(player_id)
181
+ redis.zrem(queue_key, player_id)
182
+ end
183
+
166
184
  def teams_keys
167
185
  redis.keys([pug_key, 'teams:*'].join(':'))
168
186
  end
169
187
 
188
+ def queue_key
189
+ [pug_key, 'queue'].join(':')
190
+ end
191
+
170
192
  def team_key(team_no)
171
193
  [pug_key, 'teams', team_no].join(':')
172
194
  end
@@ -208,6 +230,6 @@ class Pug
208
230
  end
209
231
 
210
232
  def no_of_teams
211
- [actual_teams.count, MIN_NO_OF_TEAMS].max
233
+ [teams.count, MIN_NO_OF_TEAMS].max
212
234
  end
213
235
  end
@@ -46,16 +46,9 @@ class QwtfDiscordBotPug # :nodoc:
46
46
 
47
47
  bot.command :choose do |event, *args|
48
48
  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?
49
+ if !pug.full?
57
50
  return send_embedded_message(
58
- description: "Can't choose teams with odd number of players",
51
+ description: "Not enough players, reduce !teamsize",
59
52
  channel: event.channel
60
53
  )
61
54
  end
@@ -302,14 +295,14 @@ class QwtfDiscordBotPug # :nodoc:
302
295
  )
303
296
  end
304
297
 
305
- if pug.team(0).include?(user_id)
298
+ if !pug.teamed_players.include?(user_id)
306
299
  return send_embedded_message(
307
300
  description: "You aren't in a team",
308
301
  channel: e.channel
309
302
  )
310
303
  end
311
304
 
312
- pug.join_team(team_no: 0, player_id: user_id)
305
+ pug.unteam(user_id)
313
306
 
314
307
  send_embedded_message(
315
308
  description: "#{e.display_name} leaves team",
@@ -327,7 +320,7 @@ class QwtfDiscordBotPug # :nodoc:
327
320
 
328
321
  user_id = mention_to_user_id(mention)
329
322
  display_name = e.display_name_for(user_id) || arg
330
- pug.join_team(team_no: 0, player_id: user_id)
323
+ pug.unteam(user_id)
331
324
 
332
325
  send_embedded_message(
333
326
  description: "#{display_name} leaves team",
@@ -384,14 +377,14 @@ class QwtfDiscordBotPug # :nodoc:
384
377
 
385
378
  winning_team_no = args.first.to_i
386
379
 
387
- if pug.actual_teams.count < 2
380
+ if pug.teams.count < 2
388
381
  return send_embedded_message(
389
382
  description: "There must be at least two teams with players to submit a result",
390
383
  channel: e.channel
391
384
  )
392
385
  end
393
386
 
394
- team_results = pug.actual_teams.inject({}) do |teams, (name, player_ids)|
387
+ team_results = pug.teams.inject({}) do |teams, (name, player_ids)|
395
388
  players = player_ids.inject({}) do |memo, id|
396
389
  memo.merge({ id => e.display_name_for(id) })
397
390
  end
@@ -444,7 +437,7 @@ class QwtfDiscordBotPug # :nodoc:
444
437
  )
445
438
  end
446
439
 
447
- if pug.actual_teams.count < 2
440
+ if pug.teams.count < 2
448
441
  return send_embedded_message(
449
442
  description: "There must be at least two teams with players to submit a result",
450
443
  channel: e.channel
@@ -460,7 +453,7 @@ class QwtfDiscordBotPug # :nodoc:
460
453
  )
461
454
  end
462
455
 
463
- team_results = pug.actual_teams.inject({}) do |teams, (name, player_ids)|
456
+ team_results = pug.teams.inject({}) do |teams, (name, player_ids)|
464
457
  players = player_ids.inject({}) do |memo, id|
465
458
  memo.merge({ id => e.display_name_for(id) })
466
459
  end
@@ -644,7 +637,7 @@ class QwtfDiscordBotPug # :nodoc:
644
637
  def join_pug(e, pug)
645
638
  pug.join(e.user_id)
646
639
 
647
- if pug.joined_player_count == 1
640
+ if pug.total_player_count == 1
648
641
  snippets = ["#{e.display_name} creates a PUG", "#{pug.player_slots} joined"]
649
642
  message = pug.notify_roles
650
643
  else
@@ -669,7 +662,7 @@ class QwtfDiscordBotPug # :nodoc:
669
662
  def choose_fair_teams(pug:, event:, iteration: 0)
670
663
  if !pug.full?
671
664
  return send_embedded_message(
672
- description: "Can't choose teams until PUG is full",
665
+ description: "Not enough players, reduce !teamsize",
673
666
  channel: event.channel
674
667
  ) && nil
675
668
  end
@@ -680,7 +673,7 @@ class QwtfDiscordBotPug # :nodoc:
680
673
  )
681
674
 
682
675
  combinations = get_fair_teams(
683
- channel_id: event.channel.id, players: pug.joined_players
676
+ channel_id: event.channel.id, players: pug.up_now_players
684
677
  )
685
678
 
686
679
  teams = combinations[iteration]
@@ -693,6 +686,8 @@ class QwtfDiscordBotPug # :nodoc:
693
686
  ) && nil
694
687
  end
695
688
 
689
+ pug.destroy_teams
690
+
696
691
  teams.each do |team_no, player_ids|
697
692
  player_ids.each do |player_id|
698
693
  pug.join_team(team_no: team_no, player_id: player_id)
@@ -717,6 +712,18 @@ class QwtfDiscordBotPug # :nodoc:
717
712
  text: footer
718
713
  )
719
714
 
715
+ if pug.queued_players.any?
716
+ queue_display_names = pug.queued_players.map do |player_id|
717
+ event.display_name_for(player_id)
718
+ end
719
+
720
+ embed.add_field(
721
+ inline: true,
722
+ name: "Queue",
723
+ value: queue_display_names.join("\n")
724
+ )
725
+ end
726
+
720
727
  pug.teams.each do |team_no, player_ids|
721
728
  team_display_names = player_ids.map do |player_id|
722
729
  event.display_name_for(player_id)
@@ -732,14 +739,14 @@ class QwtfDiscordBotPug # :nodoc:
732
739
  end
733
740
 
734
741
  def start_pug(pug, event)
735
- choose_fair_teams(pug: pug, event: event) unless pug.actual_teams.any?
742
+ choose_fair_teams(pug: pug, event: event) unless pug.teams.any?
736
743
 
737
744
  footer = [
738
745
  pug.game_map,
739
746
  "#{pug.player_slots} joined",
740
747
  ].compact.join(MSG_SNIPPET_DELIMITER)
741
748
 
742
- mentions = pug.joined_players.map do |player_id|
749
+ mentions = pug.players.map do |player_id|
743
750
  event.mention_for(player_id)
744
751
  end
745
752
 
@@ -753,6 +760,18 @@ class QwtfDiscordBotPug # :nodoc:
753
760
  text: footer
754
761
  )
755
762
 
763
+ if pug.queued_players.any?
764
+ queue_display_names = pug.queued_players.map do |player_id|
765
+ event.display_name_for(player_id)
766
+ end
767
+
768
+ embed.add_field(
769
+ inline: true,
770
+ name: "Queue",
771
+ value: queue_display_names.join("\n")
772
+ )
773
+ end
774
+
756
775
  pug.teams.each do |team_no, player_ids|
757
776
  team_mentions = player_ids.map do |player_id|
758
777
  event.display_name_for(player_id)
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.0
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-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: discordrb