teamspeak3 0.0.1 → 0.0.2
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/lib/channel.rb +97 -0
- data/lib/client.rb +122 -0
- data/lib/command_parameter.rb +37 -0
- data/lib/exceptions.rb +3 -0
- data/lib/exceptions/invalid_kick_action.rb +12 -0
- data/lib/exceptions/invalid_target.rb +12 -0
- data/lib/exceptions/invalid_target_type.rb +12 -0
- data/lib/exceptions/server_connection_failed.rb +3 -0
- data/lib/server.rb +73 -3
- data/lib/server_response.rb +1 -18
- data/lib/teamspeak3.rb +7 -0
- data/lib/virtual_server.rb +73 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5cfaad253891919553b8e8f9195e6c903a43e94f
|
4
|
+
data.tar.gz: 4b4a47e6af3efea58d63e32f004efb660eae2909
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f2d97920b5994b11b4deb306296e9eef01e1f3d3d55ab62ea92e47e7de5acd3d55566c49e7be9d6becaa4907b391ce46938aaa10a48646121fb7e352c060288
|
7
|
+
data.tar.gz: a4e43cb8cb9ed5eb8c940e237102d6f9b95c6fdf436d9f31b01923dcfa62727a00c2817dc130553a1ea4db578a90ee35c94f956f4090528ff04a2951e6950837
|
data/lib/channel.rb
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
module TeamSpeak3
|
2
|
+
class Channel
|
3
|
+
attr_reader :virtual_server
|
4
|
+
|
5
|
+
attr_reader :id
|
6
|
+
attr_reader :pid
|
7
|
+
attr_reader :name
|
8
|
+
attr_reader :order
|
9
|
+
attr_reader :total_clients
|
10
|
+
attr_reader :needed_subscribe_power
|
11
|
+
|
12
|
+
attr_reader :topic
|
13
|
+
|
14
|
+
attr_reader :flags
|
15
|
+
|
16
|
+
attr_reader :codec
|
17
|
+
attr_reader :codec_quality
|
18
|
+
attr_reader :needed_talk_power
|
19
|
+
|
20
|
+
attr_reader :icon_id
|
21
|
+
|
22
|
+
attr_reader :total_clients_family
|
23
|
+
attr_reader :max_clients
|
24
|
+
attr_reader :max_family_clients
|
25
|
+
|
26
|
+
def initialize(virtual_server, params)
|
27
|
+
@virtual_server = virtual_server
|
28
|
+
|
29
|
+
@id = params[:cid].to_i
|
30
|
+
@pid = params[:pid].to_i
|
31
|
+
@name = params[:channel_name]
|
32
|
+
@order = params[:order].to_i
|
33
|
+
@total_clients = params[:total_clients].to_i
|
34
|
+
@needed_subscribe_power = params[:channel_needed_subscribe_power].to_i
|
35
|
+
|
36
|
+
# option: :topic
|
37
|
+
@topic = params[:channel_topic]
|
38
|
+
|
39
|
+
# option: :flags
|
40
|
+
@flags = []
|
41
|
+
@flags << :default if params[:channel_flag_default].to_i == 1
|
42
|
+
@flags << :password if params[:channel_flag_password].to_i == 1
|
43
|
+
@flags << :permanent if params[:channel_flag_permanent].to_i == 1
|
44
|
+
@flags << :semi_permanent if params[:channel_flag_semi_permanent].to_i == 1
|
45
|
+
|
46
|
+
# option: :voice
|
47
|
+
@codec = params[:channel_codec].to_i
|
48
|
+
@codec_quality = params[:channel_codec_quality].to_i
|
49
|
+
@needed_talk_power = params[:channel_needed_talk_power].to_i
|
50
|
+
|
51
|
+
# option: :icon
|
52
|
+
@icon_id = params[:channel_icon_id].to_i
|
53
|
+
|
54
|
+
# option: :limits
|
55
|
+
@total_clients_family = params[:total_clients_family].to_i
|
56
|
+
@max_clients = params[:channel_maxclients].to_i
|
57
|
+
@max_family_clients = params[:channel_maxfamilyclients].to_i
|
58
|
+
end
|
59
|
+
|
60
|
+
def codec_name
|
61
|
+
return "Speex Narrowband" if @codec == 0
|
62
|
+
return "Speex Wideband" if @codec == 1
|
63
|
+
return "Speex Ultra-Wideband" if @codec == 2
|
64
|
+
return "CELT Mono" if @codec == 3
|
65
|
+
return "Opus Voice" if @codec == 4
|
66
|
+
return "Opus Music" if @codec == 5
|
67
|
+
end
|
68
|
+
|
69
|
+
def permanent?
|
70
|
+
flag?(:permanent)
|
71
|
+
end
|
72
|
+
|
73
|
+
def semi_permanent?
|
74
|
+
flag?(:semi_permanent)
|
75
|
+
end
|
76
|
+
|
77
|
+
def password?
|
78
|
+
flag?(:password)
|
79
|
+
end
|
80
|
+
|
81
|
+
def default?
|
82
|
+
flag?(:default)
|
83
|
+
end
|
84
|
+
|
85
|
+
def flag?(flag)
|
86
|
+
@flags.include?(flag.to_sym)
|
87
|
+
end
|
88
|
+
|
89
|
+
def send_message(message)
|
90
|
+
virtual_server.server.send_message_to(self, message)
|
91
|
+
end
|
92
|
+
|
93
|
+
def ==(target)
|
94
|
+
@id == target
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/lib/client.rb
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
module TeamSpeak3
|
2
|
+
class Client
|
3
|
+
attr_reader :virtual_server
|
4
|
+
|
5
|
+
attr_reader :client_id
|
6
|
+
attr_reader :client_database_id
|
7
|
+
attr_reader :channel_id
|
8
|
+
attr_reader :nickname
|
9
|
+
attr_reader :type_id
|
10
|
+
attr_reader :away_message
|
11
|
+
attr_reader :flags
|
12
|
+
attr_reader :talk_power
|
13
|
+
attr_reader :uid
|
14
|
+
attr_reader :version
|
15
|
+
attr_reader :platform
|
16
|
+
attr_reader :servergroups
|
17
|
+
attr_reader :channel_group_id
|
18
|
+
attr_reader :channel_group_inherited_channel_id
|
19
|
+
attr_reader :idle_time
|
20
|
+
attr_reader :created_at
|
21
|
+
attr_reader :last_connected
|
22
|
+
attr_reader :icon_id
|
23
|
+
attr_reader :country
|
24
|
+
|
25
|
+
def initialize(virtual_server, params)
|
26
|
+
@virtual_server = virtual_server
|
27
|
+
|
28
|
+
@client_id = params[:clid].to_i
|
29
|
+
@client_database_id = params[:client_database_id].to_i
|
30
|
+
@channel_id = params[:cid].to_i
|
31
|
+
@nickname = params[:client_nickname]
|
32
|
+
@type_id = params[:client_type].to_i
|
33
|
+
@away = params[:client_away].to_i == 1
|
34
|
+
@away_message = params[:client_away_message]
|
35
|
+
|
36
|
+
@flags = []
|
37
|
+
@flags << :talking if params[:client_flag_talking].to_i == 1
|
38
|
+
|
39
|
+
@input_muted = true if params[:client_input_muted].to_i == 1
|
40
|
+
@output_muted = true if params[:client_output_muted].to_i == 1
|
41
|
+
|
42
|
+
@input_hardware = true if params[:client_input_hardware].to_i == 1
|
43
|
+
@output_hardware = true if params[:client_output_hardware].to_i == 1
|
44
|
+
|
45
|
+
@talk_power = params[:client_talk_power].to_i
|
46
|
+
@talker = params[:client_is_talker].to_i == 1
|
47
|
+
@priority_speaker = params[:client_is_priority_speaker].to_i == 1
|
48
|
+
@recording = params[:client_is_recording].to_i == 1
|
49
|
+
|
50
|
+
@channel_commander = params[:client_is_channel_commander].to_i == 1
|
51
|
+
|
52
|
+
@uid = params[:client_unique_identifier]
|
53
|
+
@version = params[:client_version]
|
54
|
+
@platform = params[:client_platform]
|
55
|
+
@servergroups = params[:client_servergroups].split(',').map {|group| group.to_i}
|
56
|
+
@channel_group_id = params[:client_channel_group_id].to_i
|
57
|
+
@channel_group_inherited_channel_id = params[:client_channel_group_inherited_channel_id].to_i
|
58
|
+
|
59
|
+
@idle_time = Time.now - params[:client_idle_time].to_i
|
60
|
+
@created_at = Time.at(params[:client_created].to_i)
|
61
|
+
@last_connected = Time.at(params[:client_lastconnected].to_i)
|
62
|
+
|
63
|
+
@icon_id = params[:client_icon_id].to_i
|
64
|
+
|
65
|
+
@country = params[:client_country]
|
66
|
+
end
|
67
|
+
|
68
|
+
def away?
|
69
|
+
@away
|
70
|
+
end
|
71
|
+
|
72
|
+
def channel_commander?
|
73
|
+
@channel_commander
|
74
|
+
end
|
75
|
+
|
76
|
+
def flag?(flag)
|
77
|
+
@flags.include?(flag)
|
78
|
+
end
|
79
|
+
|
80
|
+
def input_hardware?
|
81
|
+
@input_hardware
|
82
|
+
end
|
83
|
+
|
84
|
+
def input_muted?
|
85
|
+
@input_muted
|
86
|
+
end
|
87
|
+
|
88
|
+
def kick_from_server!(reason = nil)
|
89
|
+
virtual_server.server.kick_client!(client_id, :server, reason)
|
90
|
+
true
|
91
|
+
end
|
92
|
+
|
93
|
+
def kick_from_channel!(reason = nil)
|
94
|
+
virtual_server.server.kick_client!(client_id, :channel, reason)
|
95
|
+
true
|
96
|
+
end
|
97
|
+
|
98
|
+
def output_hardware?
|
99
|
+
@output_hardware
|
100
|
+
end
|
101
|
+
|
102
|
+
def output_muted?
|
103
|
+
@output_muted
|
104
|
+
end
|
105
|
+
|
106
|
+
def priority_speaker?
|
107
|
+
@priority_speaker
|
108
|
+
end
|
109
|
+
|
110
|
+
def recording?
|
111
|
+
@recording
|
112
|
+
end
|
113
|
+
|
114
|
+
def talker?
|
115
|
+
@talker
|
116
|
+
end
|
117
|
+
|
118
|
+
def talking?
|
119
|
+
flag?(:talking)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module TeamSpeak3
|
2
|
+
module CommandParameter
|
3
|
+
def self.encode(value)
|
4
|
+
return unless value
|
5
|
+
|
6
|
+
value.gsub!("\\", "\\\\")
|
7
|
+
value.gsub!("/", "\/")
|
8
|
+
value.gsub!(" ", "\\s")
|
9
|
+
value.gsub!("|", "\\p")
|
10
|
+
value.gsub!("\a", "\\a")
|
11
|
+
value.gsub!("\b", "\\b")
|
12
|
+
value.gsub!("\f", "\\f")
|
13
|
+
value.gsub!("\n", "\\n")
|
14
|
+
value.gsub!("\r", "\\r")
|
15
|
+
value.gsub!("\t", "\\t")
|
16
|
+
value.gsub!("\v", "\\v")
|
17
|
+
value
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.decode(value)
|
21
|
+
return unless value
|
22
|
+
|
23
|
+
value.gsub!("\\\\", "\\")
|
24
|
+
value.gsub!("\/", "/")
|
25
|
+
value.gsub!("\\s", " ")
|
26
|
+
value.gsub!("\\p", "|")
|
27
|
+
value.gsub!("\\a", "\a")
|
28
|
+
value.gsub!("\\b", "\b")
|
29
|
+
value.gsub!("\\f", "\f")
|
30
|
+
value.gsub!("\\n", "\n")
|
31
|
+
value.gsub!("\\r", "\r")
|
32
|
+
value.gsub!("\\t", "\t")
|
33
|
+
value.gsub!("\\v", "\v")
|
34
|
+
value
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/exceptions.rb
CHANGED
@@ -3,6 +3,9 @@ require_relative 'exceptions/standard_exception.rb'
|
|
3
3
|
|
4
4
|
# alphabetical order of exceptions
|
5
5
|
require_relative 'exceptions/command_execution_failed.rb'
|
6
|
+
require_relative 'exceptions/invalid_kick_action.rb'
|
7
|
+
require_relative 'exceptions/invalid_target.rb'
|
8
|
+
require_relative 'exceptions/invalid_target_type.rb'
|
6
9
|
require_relative 'exceptions/not_connected.rb'
|
7
10
|
require_relative 'exceptions/query_login_failed.rb'
|
8
11
|
require_relative 'exceptions/server_connection_failed.rb'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module TeamSpeak3
|
2
|
+
module Exceptions
|
3
|
+
class InvalidTargetType < TeamSpeak3::Exceptions::StandardException
|
4
|
+
attr_reader :target_type
|
5
|
+
|
6
|
+
def initialize(target_type)
|
7
|
+
@target_type = target_type
|
8
|
+
@message = "Invalid target type '#{target_type}'."
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -1,6 +1,9 @@
|
|
1
1
|
module TeamSpeak3
|
2
2
|
module Exceptions
|
3
3
|
class ServerConnectionFailed < TeamSpeak3::Exceptions::StandardException
|
4
|
+
attr_reader :ip_address
|
5
|
+
attr_reader :query_port
|
6
|
+
|
4
7
|
def initialize(ip_address, query_port, message)
|
5
8
|
@ip_address = ip_address
|
6
9
|
@query_port = query_port
|
data/lib/server.rb
CHANGED
@@ -3,6 +3,7 @@ module TeamSpeak3
|
|
3
3
|
attr_reader :ip_address
|
4
4
|
attr_reader :query_port
|
5
5
|
attr_reader :socket
|
6
|
+
attr_reader :active_server
|
6
7
|
|
7
8
|
def initialize(ip_address, query_port, opts = {})
|
8
9
|
@ip_address = ip_address
|
@@ -43,10 +44,73 @@ module TeamSpeak3
|
|
43
44
|
true
|
44
45
|
end
|
45
46
|
|
46
|
-
|
47
|
+
def select_server(virtual_server_id)
|
48
|
+
execute "use sid=#{virtual_server_id}"
|
49
|
+
@active_server = virtual_server_id
|
50
|
+
end
|
47
51
|
|
48
|
-
def
|
49
|
-
|
52
|
+
def virtual_servers
|
53
|
+
server_list = []
|
54
|
+
|
55
|
+
servers = execute "serverlist -uid -all"
|
56
|
+
servers[:data].each do |server|
|
57
|
+
server_list << TeamSpeak3::VirtualServer.new(self, server)
|
58
|
+
end
|
59
|
+
|
60
|
+
server_list
|
61
|
+
end
|
62
|
+
|
63
|
+
def kick_client!(client_id, action, reason = nil)
|
64
|
+
# set correct kick action
|
65
|
+
action_id = nil
|
66
|
+
action_id = 4 if action == :channel
|
67
|
+
action_id = 5 if action == :server
|
68
|
+
|
69
|
+
raise TeamSpeak3::Exceptions::InvalidKickAction.new(action) unless action_id
|
70
|
+
|
71
|
+
# handle multiple client ids
|
72
|
+
client_ids = ""
|
73
|
+
if client_id.is_a?(Integer)
|
74
|
+
client_ids = "clid=#{client_id}"
|
75
|
+
elsif client_id.is_a?(Array)
|
76
|
+
client_id.each { |id| client_ids += "clid=#{id}|" }
|
77
|
+
client_ids = client_ids[0..-2]
|
78
|
+
end
|
79
|
+
|
80
|
+
# execute command
|
81
|
+
command = "clientkick #{client_ids} reasonid=#{action_id}"
|
82
|
+
command += " reasonmsg=#{TeamSpeak3::CommandParameter.encode(reason)}" if reason
|
83
|
+
execute command
|
84
|
+
end
|
85
|
+
|
86
|
+
def send_message_to(target, message, target_type = :auto)
|
87
|
+
if target_type == :auto
|
88
|
+
if target.is_a?(TeamSpeak3::VirtualServer)
|
89
|
+
target_id = target.id
|
90
|
+
target_type_id = 3
|
91
|
+
|
92
|
+
select_server target.id
|
93
|
+
elsif target.is_a?(TeamSpeak3::Channel)
|
94
|
+
target_id = target.id
|
95
|
+
target_type_id = 2
|
96
|
+
|
97
|
+
select_server target.virtual_server.id
|
98
|
+
else
|
99
|
+
raise TeamSpeak3::Exceptions::InvalidTarget.new(target)
|
100
|
+
end
|
101
|
+
else
|
102
|
+
target_id = target
|
103
|
+
|
104
|
+
target_type_id = 3 if target_type.to_sym == :server
|
105
|
+
target_type_id = 2 if target_type.to_sym == :channel
|
106
|
+
target_type_id = 1 if target_type.to_sym == :client
|
107
|
+
|
108
|
+
raise TeamSpeak3::Exceptions::InvalidTargetType.new(target_type) unless target_type_id
|
109
|
+
end
|
110
|
+
|
111
|
+
execute "sendtextmessage target=#{target_id} targetmode=#{target_type_id} " \
|
112
|
+
"msg=#{TeamSpeak3::CommandParameter.encode(message)}"
|
113
|
+
true
|
50
114
|
end
|
51
115
|
|
52
116
|
def execute(command)
|
@@ -66,5 +130,11 @@ module TeamSpeak3
|
|
66
130
|
|
67
131
|
response
|
68
132
|
end
|
133
|
+
|
134
|
+
private
|
135
|
+
|
136
|
+
def verify_connection
|
137
|
+
raise TeamSpeak3::Exceptions::NotConnected, 'Not connected to a TeamSpeak 3 server.' unless @socket
|
138
|
+
end
|
69
139
|
end
|
70
140
|
end
|
data/lib/server_response.rb
CHANGED
@@ -37,7 +37,7 @@ module TeamSpeak3
|
|
37
37
|
value = nil
|
38
38
|
end
|
39
39
|
|
40
|
-
result[key.to_sym] =
|
40
|
+
result[key.to_sym] = TeamSpeak3::CommandParameter.decode(value)
|
41
41
|
end
|
42
42
|
|
43
43
|
return result if opts[:ignore_array_result]
|
@@ -47,23 +47,6 @@ module TeamSpeak3
|
|
47
47
|
result_list
|
48
48
|
end
|
49
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
50
|
def split_data_from_errors(response)
|
68
51
|
data, errors = response.split("\n")
|
69
52
|
|
data/lib/teamspeak3.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
require 'net/telnet'
|
2
2
|
|
3
|
+
# exceptions shall be required first
|
3
4
|
require_relative 'exceptions.rb'
|
5
|
+
|
6
|
+
# library classes ordered alphabetically
|
7
|
+
require_relative 'channel.rb'
|
8
|
+
require_relative 'client.rb'
|
9
|
+
require_relative 'command_parameter.rb'
|
10
|
+
require_relative 'virtual_server.rb'
|
4
11
|
require_relative 'server_response.rb'
|
5
12
|
require_relative 'server.rb'
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module TeamSpeak3
|
2
|
+
class VirtualServer
|
3
|
+
attr_reader :server
|
4
|
+
|
5
|
+
attr_reader :id
|
6
|
+
attr_reader :name
|
7
|
+
attr_reader :port
|
8
|
+
attr_reader :status
|
9
|
+
attr_reader :clients_online
|
10
|
+
attr_reader :query_clients_online
|
11
|
+
attr_reader :slots
|
12
|
+
attr_reader :uptime
|
13
|
+
attr_reader :autostart
|
14
|
+
attr_reader :uid
|
15
|
+
|
16
|
+
def initialize(server, params)
|
17
|
+
@server = server
|
18
|
+
|
19
|
+
@id = params[:virtualserver_id].to_i
|
20
|
+
@name = params[:virtualserver_name]
|
21
|
+
@port = params[:virtualserver_port].to_i
|
22
|
+
@status = params[:virtualserver_status].to_sym
|
23
|
+
@clients_online = params[:virtualserver_clientsonline].to_i
|
24
|
+
@query_clients_online = params[:virtualserver_queryclientsonline].to_i
|
25
|
+
@slots = params[:virtualserver_maxclients].to_i
|
26
|
+
@uptime = Time.now - params[:virtualserver_uptime].to_i
|
27
|
+
@autostart = params[:virtualserver_uptime].to_i == 1
|
28
|
+
@uid = params[:virtualserver_unique_identifier]
|
29
|
+
end
|
30
|
+
|
31
|
+
def channels
|
32
|
+
check_active_server
|
33
|
+
|
34
|
+
channels_list = []
|
35
|
+
channels = @server.execute "channellist -topic -flags -voice -limits -icon"
|
36
|
+
|
37
|
+
channels[:data].each do |channel|
|
38
|
+
channels_list << TeamSpeak3::Channel.new(self, channel)
|
39
|
+
end
|
40
|
+
|
41
|
+
channels_list
|
42
|
+
end
|
43
|
+
|
44
|
+
def clients
|
45
|
+
check_active_server
|
46
|
+
|
47
|
+
clients_list = []
|
48
|
+
clients = @server.execute "clientlist -uid -away -voice -times -groups -info -icon -country"
|
49
|
+
|
50
|
+
clients[:data].each do |client|
|
51
|
+
clients_list << TeamSpeak3::Client.new(self, client)
|
52
|
+
end
|
53
|
+
|
54
|
+
clients_list
|
55
|
+
end
|
56
|
+
|
57
|
+
def send_message(message)
|
58
|
+
server.send_message_to(self, message)
|
59
|
+
end
|
60
|
+
|
61
|
+
def ==(target)
|
62
|
+
@id == target
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def check_active_server
|
68
|
+
if @server.active_server != @id
|
69
|
+
@server.select_server(@id)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teamspeak3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Manuel Schnitzer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: An OOP library to query and manage TeamSpeak 3 servers in Ruby.
|
14
14
|
email: webmaster@mschnitzer.de
|
@@ -16,8 +16,14 @@ executables: []
|
|
16
16
|
extensions: []
|
17
17
|
extra_rdoc_files: []
|
18
18
|
files:
|
19
|
+
- lib/channel.rb
|
20
|
+
- lib/client.rb
|
21
|
+
- lib/command_parameter.rb
|
19
22
|
- lib/exceptions.rb
|
20
23
|
- lib/exceptions/command_execution_failed.rb
|
24
|
+
- lib/exceptions/invalid_kick_action.rb
|
25
|
+
- lib/exceptions/invalid_target.rb
|
26
|
+
- lib/exceptions/invalid_target_type.rb
|
21
27
|
- lib/exceptions/not_connected.rb
|
22
28
|
- lib/exceptions/query_login_failed.rb
|
23
29
|
- lib/exceptions/server_connection_failed.rb
|
@@ -25,6 +31,7 @@ files:
|
|
25
31
|
- lib/server.rb
|
26
32
|
- lib/server_response.rb
|
27
33
|
- lib/teamspeak3.rb
|
34
|
+
- lib/virtual_server.rb
|
28
35
|
homepage: https://github.com/mschnitzer/teamspeak3
|
29
36
|
licenses:
|
30
37
|
- MIT
|