ts3-control-mac 1.1.2__tar.gz
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.
- ts3_control_mac-1.1.2/PKG-INFO +47 -0
- ts3_control_mac-1.1.2/README.md +36 -0
- ts3_control_mac-1.1.2/pyproject.toml +21 -0
- ts3_control_mac-1.1.2/setup.cfg +4 -0
- ts3_control_mac-1.1.2/ts3_control_mac/__init__.py +3 -0
- ts3_control_mac-1.1.2/ts3_control_mac/client.py +97 -0
- ts3_control_mac-1.1.2/ts3_control_mac.egg-info/PKG-INFO +47 -0
- ts3_control_mac-1.1.2/ts3_control_mac.egg-info/SOURCES.txt +8 -0
- ts3_control_mac-1.1.2/ts3_control_mac.egg-info/dependency_links.txt +1 -0
- ts3_control_mac-1.1.2/ts3_control_mac.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ts3_control_mac
|
|
3
|
+
Version: 1.1.2
|
|
4
|
+
Summary: Python Library for control TS3
|
|
5
|
+
Author-email: TimoNiki <timonikivopros.team@gmail.com>
|
|
6
|
+
Classifier: Programming Language :: Python :: 3
|
|
7
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
8
|
+
Classifier: Operating System :: MacOS
|
|
9
|
+
Requires-Python: >=3.7
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
|
|
12
|
+
# my_ts3_control
|
|
13
|
+
|
|
14
|
+
Python-библиотека для управления клиентом TeamSpeak 3 и создания автоответчиков/ботов.
|
|
15
|
+
|
|
16
|
+
## Установка плагина
|
|
17
|
+
Перед использованием установите официальный пакет плагина `my_plugin.ts3_plugin` в ваш TeamSpeak 3 Client.
|
|
18
|
+
|
|
19
|
+
## Пример использования (Бот-автоответчик)
|
|
20
|
+
|
|
21
|
+
```python
|
|
22
|
+
import time
|
|
23
|
+
from my_ts3_control import TS3Controller
|
|
24
|
+
|
|
25
|
+
def main():
|
|
26
|
+
ts3 = TS3Controller()
|
|
27
|
+
|
|
28
|
+
# Создаем логику для обработки входящих ЛС
|
|
29
|
+
def handle_messages(sch_id, from_id, from_name, message):
|
|
30
|
+
print(f"Новое ЛС от {from_name}: {message}")
|
|
31
|
+
if message.lower() == "привет":
|
|
32
|
+
ts3.send_private_message(sch_id, from_id, "Привет! Я твой Python бот.")
|
|
33
|
+
|
|
34
|
+
# Регистрируем обработчик и подключаемся
|
|
35
|
+
ts3.on_pm_callback = handle_messages
|
|
36
|
+
ts3.connect()
|
|
37
|
+
|
|
38
|
+
print("Бот успешно запущен...")
|
|
39
|
+
try:
|
|
40
|
+
while True:
|
|
41
|
+
time.sleep(1)
|
|
42
|
+
except KeyboardInterrupt:
|
|
43
|
+
ts3.close()
|
|
44
|
+
|
|
45
|
+
if __name__ == "__main__":
|
|
46
|
+
main()
|
|
47
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# my_ts3_control
|
|
2
|
+
|
|
3
|
+
Python-библиотека для управления клиентом TeamSpeak 3 и создания автоответчиков/ботов.
|
|
4
|
+
|
|
5
|
+
## Установка плагина
|
|
6
|
+
Перед использованием установите официальный пакет плагина `my_plugin.ts3_plugin` в ваш TeamSpeak 3 Client.
|
|
7
|
+
|
|
8
|
+
## Пример использования (Бот-автоответчик)
|
|
9
|
+
|
|
10
|
+
```python
|
|
11
|
+
import time
|
|
12
|
+
from my_ts3_control import TS3Controller
|
|
13
|
+
|
|
14
|
+
def main():
|
|
15
|
+
ts3 = TS3Controller()
|
|
16
|
+
|
|
17
|
+
# Создаем логику для обработки входящих ЛС
|
|
18
|
+
def handle_messages(sch_id, from_id, from_name, message):
|
|
19
|
+
print(f"Новое ЛС от {from_name}: {message}")
|
|
20
|
+
if message.lower() == "привет":
|
|
21
|
+
ts3.send_private_message(sch_id, from_id, "Привет! Я твой Python бот.")
|
|
22
|
+
|
|
23
|
+
# Регистрируем обработчик и подключаемся
|
|
24
|
+
ts3.on_pm_callback = handle_messages
|
|
25
|
+
ts3.connect()
|
|
26
|
+
|
|
27
|
+
print("Бот успешно запущен...")
|
|
28
|
+
try:
|
|
29
|
+
while True:
|
|
30
|
+
time.sleep(1)
|
|
31
|
+
except KeyboardInterrupt:
|
|
32
|
+
ts3.close()
|
|
33
|
+
|
|
34
|
+
if __name__ == "__main__":
|
|
35
|
+
main()
|
|
36
|
+
```
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[tool.setuptools]
|
|
6
|
+
packages = ["ts3_control_mac"]
|
|
7
|
+
|
|
8
|
+
[project]
|
|
9
|
+
name = "ts3_control_mac"
|
|
10
|
+
version = "1.1.2"
|
|
11
|
+
authors = [
|
|
12
|
+
{ name="TimoNiki", email="timonikivopros.team@gmail.com" },
|
|
13
|
+
]
|
|
14
|
+
description = "Python Library for control TS3"
|
|
15
|
+
readme = "README.md"
|
|
16
|
+
requires-python = ">=3.7"
|
|
17
|
+
classifiers = [
|
|
18
|
+
"Programming Language :: Python :: 3",
|
|
19
|
+
"License :: OSI Approved :: MIT License",
|
|
20
|
+
"Operating System :: MacOS",
|
|
21
|
+
]
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import socket
|
|
2
|
+
import threading
|
|
3
|
+
from typing import Callable, Optional
|
|
4
|
+
|
|
5
|
+
class TS3Controller:
|
|
6
|
+
"""Класс для управления TeamSpeak 3 на macOS/Windows через TCP-плагин."""
|
|
7
|
+
|
|
8
|
+
def __init__(self, host: str = "127.0.0.1", port: int = 12345):
|
|
9
|
+
self.host = host
|
|
10
|
+
self.port = port
|
|
11
|
+
self.socket: Optional[socket.socket] = None
|
|
12
|
+
self._listener_thread: Optional[threading.Thread] = None
|
|
13
|
+
self._is_running = False
|
|
14
|
+
|
|
15
|
+
# Сюда пользователь будет передавать функцию-обработчик входящих ЛС
|
|
16
|
+
self.on_pm_callback: Optional[Callable[[int, int, str, str], None]] = None
|
|
17
|
+
|
|
18
|
+
def connect(self) -> None:
|
|
19
|
+
"""Устанавливает двустороннее соединение с плагином TeamSpeak 3."""
|
|
20
|
+
try:
|
|
21
|
+
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
22
|
+
self.socket.connect((self.host, self.port))
|
|
23
|
+
self._is_running = True
|
|
24
|
+
|
|
25
|
+
# Запускаем фоновый поток, который слушает события от TeamSpeak
|
|
26
|
+
self._listener_thread = threading.Thread(target=self._listen_loop, daemon=True)
|
|
27
|
+
self._listener_thread.start()
|
|
28
|
+
except ConnectionRefusedError:
|
|
29
|
+
self.socket = None
|
|
30
|
+
raise ConnectionRefusedError(
|
|
31
|
+
f"Не удалось подключиться к TeamSpeak 3 на {self.host}:{self.port}. "
|
|
32
|
+
"Убедитесь, что TeamSpeak запущен и плагин активен."
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
def _listen_loop(self) -> None:
|
|
36
|
+
"""Фоновый метод чтения данных из сокета плагина."""
|
|
37
|
+
buffer = ""
|
|
38
|
+
while self._is_running and self.socket:
|
|
39
|
+
try:
|
|
40
|
+
data = self.socket.recv(4096).decode("utf-8")
|
|
41
|
+
if not data:
|
|
42
|
+
break
|
|
43
|
+
buffer += data
|
|
44
|
+
while "\n" in buffer:
|
|
45
|
+
line, buffer = buffer.split("\n", 1)
|
|
46
|
+
if line.startswith("NEW_PM"):
|
|
47
|
+
# Разбираем строку: NEW_PM schID fromID fromName текст
|
|
48
|
+
parts = line.split(" ", 4)
|
|
49
|
+
if len(parts) >= 5 and self.on_pm_callback:
|
|
50
|
+
sch_id = int(parts[1])
|
|
51
|
+
from_id = int(parts[2])
|
|
52
|
+
from_name = parts[3]
|
|
53
|
+
msg_text = parts[4]
|
|
54
|
+
# Вызываем пользовательскую функцию
|
|
55
|
+
self.on_pm_callback(sch_id, from_id, from_name, msg_text)
|
|
56
|
+
except socket.error:
|
|
57
|
+
break
|
|
58
|
+
self._is_running = False
|
|
59
|
+
|
|
60
|
+
def _send(self, command: str) -> None:
|
|
61
|
+
if not self.socket:
|
|
62
|
+
raise RuntimeError("Соединение не установлено. Сначала вызовите метод connect().")
|
|
63
|
+
try:
|
|
64
|
+
self.socket.sendall(f"{command}\n".encode("utf-8"))
|
|
65
|
+
except socket.error as e:
|
|
66
|
+
self.socket = None
|
|
67
|
+
raise BrokenPipeError("Соединение с TeamSpeak 3 было разорвано.") from e
|
|
68
|
+
|
|
69
|
+
def mute_self(self) -> None:
|
|
70
|
+
"""Выключить микрофон в TeamSpeak 3."""
|
|
71
|
+
self._send("MUTE")
|
|
72
|
+
|
|
73
|
+
def unmute_self(self) -> None:
|
|
74
|
+
"""Включить микрофон в TeamSpeak 3."""
|
|
75
|
+
self._send("UNMUTE")
|
|
76
|
+
|
|
77
|
+
def connect_to_server(self, address: str, password: str = "", label: str = "Python Server") -> None:
|
|
78
|
+
"""Подключиться к новому серверу (откроется новая вкладка в TS3)."""
|
|
79
|
+
pass_str = password if password else "nopassword"
|
|
80
|
+
# Заменяем пробелы в названии вкладки на нижнее подчеркивание, чтобы не ломать парсер в C++
|
|
81
|
+
label_str = label.replace(" ", "_")
|
|
82
|
+
self._send(f"CONNECT {address} {pass_str} {label_str}")
|
|
83
|
+
|
|
84
|
+
def disconnect_all(self) -> None:
|
|
85
|
+
"""Отключиться от всех активных серверов."""
|
|
86
|
+
self._send("DISCONNECT_ALL")
|
|
87
|
+
|
|
88
|
+
def send_private_message(self, sch_id: int, target_client_id: int, message: str) -> None:
|
|
89
|
+
"""Отправить личное сообщение пользователю по его ID сессии и ID клиента."""
|
|
90
|
+
self._send(f"SEND_PM {sch_id} {target_client_id} {message}")
|
|
91
|
+
|
|
92
|
+
def close(self) -> None:
|
|
93
|
+
"""Закрыть сетевое соединение."""
|
|
94
|
+
self._is_running = False
|
|
95
|
+
if self.socket:
|
|
96
|
+
self.socket.close()
|
|
97
|
+
self.socket = None
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ts3_control_mac
|
|
3
|
+
Version: 1.1.2
|
|
4
|
+
Summary: Python Library for control TS3
|
|
5
|
+
Author-email: TimoNiki <timonikivopros.team@gmail.com>
|
|
6
|
+
Classifier: Programming Language :: Python :: 3
|
|
7
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
8
|
+
Classifier: Operating System :: MacOS
|
|
9
|
+
Requires-Python: >=3.7
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
|
|
12
|
+
# my_ts3_control
|
|
13
|
+
|
|
14
|
+
Python-библиотека для управления клиентом TeamSpeak 3 и создания автоответчиков/ботов.
|
|
15
|
+
|
|
16
|
+
## Установка плагина
|
|
17
|
+
Перед использованием установите официальный пакет плагина `my_plugin.ts3_plugin` в ваш TeamSpeak 3 Client.
|
|
18
|
+
|
|
19
|
+
## Пример использования (Бот-автоответчик)
|
|
20
|
+
|
|
21
|
+
```python
|
|
22
|
+
import time
|
|
23
|
+
from my_ts3_control import TS3Controller
|
|
24
|
+
|
|
25
|
+
def main():
|
|
26
|
+
ts3 = TS3Controller()
|
|
27
|
+
|
|
28
|
+
# Создаем логику для обработки входящих ЛС
|
|
29
|
+
def handle_messages(sch_id, from_id, from_name, message):
|
|
30
|
+
print(f"Новое ЛС от {from_name}: {message}")
|
|
31
|
+
if message.lower() == "привет":
|
|
32
|
+
ts3.send_private_message(sch_id, from_id, "Привет! Я твой Python бот.")
|
|
33
|
+
|
|
34
|
+
# Регистрируем обработчик и подключаемся
|
|
35
|
+
ts3.on_pm_callback = handle_messages
|
|
36
|
+
ts3.connect()
|
|
37
|
+
|
|
38
|
+
print("Бот успешно запущен...")
|
|
39
|
+
try:
|
|
40
|
+
while True:
|
|
41
|
+
time.sleep(1)
|
|
42
|
+
except KeyboardInterrupt:
|
|
43
|
+
ts3.close()
|
|
44
|
+
|
|
45
|
+
if __name__ == "__main__":
|
|
46
|
+
main()
|
|
47
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ts3_control_mac
|