ts3clientcontrol 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.
@@ -0,0 +1,47 @@
1
+ Metadata-Version: 2.4
2
+ Name: ts3clientcontrol
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,3 @@
1
+ from .client import TS3Controller
2
+
3
+ __all__ = ["TS3Controller"]
@@ -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,21 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [tool.setuptools]
6
+ packages = ["TS3ClientControl"]
7
+
8
+ [project]
9
+ name = "ts3clientcontrol"
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,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,47 @@
1
+ Metadata-Version: 2.4
2
+ Name: ts3clientcontrol
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,8 @@
1
+ README.md
2
+ pyproject.toml
3
+ TS3ClientControl/__init__.py
4
+ TS3ClientControl/client.py
5
+ ts3clientcontrol.egg-info/PKG-INFO
6
+ ts3clientcontrol.egg-info/SOURCES.txt
7
+ ts3clientcontrol.egg-info/dependency_links.txt
8
+ ts3clientcontrol.egg-info/top_level.txt
@@ -0,0 +1 @@
1
+ TS3ClientControl