teamspeak3 0.0.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 +7 -0
- data/lib/exceptions.rb +8 -0
- data/lib/exceptions/command_execution_failed.rb +14 -0
- data/lib/exceptions/not_connected.rb +9 -0
- data/lib/exceptions/query_login_failed.rb +9 -0
- data/lib/exceptions/server_connection_failed.rb +11 -0
- data/lib/exceptions/standard_exception.rb +11 -0
- data/lib/server.rb +70 -0
- data/lib/server_response.rb +84 -0
- data/lib/teamspeak3.rb +5 -0
- metadata +52 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 047e1ed175699cf16ec1e920abb755a80716aef5
|
4
|
+
data.tar.gz: 4dcb207489d5047c177b0e032ad53787d81cbdbc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b9453878d62e0eb4974a27c1207c1d7b4d706ad2f6a4816a26eb6916d23cdd273043619c45bda59b1a388464da7120c600540cf6c4410d0f1bde2274e3fb536d
|
7
|
+
data.tar.gz: d590572ef38941d77bb302d42a4e12fae015143e54485907e9583e09d99f1cc3cdb7e2520cadd0bfb74f60f1d9ebeb7c15c3c1e12ba04396fd473b1f18e3c0ec
|
data/lib/exceptions.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
# the standard exception is the parent of all exceptions
|
2
|
+
require_relative 'exceptions/standard_exception.rb'
|
3
|
+
|
4
|
+
# alphabetical order of exceptions
|
5
|
+
require_relative 'exceptions/command_execution_failed.rb'
|
6
|
+
require_relative 'exceptions/not_connected.rb'
|
7
|
+
require_relative 'exceptions/query_login_failed.rb'
|
8
|
+
require_relative 'exceptions/server_connection_failed.rb'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module TeamSpeak3
|
2
|
+
module Exceptions
|
3
|
+
class CommandExecutionFailed < TeamSpeak3::Exceptions::StandardException
|
4
|
+
attr_reader :error_id
|
5
|
+
attr_reader :command
|
6
|
+
|
7
|
+
def initialize(error_id, message, command)
|
8
|
+
@error_id = error_id.to_i
|
9
|
+
@message = message
|
10
|
+
@command = command
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module TeamSpeak3
|
2
|
+
module Exceptions
|
3
|
+
class ServerConnectionFailed < TeamSpeak3::Exceptions::StandardException
|
4
|
+
def initialize(ip_address, query_port, message)
|
5
|
+
@ip_address = ip_address
|
6
|
+
@query_port = query_port
|
7
|
+
@message = message
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/lib/server.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
module TeamSpeak3
|
2
|
+
class Server
|
3
|
+
attr_reader :ip_address
|
4
|
+
attr_reader :query_port
|
5
|
+
attr_reader :socket
|
6
|
+
|
7
|
+
def initialize(ip_address, query_port, opts = {})
|
8
|
+
@ip_address = ip_address
|
9
|
+
@query_port = query_port
|
10
|
+
@opts = opts
|
11
|
+
end
|
12
|
+
|
13
|
+
def connect
|
14
|
+
begin
|
15
|
+
@socket = Net::Telnet::new(
|
16
|
+
'Host' => @ip_address,
|
17
|
+
'Port' => @query_port,
|
18
|
+
'Timeout' => @opts[:timeout] || 3,
|
19
|
+
'Telnetmode' => false
|
20
|
+
)
|
21
|
+
|
22
|
+
@socket.waitfor(/Welcome to the TeamSpeak 3 ServerQuery interface/)
|
23
|
+
rescue Net::ReadTimeout => err
|
24
|
+
raise TeamSpeak3::Exceptions::ServerConnectionFailed.new(@ip_address, @query_port, \
|
25
|
+
"Timeout while waiting for TeamSpeak 3 welcome message.")
|
26
|
+
rescue Net::OpenTimeout, Errno::ECONNREFUSED => err
|
27
|
+
raise TeamSpeak3::Exceptions::ServerConnectionFailed.new(@ip_address, @query_port, \
|
28
|
+
"Could not open connection to server at #{@ip_address}:#{@query_port}")
|
29
|
+
end
|
30
|
+
|
31
|
+
true
|
32
|
+
end
|
33
|
+
|
34
|
+
def login(query_user, query_pass)
|
35
|
+
verify_connection
|
36
|
+
|
37
|
+
begin
|
38
|
+
execute "login client_login_name=#{query_user} client_login_password=#{query_pass}"
|
39
|
+
rescue TeamSpeak3::Exceptions::CommandExecutionFailed => err
|
40
|
+
raise TeamSpeak3::Exceptions::QueryLoginFailed, err.message
|
41
|
+
end
|
42
|
+
|
43
|
+
true
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def verify_connection
|
49
|
+
raise TeamSpeak3::Exceptions::NotConnected, 'Not connected to a TeamSpeak 3 server.' unless @socket
|
50
|
+
end
|
51
|
+
|
52
|
+
def execute(command)
|
53
|
+
@socket.puts(command)
|
54
|
+
|
55
|
+
# every response contains an error information. so we wait until we receive a response
|
56
|
+
response = @socket.waitfor(/error id=.*/)
|
57
|
+
|
58
|
+
response = TeamSpeak3::ServerResponse.parse(response)
|
59
|
+
if response[:errors][:msg] != 'ok'
|
60
|
+
raise TeamSpeak3::Exceptions::CommandExecutionFailed.new(
|
61
|
+
response[:errors][:id],
|
62
|
+
response[:errors][:msg],
|
63
|
+
command,
|
64
|
+
)
|
65
|
+
end
|
66
|
+
|
67
|
+
response
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module TeamSpeak3
|
2
|
+
class ServerResponse
|
3
|
+
class << self
|
4
|
+
def parse(response)
|
5
|
+
data, errors = split_data_from_errors(response)
|
6
|
+
|
7
|
+
data = split_keys_from_values(data) if data
|
8
|
+
errors = split_keys_from_values(errors, ignore_array_result: true) if errors
|
9
|
+
|
10
|
+
{ data: data, errors: errors }
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def split_keys_from_values(data, opts = {})
|
16
|
+
# some commands return an array as response (indicated by a pipe)
|
17
|
+
response_list = data.split('|')
|
18
|
+
result_list = []
|
19
|
+
|
20
|
+
response_list.each do |data|
|
21
|
+
# split data packets (e.g.: cid=1 channel_name=test)
|
22
|
+
data = data.split(' ')
|
23
|
+
result = {}
|
24
|
+
|
25
|
+
data.each do |key_and_value|
|
26
|
+
# the start of the error section is always indicated with 'error'. As there is no '=' and no
|
27
|
+
# data we have to split, we can safely skip this iteration
|
28
|
+
next if key_and_value == "error"
|
29
|
+
|
30
|
+
trim_pos = key_and_value.index('=')
|
31
|
+
|
32
|
+
if trim_pos
|
33
|
+
key = key_and_value[0..trim_pos-1]
|
34
|
+
value = key_and_value[trim_pos+1..-1]
|
35
|
+
else
|
36
|
+
key = key_and_value
|
37
|
+
value = nil
|
38
|
+
end
|
39
|
+
|
40
|
+
result[key.to_sym] = parse_value(value)
|
41
|
+
end
|
42
|
+
|
43
|
+
return result if opts[:ignore_array_result]
|
44
|
+
result_list.push(result)
|
45
|
+
end
|
46
|
+
|
47
|
+
result_list
|
48
|
+
end
|
49
|
+
|
50
|
+
def parse_value(value)
|
51
|
+
return unless value
|
52
|
+
|
53
|
+
value.gsub!("\\\\", "\\")
|
54
|
+
value.gsub!("\/", "/")
|
55
|
+
value.gsub!("\\s", " ")
|
56
|
+
value.gsub!("\\p", "|")
|
57
|
+
value.gsub!("\\a", "\a")
|
58
|
+
value.gsub!("\\b", "\b")
|
59
|
+
value.gsub!("\\f", "\f")
|
60
|
+
value.gsub!("\\n", "\n")
|
61
|
+
value.gsub!("\\r", "\r")
|
62
|
+
value.gsub!("\\t", "\t")
|
63
|
+
value.gsub!("\\v", "\v")
|
64
|
+
value
|
65
|
+
end
|
66
|
+
|
67
|
+
def split_data_from_errors(response)
|
68
|
+
data, errors = response.split("\n")
|
69
|
+
|
70
|
+
# the response always consists of an error information (even if everything was fine) divided
|
71
|
+
# by a new line. normally, 'errors' contains the error information, but in case there is only
|
72
|
+
# an error and no data has been responded, the 'data' variable actually contains our error
|
73
|
+
# information
|
74
|
+
|
75
|
+
if data && !errors
|
76
|
+
errors = data
|
77
|
+
data = nil
|
78
|
+
end
|
79
|
+
|
80
|
+
[ data, errors ]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/lib/teamspeak3.rb
ADDED
metadata
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: teamspeak3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Manuel Schnitzer
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-03-04 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: An OOP library to query and manage TeamSpeak 3 servers in Ruby.
|
14
|
+
email: webmaster@mschnitzer.de
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/exceptions.rb
|
20
|
+
- lib/exceptions/command_execution_failed.rb
|
21
|
+
- lib/exceptions/not_connected.rb
|
22
|
+
- lib/exceptions/query_login_failed.rb
|
23
|
+
- lib/exceptions/server_connection_failed.rb
|
24
|
+
- lib/exceptions/standard_exception.rb
|
25
|
+
- lib/server.rb
|
26
|
+
- lib/server_response.rb
|
27
|
+
- lib/teamspeak3.rb
|
28
|
+
homepage: https://github.com/mschnitzer/teamspeak3
|
29
|
+
licenses:
|
30
|
+
- MIT
|
31
|
+
metadata: {}
|
32
|
+
post_install_message:
|
33
|
+
rdoc_options: []
|
34
|
+
require_paths:
|
35
|
+
- lib
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
requirements: []
|
47
|
+
rubyforge_project:
|
48
|
+
rubygems_version: 2.2.5
|
49
|
+
signing_key:
|
50
|
+
specification_version: 4
|
51
|
+
summary: A TeamSpeak 3 Query Library
|
52
|
+
test_files: []
|