qwtf_discord_bot 5.0.1 → 5.1.1

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: 1952a9bb33cf18bcda01f202ed5900cb5168f0c3e1ad8aa083b1ee0ae54b6ed0
4
- data.tar.gz: 31ab6af67990f6479640402bf20ec90fdcfad9943b5cc84697ea2c18776e9676
3
+ metadata.gz: 15afdd84de10528d7020797cbf211448eefa0ae8b6b7e13e9cab2e9bccdbc957
4
+ data.tar.gz: 324e5b52860aec148206e4408b4dbc0dd56b4b7a3c1dbfc36e960ef469a6ea79
5
5
  SHA512:
6
- metadata.gz: 3ae59b76eda7fe87baa54c6b79d5d0d32de7f2cb947d2631eed2b2d2a3769376727c855a8ba1293c5e00fd23376357a5153cd3bdfa00e328868ee2f1b669f3e3
7
- data.tar.gz: c0fd9ef59318cde38734e3f28d9f8a41a9c6ad0a829aae70ee48a07aeb5f509b6a22a58e6e6148a6c4324a1733f6d9d3c7e0104994ccbfd6d4ef6305cda803fb
6
+ metadata.gz: 1952f502bbcc26942fe362749e2f6f3640fa7c5b0b87d80a4d4d7abe179ad629c7b6fa366ad4f878c9b9e5ae4e1833bbce1a7675b09796f94ab51463649771fd
7
+ data.tar.gz: 11dd44583e6a5cada8ceb31b89d9305016fc7ee12f8d3cf2aaba3781fa07f427de19014694c23c794faff6c8e589d8984a171d4b328abcf0828a68162c73592e
@@ -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,7 +90,8 @@ This responds to discord messages:
90
90
  - `!leave`
91
91
  - `!status`
92
92
  - `!maxplayers <no_of_players>`
93
- - `!leave`
93
+ - `!notify <roles>`
94
+ - `!end`
94
95
 
95
96
 
96
97
  #### Watcher
data/VERSION CHANGED
@@ -1 +1 @@
1
- 5.0.1
1
+ 5.1.1
@@ -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
@@ -9,113 +10,125 @@ class QwtfDiscordBotPug
9
10
  bot = Discordrb::Commands::CommandBot.new(
10
11
  token: QwtfDiscordBot.config.token,
11
12
  client_id: QwtfDiscordBot.config.client_id,
13
+ help_command: false,
12
14
  prefix: '!'
13
15
  )
14
16
 
15
- bot.command :join do |event, *args|
16
- e = EventWrapper.new(event)
17
+ bot.command :join do |event, *_args|
18
+ e = EventDecorator.new(event)
19
+ pug = Pug.for(e.channel_id)
17
20
 
18
- redis.setnx(e.pug_key, Time.now)
19
- redis.sadd(e.players_key, e.user_id)
21
+ pug.join(e.user_id)
20
22
 
21
- message = if e.joined_player_count == e.maxplayers
22
- mentions = joined_users(e).map do |user|
23
- user.mention
24
- end
25
- "Time to play! #{mentions.join(" ")}"
26
- 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
27
29
  [
28
30
  "#{e.username} creates a PUG",
29
- e.player_slots,
30
- e.role,
31
- ].join(" | ")
32
- elsif e.slots_left <= 3
31
+ pug.player_slots,
32
+ pug.notify_roles
33
+ ].join(' | ')
34
+ elsif pug.slots_left <= 3
33
35
  [
34
36
  "#{e.username} joins the PUG",
35
- e.player_slots,
36
- "#{e.slots_left} more",
37
- e.role,
38
- ].join(" | ")
37
+ pug.player_slots,
38
+ "#{pug.slots_left} more",
39
+ pug.notify_roles
40
+ ].join(' | ')
39
41
  else
40
42
  [
41
43
  "#{e.username} joins the PUG",
42
- e.player_slots,
43
- ].join(" | ")
44
+ pug.player_slots
45
+ ].join(' | ')
44
46
  end
45
47
 
46
- send_and_log_message(message, event)
48
+ send_and_log_message(message, e.channel)
47
49
  end
48
50
 
49
- bot.command :status do |event, *args|
50
- e = EventWrapper.new(event)
51
- 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)
52
54
 
53
- message = [
54
- "#{usernames.join(", ")} joined",
55
- e.player_slots
56
- ].join(" | ")
55
+ message = if pug.active?
56
+ [
57
+ "#{e.usernames_for(pug.joined_players).join(', ')} joined",
58
+ pug.player_slots
59
+ ].join(' | ')
60
+ else
61
+ 'No PUG has been started. `!join` to create'
62
+ end
57
63
 
58
- send_and_log_message(message, event)
64
+ send_and_log_message(message, e.channel)
59
65
  end
60
66
 
61
67
  bot.command :maxplayers do |event, *args|
62
- e = EventWrapper.new(event)
68
+ e = EventDecorator.new(event)
69
+ pug = Pug.for(e.channel_id)
63
70
  new_maxplayers = args[0]
64
71
 
65
72
  message = if new_maxplayers
66
- redis.set(e.maxplayers_key, new_maxplayers)
67
- "Max number of players set to #{e.maxplayers} | #{e.player_slots}"
68
- else
69
- "Current max number of players is #{e.maxplayers} | #{e.player_slots}"
70
- 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
71
78
 
72
- send_and_log_message(message, event)
79
+ send_and_log_message(message, e.channel)
73
80
 
74
- if e.joined_player_count >= e.maxplayers
75
- mentions = joined_users(e).map do |user|
76
- user.mention
77
- end
81
+ if pug.full?
82
+ message = time_to_play_message(
83
+ pug.player_slots,
84
+ e.mentions_for(pug.joined_players)
85
+ )
78
86
 
79
- message = "Time to play! #{mentions.join(" ")}"
80
- send_and_log_message(message, event)
87
+ send_and_log_message(message, e.channel)
81
88
  end
82
89
  end
83
90
 
84
- bot.command :leave do |event, *args|
85
- e = EventWrapper.new(event)
91
+ bot.command :leave do |event, *_args|
92
+ e = EventDecorator.new(event)
93
+ pug = Pug.for(e.channel_id)
86
94
 
87
- redis.srem(e.players_key, e.user_id)
95
+ pug.leave(e.user_id)
88
96
 
89
- message = "#{e.username} leaves the PUG | #{e.player_slots}"
97
+ message = "#{e.username} leaves the PUG | #{pug.player_slots} remain"
90
98
 
91
- send_and_log_message(message, event)
99
+ send_and_log_message(message, e.channel)
92
100
 
93
- if e.joined_player_count == 0
94
- redis.del(e.pug_key)
101
+ if pug.empty?
102
+ pug.end_pug
95
103
 
96
- message = "PUG ended"
97
- send_and_log_message(message, event)
104
+ message = 'PUG ended'
105
+ send_and_log_message(message, e.channel)
98
106
  end
99
107
  end
100
108
 
101
- bot.command :end do |event, *args|
102
- e = EventWrapper.new(event)
109
+ bot.command :end do |event, *_args|
110
+ e = EventDecorator.new(event)
111
+ pug = Pug.for(e.channel_id)
103
112
 
104
- redis.del(e.pug_key)
105
- redis.del(e.players_key)
113
+ pug.end_pug
106
114
 
107
- message = "PUG ended"
108
- send_and_log_message(message, event)
115
+ message = 'PUG ended'
116
+ send_and_log_message(message, e.channel)
109
117
  end
110
118
 
111
- bot.command :role do |event, *args|
112
- e = EventWrapper.new(event)
113
- 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
114
124
 
115
- redis.set(e.role_key, role)
125
+ message = if roles.empty?
126
+ 'Notification removed'
127
+ else
128
+ "Notification role set to #{roles}"
129
+ end
116
130
 
117
- message = "Notification role set to #{role}"
118
- send_and_log_message(message, event)
131
+ send_and_log_message(message, e.channel)
119
132
  end
120
133
 
121
134
  bot.run
@@ -123,16 +136,12 @@ class QwtfDiscordBotPug
123
136
 
124
137
  private
125
138
 
126
- def send_and_log_message(message, event)
127
- event.channel.send_message(message)
128
- puts message
139
+ def time_to_play_message(player_slots, mentions)
140
+ ['Time to play!', player_slots, mentions.join(' ')].join(' | ')
129
141
  end
130
142
 
131
- def joined_users(event)
132
- redis.smembers(event.players_key).map do |user_id|
133
- event.users.find do |user|
134
- user.id.to_s == user_id
135
- end
136
- end
143
+ def send_and_log_message(message, channel)
144
+ channel.send_message(message)
145
+ puts message
137
146
  end
138
147
  end
@@ -3,6 +3,7 @@ class QwtfDiscordBotServer
3
3
  bot = Discordrb::Commands::CommandBot.new(
4
4
  token: QwtfDiscordBot.config.token,
5
5
  client_id: QwtfDiscordBot.config.client_id,
6
+ help_command: false,
6
7
  prefix: '!'
7
8
  )
8
9
 
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.1
4
+ version: 5.1.1
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,58 +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
- end