teamspeak3 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|