Skip to content

Commit 02c5468

Browse files
committed
Upload Module
1 parent d468fae commit 02c5468

File tree

4 files changed

+136
-0
lines changed

4 files changed

+136
-0
lines changed

README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Installation
2+
```cmd
3+
pip install ...
4+
```
5+
6+
# Example
7+
- `main.py`
8+
```python
9+
import pydustry
10+
11+
pydustry.Server("easyplay.su").get_status()
12+
```
13+
14+
- `Return`
15+
```python
16+
Status(name='[#3bffff][*] []EasyPlay Gaming + [#3dffcb]Rating-System', map='EasyPlay.HUB', players=56, wave=1, version=126, vertype='official', ping=35)
17+
```

pydustry/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from .pydustry import Server, Status
2+
3+
__name__ = 'pydustry.py'
4+
__version__ = '2.0-release'
5+
__keywords__ = ['pydustry.py']

pydustry/pydustry.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
from socket import socket, create_connection, AF_INET, SOCK_DGRAM
2+
from struct import unpack
3+
from time import time
4+
from dataclasses import dataclass
5+
from typing import Tuple
6+
7+
# * Dataclass
8+
@dataclass
9+
class Status:
10+
name: str
11+
map: str
12+
players: int
13+
wave: int
14+
version: float
15+
vertype: str
16+
ping: float
17+
18+
# * Главный класс
19+
class Server:
20+
def __init__(
21+
self,
22+
server_host: str,
23+
server_port: int=6567,
24+
input_port: int=6859
25+
) -> None:
26+
self.server: Tuple[str, int] = (server_host, server_port)
27+
self.input_server: Tuple[str, int] = (server_host, input_port)
28+
29+
def get_status(self, timeout: float=10.0) -> Status:
30+
# * Инициализация сервера
31+
s = socket(AF_INET, SOCK_DGRAM)
32+
s.connect(self.server)
33+
s.settimeout(timeout)
34+
35+
# * Создание и так понятно чего для чего
36+
info = {}
37+
38+
# * Получение данных и замер
39+
s_time = time()
40+
s.send(b"\xfe\x01")
41+
data = s.recv(1024)
42+
e_time = time()
43+
44+
# * Парсинг
45+
info["name"] = data[1:data[0]+1].decode("utf-8")
46+
data = data[data[0]+1:]
47+
info["map"] = data[1:data[0]+1].decode("utf-8")
48+
data = data[data[0]+1:]
49+
info["players"] = unpack(">i", data[:4])[0]
50+
data = data[4:]
51+
info["wave"] = unpack(">i", data[:4])[0]
52+
data = data[4:]
53+
info["version"] = unpack(">i", data[:4])[0]
54+
data = data[4:]
55+
info["vertype"] = data[1:data[0]+1].decode("utf-8")
56+
info["ping"] = round((e_time - s_time) * 1000)
57+
58+
return Status(**info)
59+
60+
def send_command(self, command: str) -> None:
61+
s = create_connection(self.input_server)
62+
s.sendall(
63+
bytes(
64+
command.encode(errors="ignore")
65+
)
66+
)
67+
s.close()
68+
69+
def ping(self, timeout: float=10.0) -> int:
70+
# * Инициализация сервера
71+
s = socket(AF_INET, SOCK_DGRAM)
72+
s.connect(self.server)
73+
s.settimeout(timeout)
74+
75+
# * Получение данных и замер
76+
s_time = time()
77+
s.send(b"\xfe\x01")
78+
s.recv(1024)
79+
e_time = time()
80+
81+
return round((e_time - s_time) * 1000)

setup.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import os
2+
import setuptools
3+
import pydustry
4+
5+
# Функция получения полных путей к папкам и подпапкам
6+
def globalizer(dirpath: str) -> list:
7+
files = []
8+
folder_abspath = os.path.abspath(dirpath)
9+
if os.path.isdir(folder_abspath):
10+
for i in os.listdir(folder_abspath):
11+
path = folder_abspath + os.sep + i
12+
if os.path.isdir(path):
13+
for _i in globalizer(path):
14+
files.append(_i)
15+
elif os.path.isfile(path):
16+
files.append(path)
17+
elif os.path.isfile(folder_abspath):
18+
files.append(folder_abspath)
19+
return files
20+
21+
setuptools.setup(
22+
name=pydustry.__name__,
23+
version=pydustry.__version__,
24+
description='Module for server information in the game Mindustry.',
25+
keywords=pydustry.__keywords__,
26+
packages=setuptools.find_packages(),
27+
author_email='semina054@gmail.com',
28+
url="https://github.com/romanin-rf",
29+
long_description=open(os.path.join(os.path.dirname(__file__), 'README.md')).read(),
30+
long_description_content_type="text/markdown",
31+
author='ProgrammerFromParlament',
32+
license='MIT'
33+
)

0 commit comments

Comments
 (0)