qwtf_discord_bot 5.0.4 → 5.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: 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