qwtf_discord_bot 5.0.4 → 5.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 221bf82bea89d889a6976f8da2e7391387ffd1c5c7c1daada602b81770e2a5ca
4
- data.tar.gz: f2efd10fa6e911ab45036b9c0e070d76285e1f80508f6d7c0d5925018e6fc1a7
3
+ metadata.gz: acbc8b37f3b73372cb4417b810a76a960ee5fd640330587ef97e0b889338be04
4
+ data.tar.gz: 47cc64ca3ca8cdf90e63a2197ac0b93e703427a26a0e5cf00ee6716938f73d9f
5
5
  SHA512:
6
- metadata.gz: 3e2f38fd0f1565fa6caad12727e8eb75555b8efd9f75d2067fed5cabe6d79427d133c32a6f96b564c3ae0b9ebf3bf1bd094bb39e4800df559444518c2bd6637a
7
- data.tar.gz: ab0ef6dbb87be255cb098768455f219fdfc14c94e6d51ceca54c9504959f9923feee52fcf6bc55f23bd4886855f554707c6ed564022d5f653ef022211f4311cb
6
+ metadata.gz: 99276bcc5e6a1e53364176301f09da6089f72bdd266cfbb0e1e72e551e2421bd11116504c907db6649b14f3ba8b6bdcc4534b550ee749761e2d1b99df596dbb7
7
+ data.tar.gz: b1970a9a1465c72d1cdd3ab68f38d967eb8f9ea1d7072ef7da9c660d4b3ee15d5b3943498958e9f564d61e3a59d82455af1a6cd0e713d4a3240eb51b79b6e504
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- qwtf_discord_bot (4.2.6)
4
+ qwtf_discord_bot (5.0.4)
5
5
  discordrb (~> 3.3)
6
6
  redis (~> 4.1)
7
7
  thor (~> 0.20)
@@ -9,14 +9,15 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- activesupport (5.2.3)
12
+ activesupport (6.0.3.2)
13
13
  concurrent-ruby (~> 1.0, >= 1.0.2)
14
14
  i18n (>= 0.7, < 2)
15
15
  minitest (~> 5.1)
16
16
  tzinfo (~> 1.1)
17
- coderay (1.1.2)
18
- concurrent-ruby (1.1.5)
19
- diff-lcs (1.3)
17
+ zeitwerk (~> 2.2, >= 2.2.2)
18
+ coderay (1.1.3)
19
+ concurrent-ruby (1.1.7)
20
+ diff-lcs (1.4.4)
20
21
  discordrb (3.3.0)
21
22
  discordrb-webhooks (~> 3.3.0)
22
23
  ffi (>= 1.9.24)
@@ -26,60 +27,61 @@ GEM
26
27
  websocket-client-simple (>= 0.3.0)
27
28
  discordrb-webhooks (3.3.0)
28
29
  rest-client (>= 2.1.0.rc1)
29
- domain_name (0.5.20180417)
30
+ domain_name (0.5.20190701)
30
31
  unf (>= 0.0.5, < 1.0.0)
31
32
  event_emitter (0.2.6)
32
- factory_bot (5.0.2)
33
- activesupport (>= 4.2.0)
34
- ffi (1.11.1)
33
+ factory_bot (6.1.0)
34
+ activesupport (>= 5.0.0)
35
+ ffi (1.13.1)
35
36
  http-accept (1.7.0)
36
37
  http-cookie (1.0.3)
37
38
  domain_name (~> 0.5)
38
- i18n (1.6.0)
39
+ i18n (1.8.5)
39
40
  concurrent-ruby (~> 1.0)
40
- method_source (0.9.2)
41
- mime-types (3.2.2)
41
+ method_source (1.0.0)
42
+ mime-types (3.3.1)
42
43
  mime-types-data (~> 3.2015)
43
- mime-types-data (3.2019.0331)
44
- minitest (5.11.3)
44
+ mime-types-data (3.2020.0512)
45
+ minitest (5.14.1)
45
46
  netrc (0.11.0)
46
47
  opus-ruby (1.0.1)
47
48
  ffi
48
- pry (0.12.2)
49
- coderay (~> 1.1.0)
50
- method_source (~> 0.9.0)
49
+ pry (0.13.1)
50
+ coderay (~> 1.1)
51
+ method_source (~> 1.0)
51
52
  rbnacl (3.4.0)
52
53
  ffi
53
- redis (4.1.3)
54
- rest-client (2.1.0.rc1)
54
+ redis (4.2.1)
55
+ rest-client (2.1.0)
55
56
  http-accept (>= 1.7.0, < 2.0)
56
57
  http-cookie (>= 1.0.2, < 2.0)
57
58
  mime-types (>= 1.16, < 4.0)
58
59
  netrc (~> 0.8)
59
- rspec (3.8.0)
60
- rspec-core (~> 3.8.0)
61
- rspec-expectations (~> 3.8.0)
62
- rspec-mocks (~> 3.8.0)
63
- rspec-core (3.8.1)
64
- rspec-support (~> 3.8.0)
65
- rspec-expectations (3.8.4)
60
+ rspec (3.9.0)
61
+ rspec-core (~> 3.9.0)
62
+ rspec-expectations (~> 3.9.0)
63
+ rspec-mocks (~> 3.9.0)
64
+ rspec-core (3.9.2)
65
+ rspec-support (~> 3.9.3)
66
+ rspec-expectations (3.9.2)
66
67
  diff-lcs (>= 1.2.0, < 2.0)
67
- rspec-support (~> 3.8.0)
68
- rspec-mocks (3.8.1)
68
+ rspec-support (~> 3.9.0)
69
+ rspec-mocks (3.9.1)
69
70
  diff-lcs (>= 1.2.0, < 2.0)
70
- rspec-support (~> 3.8.0)
71
- rspec-support (3.8.2)
71
+ rspec-support (~> 3.9.0)
72
+ rspec-support (3.9.3)
72
73
  thor (0.20.3)
73
74
  thread_safe (0.3.6)
74
- tzinfo (1.2.5)
75
+ tzinfo (1.2.7)
75
76
  thread_safe (~> 0.1)
76
77
  unf (0.1.4)
77
78
  unf_ext
78
- unf_ext (0.0.7.6)
79
+ unf_ext (0.0.7.7)
79
80
  websocket (1.2.8)
80
81
  websocket-client-simple (0.3.0)
81
82
  event_emitter
82
83
  websocket
84
+ zeitwerk (2.4.0)
83
85
 
84
86
  PLATFORMS
85
87
  ruby
data/README.md CHANGED
@@ -90,8 +90,8 @@ This responds to discord messages:
90
90
  - `!leave`
91
91
  - `!status`
92
92
  - `!maxplayers <no_of_players>`
93
- - `!leave`
94
- - `!role`
93
+ - `!notify <roles>`
94
+ - `!end`
95
95
 
96
96
 
97
97
  #### Watcher
data/VERSION CHANGED
@@ -1 +1 @@
1
- 5.0.4
1
+ 5.1.0
@@ -0,0 +1,54 @@
1
+ class EventDecorator
2
+ def initialize(event)
3
+ @event = event
4
+ end
5
+
6
+ def channel
7
+ @event.channel
8
+ end
9
+
10
+ def channel_id
11
+ @event.channel.id
12
+ end
13
+
14
+ def username
15
+ user.username
16
+ end
17
+
18
+ def user_id
19
+ user.id
20
+ end
21
+
22
+ def users
23
+ server.users
24
+ end
25
+
26
+ def mentions_for(user_ids)
27
+ find_users(user_ids).map(&:mention)
28
+ end
29
+
30
+ def usernames_for(user_ids)
31
+ find_users(user_ids).map(&:username)
32
+ end
33
+
34
+ private
35
+
36
+ def find_users(user_ids)
37
+ user_ids.map do |user_id|
38
+ find_user(user_id)
39
+ end
40
+ end
41
+
42
+ def find_user(user_id)
43
+ users.find { |user| user.id == user_id }
44
+ end
45
+
46
+ def server
47
+ @event.server
48
+ end
49
+
50
+ def user
51
+ @event.user
52
+ end
53
+ end
54
+
@@ -0,0 +1,91 @@
1
+ class Pug
2
+ DEFAULT_MAXPLAYERS = 8
3
+
4
+ def self.for(channel_id)
5
+ new(channel_id)
6
+ end
7
+
8
+ def initialize(channel_id)
9
+ @channel_id = channel_id
10
+ end
11
+
12
+ def join(user_id)
13
+ redis.setnx(pug_key, Time.now)
14
+ redis.sadd(players_key, user_id)
15
+ end
16
+
17
+ def joined_players
18
+ redis.smembers(players_key).map(&:to_i)
19
+ end
20
+
21
+ def full?
22
+ joined_player_count >= maxplayers
23
+ end
24
+
25
+ def joined_player_count
26
+ redis.scard(players_key).to_i
27
+ end
28
+
29
+ def player_slots
30
+ "#{joined_player_count}/#{maxplayers}"
31
+ end
32
+
33
+ def slots_left
34
+ maxplayers - joined_player_count
35
+ end
36
+
37
+ def notify_roles=(roles)
38
+ redis.set(notify_roles_key, roles)
39
+ end
40
+
41
+ def notify_roles
42
+ redis.get(notify_roles_key) || "@here"
43
+ end
44
+
45
+ def maxplayers=(maxplayers)
46
+ redis.set(maxplayers_key, maxplayers)
47
+ end
48
+
49
+ def maxplayers
50
+ (redis.get(maxplayers_key) || DEFAULT_MAXPLAYERS).to_i
51
+ end
52
+
53
+ def active?
54
+ redis.get(pug_key)
55
+ end
56
+
57
+ def leave(player_id)
58
+ redis.srem(players_key, player_id)
59
+ end
60
+
61
+ def empty?
62
+ joined_player_count == 0
63
+ end
64
+
65
+ def end_pug
66
+ redis.del(pug_key)
67
+ redis.del(players_key)
68
+ end
69
+
70
+ private
71
+
72
+ def maxplayers_key
73
+ [pug_key, "maxplayers"].join(":")
74
+ end
75
+
76
+ def players_key
77
+ [pug_key, "players"].join(":")
78
+ end
79
+
80
+ def pug_key
81
+ ["pug", "channel", @channel_id].join(":")
82
+ end
83
+
84
+ def notify_roles_key
85
+ [pug_key, "role"].join(":")
86
+ end
87
+
88
+ def redis
89
+ Redis.current
90
+ end
91
+ end
@@ -1,4 +1,5 @@
1
- require 'event_wrapper'
1
+ require 'pug'
2
+ require 'event_decorator'
2
3
 
3
4
  class QwtfDiscordBotPug
4
5
  include QwtfDiscordBot
@@ -13,114 +14,121 @@ class QwtfDiscordBotPug
13
14
  prefix: '!'
14
15
  )
15
16
 
16
- bot.command :join do |event, *args|
17
- e = EventWrapper.new(event)
17
+ bot.command :join do |event, *_args|
18
+ e = EventDecorator.new(event)
19
+ pug = Pug.for(e.channel_id)
18
20
 
19
- redis.setnx(e.pug_key, Time.now)
20
- redis.sadd(e.players_key, e.user_id)
21
+ pug.join(e.user_id)
21
22
 
22
- message = if e.joined_player_count == e.maxplayers
23
- mentions = joined_users(e).map do |user|
24
- user.mention
25
- end
26
- "Time to play! #{mentions.join(" ")}"
27
- elsif (e.joined_player_count == 1)
23
+ message = if pug.full?
24
+ time_to_play_message(
25
+ pug.player_slots,
26
+ e.mentions_for(pug.joined_players)
27
+ )
28
+ elsif pug.joined_player_count == 1
28
29
  [
29
30
  "#{e.username} creates a PUG",
30
- e.player_slots,
31
- e.role,
32
- ].join(" | ")
33
- elsif e.slots_left <= 3
31
+ pug.player_slots,
32
+ pug.notify_roles
33
+ ].join(' | ')
34
+ elsif pug.slots_left <= 3
34
35
  [
35
36
  "#{e.username} joins the PUG",
36
- e.player_slots,
37
- "#{e.slots_left} more",
38
- e.role,
39
- ].join(" | ")
37
+ pug.player_slots,
38
+ "#{pug.slots_left} more",
39
+ pug.notify_roles
40
+ ].join(' | ')
40
41
  else
41
42
  [
42
43
  "#{e.username} joins the PUG",
43
- e.player_slots,
44
- ].join(" | ")
44
+ pug.player_slots
45
+ ].join(' | ')
45
46
  end
46
47
 
47
- send_and_log_message(message, event)
48
+ send_and_log_message(message, e.channel)
48
49
  end
49
50
 
50
- bot.command :status do |event, *args|
51
- e = EventWrapper.new(event)
52
- usernames = joined_users(e).map(&:username)
51
+ bot.command :status do |event, *_args|
52
+ e = EventDecorator.new(event)
53
+ pug = Pug.for(e.channel_id)
53
54
 
54
- message = if e.pug_active?
55
+ message = if pug.active?
55
56
  [
56
- "#{usernames.join(", ")} joined",
57
- e.player_slots
58
- ].join(" | ")
57
+ "#{e.usernames_for(pug.joined_players).join(' ')} joined",
58
+ pug.player_slots
59
+ ].join(' | ')
59
60
  else
60
- "No PUG has been started. `!join` to create"
61
+ 'No PUG has been started. `!join` to create'
61
62
  end
62
63
 
63
- send_and_log_message(message, event)
64
+ send_and_log_message(message, e.channel)
64
65
  end
65
66
 
66
67
  bot.command :maxplayers do |event, *args|
67
- e = EventWrapper.new(event)
68
+ e = EventDecorator.new(event)
69
+ pug = Pug.for(e.channel_id)
68
70
  new_maxplayers = args[0]
69
71
 
70
72
  message = if new_maxplayers
71
- redis.set(e.maxplayers_key, new_maxplayers)
72
- "Max number of players set to #{e.maxplayers} | #{e.player_slots}"
73
- else
74
- "Current max number of players is #{e.maxplayers} | #{e.player_slots}"
75
- end
73
+ pug.maxplayers = new_maxplayers
74
+ "Max number of players set to #{pug.maxplayers} | #{pug.player_slots} joined"
75
+ else
76
+ "Current max number of players is #{pug.maxplayers} | #{pug.player_slots} joined"
77
+ end
76
78
 
77
- send_and_log_message(message, event)
79
+ send_and_log_message(message, e.channel)
78
80
 
79
- if e.joined_player_count >= e.maxplayers
80
- mentions = joined_users(e).map do |user|
81
- user.mention
82
- end
81
+ if pug.full?
82
+ message = time_to_play_message(
83
+ pug.player_slots,
84
+ e.mentions_for(pug.joined_players)
85
+ )
83
86
 
84
- message = "Time to play! #{mentions.join(" ")}"
85
- send_and_log_message(message, event)
87
+ send_and_log_message(message, e.channel)
86
88
  end
87
89
  end
88
90
 
89
- bot.command :leave do |event, *args|
90
- e = EventWrapper.new(event)
91
+ bot.command :leave do |event, *_args|
92
+ e = EventDecorator.new(event)
93
+ pug = Pug.for(e.channel_id)
91
94
 
92
- redis.srem(e.players_key, e.user_id)
95
+ pug.leave(e.user_id)
93
96
 
94
- message = "#{e.username} leaves the PUG | #{e.player_slots}"
97
+ message = "#{e.username} leaves the PUG | #{pug.player_slots} remain"
95
98
 
96
- send_and_log_message(message, event)
99
+ send_and_log_message(message, e.channel)
97
100
 
98
- if e.joined_player_count == 0
99
- redis.del(e.pug_key)
101
+ if pug.empty?
102
+ pug.end_pug
100
103
 
101
- message = "PUG ended"
102
- send_and_log_message(message, event)
104
+ message = 'PUG ended'
105
+ send_and_log_message(message, e.channel)
103
106
  end
104
107
  end
105
108
 
106
- bot.command :end do |event, *args|
107
- e = EventWrapper.new(event)
109
+ bot.command :end do |event, *_args|
110
+ e = EventDecorator.new(event)
111
+ pug = Pug.for(e.channel_id)
108
112
 
109
- redis.del(e.pug_key)
110
- redis.del(e.players_key)
113
+ pug.end_pug
111
114
 
112
- message = "PUG ended"
113
- send_and_log_message(message, event)
115
+ message = 'PUG ended'
116
+ send_and_log_message(message, e.channel)
114
117
  end
115
118
 
116
- bot.command :role do |event, *args|
117
- e = EventWrapper.new(event)
118
- role = args[0]
119
+ bot.command :notify do |event, *args|
120
+ e = EventDecorator.new(event)
121
+ pug = Pug.for(e.channel_id)
122
+ roles = args.join(' ')
123
+ pug.notify_roles = roles
119
124
 
120
- redis.set(e.role_key, role)
125
+ message = if roles.empty?
126
+ 'Notification removed'
127
+ else
128
+ "Notification role set to #{roles}"
129
+ end
121
130
 
122
- message = "Notification role set to #{role}"
123
- send_and_log_message(message, event)
131
+ send_and_log_message(message, e.channel)
124
132
  end
125
133
 
126
134
  bot.run
@@ -128,16 +136,12 @@ class QwtfDiscordBotPug
128
136
 
129
137
  private
130
138
 
131
- def send_and_log_message(message, event)
132
- event.channel.send_message(message)
133
- puts message
139
+ def time_to_play_message(player_slots, mentions)
140
+ ['Time to play!', player_slots, mentions.join(' ')].join(' | ')
134
141
  end
135
142
 
136
- def joined_users(event)
137
- redis.smembers(event.players_key).map do |user_id|
138
- event.users.find do |user|
139
- user.id.to_s == user_id
140
- end
141
- end
143
+ def send_and_log_message(message, channel)
144
+ channel.send_message(message)
145
+ puts message
142
146
  end
143
147
  end
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: 5.0.4
4
+ version: 5.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: 2020-08-23 00:00:00.000000000 Z
11
+ date: 2020-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: discordrb
@@ -104,8 +104,9 @@ files:
104
104
  - exe/qwtf_discord_bot
105
105
  - lib/emoji.rb
106
106
  - lib/endpoint.rb
107
- - lib/event_wrapper.rb
107
+ - lib/event_decorator.rb
108
108
  - lib/player.rb
109
+ - lib/pug.rb
109
110
  - lib/qstat_request.rb
110
111
  - lib/qwtf_discord_bot.rb
111
112
  - lib/qwtf_discord_bot/config.rb
@@ -1,62 +0,0 @@
1
- class EventWrapper
2
- include QwtfDiscordBot
3
-
4
- DEFAULT_MAXPLAYERS = 8
5
-
6
- def initialize(event)
7
- @event = event
8
- end
9
-
10
- def user_id
11
- @event.user.id
12
- end
13
-
14
- def username
15
- @event.user.username
16
- end
17
-
18
- def maxplayers_key
19
- [pug_key, "maxplayers"].join(":")
20
- end
21
-
22
- def maxplayers
23
- redis.setnx(maxplayers_key, DEFAULT_MAXPLAYERS)
24
- redis.get(maxplayers_key).to_i
25
- end
26
-
27
- def joined_player_count
28
- redis.scard(players_key).to_i
29
- end
30
-
31
- def slots_left
32
- maxplayers - joined_player_count
33
- end
34
-
35
- def pug_key
36
- ["pug", "channel", @event.channel.id].join(":")
37
- end
38
-
39
- def players_key
40
- [pug_key, "players"].join(":")
41
- end
42
-
43
- def player_slots
44
- "#{joined_player_count}/#{maxplayers}"
45
- end
46
-
47
- def users
48
- @event.server.users
49
- end
50
-
51
- def role_key
52
- [pug_key, "role"].join(":")
53
- end
54
-
55
- def role
56
- redis.get(role_key) || "@here"
57
- end
58
-
59
- def pug_active?
60
- redis.get(pug_key)
61
- end
62
- end