qwtf_discord_bot 0.4.0 → 0.4.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 +4 -4
- data/Gemfile +4 -3
- data/Gemfile.lock +4 -21
- data/README.md +13 -6
- data/exe/qwtf_discord_bot +2 -2
- data/lib/emoji.rb +2 -12
- data/lib/player.rb +1 -1
- data/lib/qwtf_discord_bot/version.rb +1 -1
- data/lib/qwtf_discord_bot.rb +63 -80
- data/qwtf_discord_bot.gemspec +0 -7
- data/server_screenshot.png +0 -0
- data/watcher_screenshot.png +0 -0
- metadata +5 -74
- data/screenshot.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 62157a5a72751b294e2ee10e08455e2ae86b617f4f04ab4654c4e85a0bc57391
|
4
|
+
data.tar.gz: 815994275f732832081c1d9ed36f75ca1063eda17d16875d6823756f306aecca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 933a0d807334cceafa97c3f9f48e00554483c04057c042c4fd74b7e2a676778340e8349ff2959a0a3a5641adf9329ccea0aa382e22737b31a119a71ce2a9c55c
|
7
|
+
data.tar.gz: 9f6a616d96d8e5173e2f896ec0de689315ac468e08a8c82a5fc85b202ed619325aa267b3b5212a6bde48b1a357004014e2ad0a798c8e407ef5eac92da15f9039
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,14 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
qwtf_discord_bot (0.
|
5
|
-
discordrb
|
6
|
-
thor (~> 0)
|
4
|
+
qwtf_discord_bot (0.4.0)
|
7
5
|
|
8
6
|
GEM
|
9
7
|
remote: https://rubygems.org/
|
10
8
|
specs:
|
11
|
-
diff-lcs (1.3)
|
12
9
|
discordrb (3.2.1)
|
13
10
|
discordrb-webhooks (~> 3.2.0.1)
|
14
11
|
opus-ruby
|
@@ -29,26 +26,12 @@ GEM
|
|
29
26
|
netrc (0.11.0)
|
30
27
|
opus-ruby (1.0.1)
|
31
28
|
ffi
|
32
|
-
rake (10.5.0)
|
33
29
|
rbnacl (3.4.0)
|
34
30
|
ffi
|
35
31
|
rest-client (2.0.2)
|
36
32
|
http-cookie (>= 1.0.2, < 2.0)
|
37
33
|
mime-types (>= 1.16, < 4.0)
|
38
34
|
netrc (~> 0.8)
|
39
|
-
rspec (3.7.0)
|
40
|
-
rspec-core (~> 3.7.0)
|
41
|
-
rspec-expectations (~> 3.7.0)
|
42
|
-
rspec-mocks (~> 3.7.0)
|
43
|
-
rspec-core (3.7.1)
|
44
|
-
rspec-support (~> 3.7.0)
|
45
|
-
rspec-expectations (3.7.0)
|
46
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
47
|
-
rspec-support (~> 3.7.0)
|
48
|
-
rspec-mocks (3.7.0)
|
49
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
50
|
-
rspec-support (~> 3.7.0)
|
51
|
-
rspec-support (3.7.1)
|
52
35
|
thor (0.20.0)
|
53
36
|
unf (0.1.4)
|
54
37
|
unf_ext
|
@@ -62,10 +45,10 @@ PLATFORMS
|
|
62
45
|
ruby
|
63
46
|
|
64
47
|
DEPENDENCIES
|
65
|
-
bundler
|
48
|
+
bundler
|
49
|
+
discordrb
|
66
50
|
qwtf_discord_bot!
|
67
|
-
|
68
|
-
rspec (~> 3.0)
|
51
|
+
thor
|
69
52
|
|
70
53
|
BUNDLED WITH
|
71
54
|
1.16.2
|
data/README.md
CHANGED
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
A Discord bot for checking the status of QuakeWorld Team Fortress servers
|
4
4
|
|
5
|
-

|
6
|
-
|
7
5
|
|
8
6
|
## Dependencies
|
9
7
|
|
@@ -35,9 +33,9 @@ There are two features:
|
|
35
33
|
### Server
|
36
34
|
|
37
35
|
This responds to `!server` messages by providing information about your game
|
38
|
-
server.
|
36
|
+
server.
|
39
37
|
|
40
|
-
|
38
|
+

|
41
39
|
|
42
40
|
```
|
43
41
|
Usage:
|
@@ -50,14 +48,18 @@ Options:
|
|
50
48
|
# Default: 27500
|
51
49
|
```
|
52
50
|
|
51
|
+
E.G.
|
52
|
+
|
53
|
+
$ bundle exec exe/qwtf-discord-bot server --hostname fortressone.ga --port 27501
|
54
|
+
|
53
55
|
|
54
56
|
### Watcher
|
55
57
|
|
56
58
|
This watches the game server and announces if anyone has joined the server. It
|
57
59
|
polls the server once every 30 seconds and will only report a player joining if
|
58
|
-
they haven't been connected for more than ten minutes.
|
60
|
+
they haven't been connected for more than ten minutes.
|
59
61
|
|
60
|
-
|
62
|
+

|
61
63
|
|
62
64
|
```
|
63
65
|
Usage:
|
@@ -70,6 +72,11 @@ Options:
|
|
70
72
|
# Default: 27500
|
71
73
|
```
|
72
74
|
|
75
|
+
E.G.
|
76
|
+
|
77
|
+
$ bundle exec exe/qwtf-discord-bot watcher --hostname fortressone.ga --port 27501
|
78
|
+
|
79
|
+
|
73
80
|
## License
|
74
81
|
|
75
82
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/exe/qwtf_discord_bot
CHANGED
@@ -14,7 +14,7 @@ class QwtfDiscordBotExe < Thor
|
|
14
14
|
def server
|
15
15
|
hostname = options['hostname']
|
16
16
|
port = options['port']
|
17
|
-
server_bot =
|
17
|
+
server_bot = QwtfDiscordBotServer.new(hostname: hostname, port: port)
|
18
18
|
server_bot.run
|
19
19
|
end
|
20
20
|
|
@@ -24,7 +24,7 @@ class QwtfDiscordBotExe < Thor
|
|
24
24
|
def watcher
|
25
25
|
hostname = options['hostname']
|
26
26
|
port = options['port']
|
27
|
-
watcher_bot =
|
27
|
+
watcher_bot = QwtfDiscordBotWatcher.new(hostname: hostname, port: port)
|
28
28
|
watcher_bot.run
|
29
29
|
end
|
30
30
|
end
|
data/lib/emoji.rb
CHANGED
@@ -24,17 +24,7 @@ class Emoji
|
|
24
24
|
}
|
25
25
|
}.freeze
|
26
26
|
|
27
|
-
def
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
def to_s
|
32
|
-
id || ''
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def id
|
38
|
-
@id ||= LOOKUP[@player.team.to_s] && LOOKUP[@player.team.to_s][@player.player_class]
|
27
|
+
def self.for(team:, player_class:)
|
28
|
+
LOOKUP[team] && LOOKUP[team][player_class]
|
39
29
|
end
|
40
30
|
end
|
data/lib/player.rb
CHANGED
data/lib/qwtf_discord_bot.rb
CHANGED
@@ -11,101 +11,84 @@ class QwtfDiscordBot
|
|
11
11
|
CLIENT_ID = ENV['QWTF_DISCORD_BOT_CLIENT_ID'].strip
|
12
12
|
CHANNEL_ID = ENV['QWTF_DISCORD_BOT_CHANNEL_ID'].strip
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
end
|
14
|
+
def initialize(hostname:, port:)
|
15
|
+
@hostname = hostname
|
16
|
+
@port = port
|
17
|
+
end
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
)
|
19
|
+
def endpoint
|
20
|
+
return @hostname if @port == 27500
|
21
|
+
[@hostname, @port].join(':')
|
22
|
+
end
|
23
|
+
end
|
26
24
|
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
class QwtfDiscordBotServer < QwtfDiscordBot
|
26
|
+
def run
|
27
|
+
bot = Discordrb::Commands::CommandBot.new(
|
28
|
+
token: TOKEN,
|
29
|
+
client_id: CLIENT_ID,
|
30
|
+
prefix: '!'
|
31
|
+
)
|
30
32
|
|
31
|
-
|
33
|
+
bot.command :server do |_event|
|
34
|
+
QstatRequest.new(endpoint).output
|
32
35
|
end
|
33
36
|
|
34
|
-
|
35
|
-
|
36
|
-
def endpoint
|
37
|
-
@endpoint ||= if @port == 27500
|
38
|
-
@hostname
|
39
|
-
else
|
40
|
-
"#{@hostname}:#{@port}"
|
41
|
-
end
|
42
|
-
end
|
37
|
+
bot.run
|
43
38
|
end
|
39
|
+
end
|
44
40
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
player_names.each do |name|
|
66
|
-
unless seen_recently?(name)
|
67
|
-
report_joined(name: name,
|
68
|
-
map: map,
|
69
|
-
numplayers: numplayers,
|
70
|
-
maxplayers: maxplayers)
|
71
|
-
end
|
72
|
-
|
73
|
-
@history[name] = Time.now
|
41
|
+
class QwtfDiscordBotWatcher < QwtfDiscordBot
|
42
|
+
THIRTY_SECONDS = 30
|
43
|
+
TEN_MINUTES = 10 * 60
|
44
|
+
|
45
|
+
def run
|
46
|
+
every(THIRTY_SECONDS) do
|
47
|
+
request = QstatRequest.new(endpoint)
|
48
|
+
numplayers = request.numplayers
|
49
|
+
maxplayers = request.maxplayers
|
50
|
+
map = request.map
|
51
|
+
|
52
|
+
if request.players
|
53
|
+
player_names = request.players.map(&:name)
|
54
|
+
|
55
|
+
player_names.each do |name|
|
56
|
+
unless seen_recently?(name)
|
57
|
+
report_joined(name: name,
|
58
|
+
map: map,
|
59
|
+
numplayers: numplayers,
|
60
|
+
maxplayers: maxplayers)
|
74
61
|
end
|
62
|
+
|
63
|
+
history[name] = Time.now
|
75
64
|
end
|
76
65
|
end
|
77
66
|
end
|
67
|
+
end
|
78
68
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
"#{@hostname}:#{@port}"
|
86
|
-
end
|
69
|
+
def every(n_seconds)
|
70
|
+
loop do
|
71
|
+
before = Time.now
|
72
|
+
yield
|
73
|
+
interval = n_seconds - (Time.now - before)
|
74
|
+
sleep(interval) if interval > 0
|
87
75
|
end
|
76
|
+
end
|
88
77
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
"**#{name}** has joined **#{endpoint} | #{map} | #{numplayers}/#{maxplayers}**"
|
94
|
-
)
|
95
|
-
end
|
78
|
+
def seen_recently?(name)
|
79
|
+
last_seen = history[name]
|
80
|
+
last_seen && (Time.now - last_seen < TEN_MINUTES)
|
81
|
+
end
|
96
82
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
83
|
+
def report_joined(name:, map:, numplayers:, maxplayers:)
|
84
|
+
Discordrb::API::Channel.create_message(
|
85
|
+
"Bot #{TOKEN}",
|
86
|
+
CHANNEL_ID,
|
87
|
+
"**#{name}** has joined **#{endpoint} | #{map} | #{numplayers}/#{maxplayers}**"
|
88
|
+
)
|
89
|
+
end
|
101
90
|
|
102
|
-
|
103
|
-
|
104
|
-
before = Time.now
|
105
|
-
yield
|
106
|
-
interval = n_seconds - (Time.now - before)
|
107
|
-
sleep(interval) if interval > 0
|
108
|
-
end
|
109
|
-
end
|
91
|
+
def history
|
92
|
+
@history ||= {}
|
110
93
|
end
|
111
94
|
end
|
data/qwtf_discord_bot.gemspec
CHANGED
@@ -26,11 +26,4 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.bindir = 'exe'
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
28
|
spec.require_paths = ['lib']
|
29
|
-
|
30
|
-
spec.add_dependency 'discordrb'
|
31
|
-
spec.add_dependency 'thor', '~> 0'
|
32
|
-
|
33
|
-
spec.add_development_dependency 'bundler', '~> 1.16'
|
34
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
35
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
36
29
|
end
|
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,85 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qwtf_discord_bot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.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: 2018-08-
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: discordrb
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: thor
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: bundler
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.16'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '1.16'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rake
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '10.0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '10.0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rspec
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '3.0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '3.0'
|
11
|
+
date: 2018-08-11 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
83
13
|
description: A Discord bot for reporting on QuakeWorld Team Fortress game servers
|
84
14
|
email:
|
85
15
|
- shayolden@hotmail.com
|
@@ -125,7 +55,8 @@ files:
|
|
125
55
|
- lib/qwtf_discord_bot/version.rb
|
126
56
|
- lib/team.rb
|
127
57
|
- qwtf_discord_bot.gemspec
|
128
|
-
-
|
58
|
+
- server_screenshot.png
|
59
|
+
- watcher_screenshot.png
|
129
60
|
homepage: https://github.com/drzel/qwtf_discord_bot.git
|
130
61
|
licenses:
|
131
62
|
- MIT
|
data/screenshot.png
DELETED
Binary file
|