hungerlib 3.0.dev15__tar.gz → 3.0.dev18__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.
Files changed (34) hide show
  1. {hungerlib-3.0.dev15/src/hungerlib.egg-info → hungerlib-3.0.dev18}/PKG-INFO +1 -1
  2. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/pyproject.toml +1 -1
  3. hungerlib-3.0.dev18/src/hungerlib/__init__.py +24 -0
  4. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib/api/backups.py +2 -10
  5. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib/api/command.py +0 -6
  6. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib/api/databases.py +2 -10
  7. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib/api/filemanager.py +2 -10
  8. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib/api/schedule.py +1 -9
  9. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib/api/startup.py +0 -4
  10. {hungerlib-3.0.dev15/src/hungerlib/addons → hungerlib-3.0.dev18/src/hungerlib}/configloader.py +3 -0
  11. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib/datamap.py +10 -0
  12. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib/messagerouter.py +5 -1
  13. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib/panel.py +5 -6
  14. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib/servers/generic.py +2 -2
  15. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib/servers/minecraft.py +3 -4
  16. hungerlib-3.0.dev18/src/hungerlib/utils/__init__.py +18 -0
  17. hungerlib-3.0.dev15/src/hungerlib/addons/scheduler.py → hungerlib-3.0.dev18/src/hungerlib/utils/time.py +0 -35
  18. hungerlib-3.0.dev15/src/hungerlib/addons/snapshot.py → hungerlib-3.0.dev18/src/hungerlib/utils/utils.py +13 -1
  19. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18/src/hungerlib.egg-info}/PKG-INFO +1 -1
  20. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib.egg-info/SOURCES.txt +6 -9
  21. hungerlib-3.0.dev15/src/hungerlib/__init__.py +0 -37
  22. hungerlib-3.0.dev15/src/hungerlib/addons/__init__.py +0 -22
  23. hungerlib-3.0.dev15/src/hungerlib/addons/mchelpers.py +0 -107
  24. hungerlib-3.0.dev15/src/hungerlib/addons/utils.py +0 -26
  25. hungerlib-3.0.dev15/src/hungerlib/datamaps/__init__.py +0 -7
  26. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/LICENSE +0 -0
  27. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/README.md +0 -0
  28. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/setup.cfg +0 -0
  29. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib/api/__init__.py +0 -0
  30. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib/servers/__init__.py +0 -0
  31. {hungerlib-3.0.dev15/src/hungerlib/datamaps → hungerlib-3.0.dev18/src/hungerlib/utils}/colormaps.py +0 -0
  32. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib.egg-info/dependency_links.txt +0 -0
  33. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib.egg-info/requires.txt +0 -0
  34. {hungerlib-3.0.dev15 → hungerlib-3.0.dev18}/src/hungerlib.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hungerlib
3
- Version: 3.0.dev15
3
+ Version: 3.0.dev18
4
4
  Summary: Powerful automation library for Pterodactyl.
5
5
  Author: iFamished
6
6
  License: MIT
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
7
7
 
8
8
  [project]
9
9
  name = "hungerlib"
10
- version = "3.0.dev15"
10
+ version = "3.0.dev18"
11
11
  description = "Powerful automation library for Pterodactyl."
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.9"
@@ -0,0 +1,24 @@
1
+ from importlib.metadata import version as _pkg_version, PackageNotFoundError
2
+
3
+ # Package version
4
+ try:
5
+ __version__ = _pkg_version("hungerlib")
6
+ except PackageNotFoundError:
7
+ __version__ = "0.0.0"
8
+
9
+
10
+ from . import panel
11
+ from . import servers
12
+ from . import messagerouter
13
+ from . import datamap
14
+ from . import configloader
15
+ from . import utils
16
+
17
+ __all__ = [
18
+ "panel",
19
+ "servers",
20
+ "messagerouter",
21
+ "datamap",
22
+ "configloader",
23
+ "utils",
24
+ ]
@@ -1,8 +1,4 @@
1
1
  class BackupsAPI:
2
- """
3
- Raw backups endpoints.
4
- """
5
-
6
2
  def __init__(self, panel):
7
3
  self.panel = panel
8
4
 
@@ -16,11 +12,7 @@ class BackupsAPI:
16
12
  )
17
13
 
18
14
  def delete(self, server_id, backup_id):
19
- return self.panel.delete(
20
- f"/api/client/servers/{server_id}/backups/{backup_id}"
21
- )
15
+ return self.panel.delete(f"/api/client/servers/{server_id}/backups/{backup_id}")
22
16
 
23
17
  def download(self, server_id, backup_id):
24
- return self.panel.get(
25
- f"/api/client/servers/{server_id}/backups/{backup_id}/download"
26
- )
18
+ return self.panel.get(f"/api/client/servers/{server_id}/backups/{backup_id}/download")
@@ -1,10 +1,4 @@
1
- # src/hungerlib/api/command.py
2
-
3
1
  class CommandAPI:
4
- """
5
- Raw command endpoint.
6
- """
7
-
8
2
  def __init__(self, panel):
9
3
  self.panel = panel
10
4
 
@@ -1,8 +1,4 @@
1
1
  class DatabasesAPI:
2
- """
3
- Raw database endpoints.
4
- """
5
-
6
2
  def __init__(self, panel):
7
3
  self.panel = panel
8
4
 
@@ -19,11 +15,7 @@ class DatabasesAPI:
19
15
  )
20
16
 
21
17
  def rotate_password(self, server_id, db_id):
22
- return self.panel.post(
23
- f"/api/client/servers/{server_id}/databases/{db_id}/rotate-password"
24
- )
18
+ return self.panel.post(f"/api/client/servers/{server_id}/databases/{db_id}/rotate-password")
25
19
 
26
20
  def delete(self, server_id, db_id):
27
- return self.panel.delete(
28
- f"/api/client/servers/{server_id}/databases/{db_id}"
29
- )
21
+ return self.panel.delete(f"/api/client/servers/{server_id}/databases/{db_id}")
@@ -1,20 +1,12 @@
1
1
  class FileManagerAPI:
2
- """
3
- Raw file manager endpoints.
4
- """
5
-
6
2
  def __init__(self, panel):
7
3
  self.panel = panel
8
4
 
9
5
  def list(self, server_id, directory="/"):
10
- return self.panel.get(
11
- f"/api/client/servers/{server_id}/files/list?directory={directory}"
12
- )
6
+ return self.panel.get(f"/api/client/servers/{server_id}/files/list?directory={directory}")
13
7
 
14
8
  def download(self, server_id, file_path):
15
- return self.panel.get(
16
- f"/api/client/servers/{server_id}/files/download?file={file_path}"
17
- )
9
+ return self.panel.get(f"/api/client/servers/{server_id}/files/download?file={file_path}")
18
10
 
19
11
  def upload(self, server_id, directory, file_data):
20
12
  return self.panel._raw_upload(
@@ -1,9 +1,4 @@
1
1
  class ScheduleAPI:
2
- """
3
- Raw schedule endpoints.
4
- No logic. No models. No convenience.
5
- """
6
-
7
2
  def __init__(self, panel):
8
3
  self.panel = panel
9
4
 
@@ -14,7 +9,6 @@ class ScheduleAPI:
14
9
  return self.panel.post(f"/api/client/servers/{server_id}/schedules", json=payload)
15
10
 
16
11
  def update(self, server_id, schedule_id, payload):
17
- # Your panel uses POST for full updates
18
12
  return self.panel.post(
19
13
  f"/api/client/servers/{server_id}/schedules/{schedule_id}",
20
14
  json=payload
@@ -24,6 +18,4 @@ class ScheduleAPI:
24
18
  return self.panel.delete(f"/api/client/servers/{server_id}/schedules/{schedule_id}")
25
19
 
26
20
  def run(self, server_id, schedule_id):
27
- return self.panel.post(
28
- f"/api/client/servers/{server_id}/schedules/{schedule_id}/execute"
29
- )
21
+ return self.panel.post(f"/api/client/servers/{server_id}/schedules/{schedule_id}/execute")
@@ -1,8 +1,4 @@
1
1
  class StartupAPI:
2
- """
3
- Raw startup variable endpoints.
4
- """
5
-
6
2
  def __init__(self, panel):
7
3
  self.panel = panel
8
4
 
@@ -65,3 +65,6 @@ def loadConfig(path, default_path, schema):
65
65
  setattr(target, attr, value)
66
66
 
67
67
  return cfg
68
+
69
+
70
+ __all__ = ["loadConfig"]
@@ -64,3 +64,13 @@ def mapit(text: str, *maps, **runtime):
64
64
  return str(d.get(k, match.group(0)))
65
65
  text = re.sub(pattern, repl, text)
66
66
  return text
67
+
68
+
69
+ __all__ = [
70
+ "set_default_maps",
71
+ "get_default_maps",
72
+ "Syntax",
73
+ "DataMap",
74
+ "datamap",
75
+ "mapit",
76
+ ]
@@ -1,7 +1,7 @@
1
1
  import logging
2
2
  from pathlib import Path
3
3
  from datetime import datetime
4
- from hungerlib.datamaps import ASCII_COLOR_MAP, MC_COLOR_MAP
4
+ from hungerlib.utils.colormaps import ASCII_COLOR_MAP, MC_COLOR_MAP
5
5
  from hungerlib.datamap import DataMap, Syntax, mapit
6
6
 
7
7
 
@@ -145,3 +145,7 @@ class MessageRouter:
145
145
 
146
146
  def error(self, template, **fmt):
147
147
  self.say(self.error_prefix + template, level="error", **fmt)
148
+
149
+
150
+
151
+ __all__ = ["MessageRouter"]
@@ -1,11 +1,6 @@
1
1
  import requests
2
2
 
3
- from hungerlib.api import CommandAPI
4
- from hungerlib.api import ScheduleAPI
5
- from hungerlib.api import FileManagerAPI
6
- from hungerlib.api import BackupsAPI
7
- from hungerlib.api import DatabasesAPI
8
- from hungerlib.api import StartupAPI
3
+ from hungerlib.api import CommandAPI, ScheduleAPI, FileManagerAPI, BackupsAPI, DatabasesAPI, StartupAPI
9
4
 
10
5
 
11
6
  class Panel:
@@ -63,3 +58,7 @@ class Panel:
63
58
  def validateAPI(self):
64
59
  r = self.get("/api/client/account")
65
60
  return r.status_code == 200
61
+
62
+
63
+
64
+ __all__ = ["Panel"]
@@ -1,6 +1,6 @@
1
1
  # Universal server class
2
- from hungerlib import Panel
3
- from hungerlib.datamaps import MC_COLOR_MAP, ASCII_COLOR_MAP
2
+ from hungerlib.panel import Panel
3
+ from hungerlib.utils.colormaps import MC_COLOR_MAP, ASCII_COLOR_MAP
4
4
 
5
5
 
6
6
  class GenericServer:
@@ -1,10 +1,9 @@
1
- # Minecraft server class
2
1
  import time
3
2
  import re
4
3
  import mcrcon
5
- from hungerlib import Panel
6
- from hungerlib.datamaps import MC_COLOR_MAP, ASCII_COLOR_MAP
7
- from hungerlib.servers import MinecraftServer
4
+ from hungerlib.panel import Panel
5
+ from hungerlib.utils.colormaps import MC_COLOR_MAP, ASCII_COLOR_MAP
6
+ from hungerlib.servers import GenericServer
8
7
 
9
8
 
10
9
  class MinecraftServer(GenericServer):
@@ -0,0 +1,18 @@
1
+ from .colormaps import ColorMap, ASCII_COLOR_MAP, MC_COLOR_MAP
2
+ from .time import snapSchedule, runCountdownEvents, waitForOnline, waitForOffline, secsUntil, minsUntil
3
+ from .utils import Snapshot, clearTerminal, validateAll
4
+
5
+ __all__ = [
6
+ 'ColorMap',
7
+ 'ASCII_COLOR_MAP',
8
+ 'MC_COLOR_MAP',
9
+ 'snapSchedule',
10
+ 'runCountdownEvents',
11
+ 'waitForOnline',
12
+ 'waitForOffline',
13
+ 'secsUntil',
14
+ 'minsUntil',
15
+ 'Snapshot',
16
+ 'clearTerminal',
17
+ 'validateAll'
18
+ ]
@@ -21,33 +21,12 @@ def snapSchedule(minimumMinutes=30, snapMinutes=(0, 30)):
21
21
  "formatted": scheduled.strftime("%I:%M %p")
22
22
  }
23
23
 
24
-
25
24
  def runCountdownEvents(
26
25
  target_time,
27
26
  minute_callbacks=None,
28
27
  second_callbacks=None,
29
28
  tick_interval=1
30
29
  ):
31
- """
32
- A simple, readable countdown engine.
33
-
34
- - Counts down until `target_time`
35
- - When the countdown hits a configured minute mark, it runs that callback
36
- - When the countdown hits a configured second mark, it runs that callback
37
-
38
- Parameters:
39
- target_time (datetime):
40
- The time we are counting down to.
41
-
42
- minute_callbacks (dict[int, callable]):
43
- Example: {5: func, 1: func}
44
-
45
- second_callbacks (dict[int, callable]):
46
- Example: {10: func, 5: func, 1: func}
47
-
48
- tick_interval (int):
49
- How often to check the countdown (in seconds).
50
- """
51
30
 
52
31
  # Default to empty dicts if none provided
53
32
  minute_callbacks = minute_callbacks or {}
@@ -78,13 +57,7 @@ def runCountdownEvents(
78
57
 
79
58
  time.sleep(tick_interval)
80
59
 
81
-
82
-
83
60
  def waitForOnline(server, timeout=60, interval=2):
84
- """
85
- Wait until the server reports status 'running'.
86
- Returns True if online before timeout.
87
- """
88
61
  elapsed = 0
89
62
  while elapsed < timeout:
90
63
  if server.isOnline():
@@ -93,12 +66,7 @@ def waitForOnline(server, timeout=60, interval=2):
93
66
  elapsed += interval
94
67
  return False
95
68
 
96
-
97
69
  def waitForOffline(server, timeout=60, interval=2):
98
- """
99
- Wait until the server reports status 'offline'.
100
- Returns True if offline before timeout.
101
- """
102
70
  elapsed = 0
103
71
  while elapsed < timeout:
104
72
  if server.isOffline():
@@ -107,13 +75,10 @@ def waitForOffline(server, timeout=60, interval=2):
107
75
  elapsed += interval
108
76
  return False
109
77
 
110
-
111
-
112
78
  def secsUntil(target):
113
79
  now = datetime.now()
114
80
  return int((target - now).total_seconds())
115
81
 
116
-
117
82
  def minsUntil(target):
118
83
  now = datetime.now()
119
84
  return int((target - now).total_seconds()) // 60
@@ -1,3 +1,5 @@
1
+ import os
2
+
1
3
  class Snapshot:
2
4
  def __init__(self, Server, rounding=2, gb=False):
3
5
  self.Server = Server
@@ -28,4 +30,14 @@ class Snapshot:
28
30
  if self.players is not None:
29
31
  base += f'\nOnline players: {self.players}'
30
32
 
31
- return base
33
+ return base
34
+
35
+ def clearTerminal():
36
+ os.system("clear" if os.name == "posix" else "cls")
37
+
38
+ def validateAll(panel, server):
39
+ return (
40
+ panel.ping() is True and
41
+ panel.validateAPI() is True and
42
+ server.getStatus() == "running"
43
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hungerlib
3
- Version: 3.0.dev15
3
+ Version: 3.0.dev18
4
4
  Summary: Powerful automation library for Pterodactyl.
5
5
  Author: iFamished
6
6
  License: MIT
@@ -2,6 +2,7 @@ LICENSE
2
2
  README.md
3
3
  pyproject.toml
4
4
  src/hungerlib/__init__.py
5
+ src/hungerlib/configloader.py
5
6
  src/hungerlib/datamap.py
6
7
  src/hungerlib/messagerouter.py
7
8
  src/hungerlib/panel.py
@@ -10,12 +11,6 @@ src/hungerlib.egg-info/SOURCES.txt
10
11
  src/hungerlib.egg-info/dependency_links.txt
11
12
  src/hungerlib.egg-info/requires.txt
12
13
  src/hungerlib.egg-info/top_level.txt
13
- src/hungerlib/addons/__init__.py
14
- src/hungerlib/addons/configloader.py
15
- src/hungerlib/addons/mchelpers.py
16
- src/hungerlib/addons/scheduler.py
17
- src/hungerlib/addons/snapshot.py
18
- src/hungerlib/addons/utils.py
19
14
  src/hungerlib/api/__init__.py
20
15
  src/hungerlib/api/backups.py
21
16
  src/hungerlib/api/command.py
@@ -23,8 +18,10 @@ src/hungerlib/api/databases.py
23
18
  src/hungerlib/api/filemanager.py
24
19
  src/hungerlib/api/schedule.py
25
20
  src/hungerlib/api/startup.py
26
- src/hungerlib/datamaps/__init__.py
27
- src/hungerlib/datamaps/colormaps.py
28
21
  src/hungerlib/servers/__init__.py
29
22
  src/hungerlib/servers/generic.py
30
- src/hungerlib/servers/minecraft.py
23
+ src/hungerlib/servers/minecraft.py
24
+ src/hungerlib/utils/__init__.py
25
+ src/hungerlib/utils/colormaps.py
26
+ src/hungerlib/utils/time.py
27
+ src/hungerlib/utils/utils.py
@@ -1,37 +0,0 @@
1
- from importlib.metadata import version as _pkg_version, PackageNotFoundError
2
-
3
- # Package version
4
- try:
5
- __version__ = _pkg_version("hungerlib")
6
- except PackageNotFoundError:
7
- __version__ = "0.0.0"
8
-
9
- # --- Core modules ---
10
- from .panel import Panel
11
- from .messagerouter import MessageRouter
12
- from .datamap import *
13
-
14
- # --- API endpoints ---
15
- from .api.schedule import ScheduleAPI
16
- from .api.filemanager import FileManagerAPI
17
- from .api.backups import BackupsAPI
18
- from .api.databases import DatabasesAPI
19
- from .api.startup import StartupAPI
20
-
21
- __all__ = [
22
- "__version__",
23
-
24
- # core utilities
25
- "Panel",
26
- "MessageRouter",
27
- "Syntax",
28
- "DataMap",
29
- "mapit",
30
-
31
- # API endpoints
32
- "ScheduleAPI",
33
- "FileManagerAPI",
34
- "BackupsAPI",
35
- "DatabasesAPI",
36
- "StartupAPI",
37
- ]
@@ -1,22 +0,0 @@
1
- from .snapshot import Snapshot
2
- from .scheduler import *
3
- from .utils import *
4
- from .configloader import *
5
-
6
- __all__ = [
7
- 'runCountdownEvents',
8
- 'waitForOnline',
9
- 'waitForOffline',
10
- 'Snapshot',
11
- 'snapSchedule',
12
- 'secsUntil',
13
- 'minsUntil',
14
- 'validateAll',
15
- 'mb_gb',
16
- 'gb_mb',
17
- 'mib_gib',
18
- 'gib_mib',
19
- 'clearTerminal',
20
- 'load_yaml',
21
- 'loadConfig',
22
- ]
@@ -1,107 +0,0 @@
1
- # Minecraft-specific helper functions that operate on a MinecraftServer instance.
2
-
3
- class MCHelpers:
4
- def __init__(self, server):
5
- """
6
- Helper utilities for a MinecraftServer instance.
7
- """
8
- self.server = server
9
-
10
- def run(self, command):
11
- """Send a raw RCON command."""
12
- return self.server._rcon_send(command)
13
-
14
- def tellraw(self, target, message):
15
- """Send a tellraw message with color translation."""
16
- translated = self.server._translate_mc_colors(message)
17
- safe = translated.replace('"', '\\"')
18
- cmd = f'tellraw {target} {{"text":"{safe}"}}'
19
- return self.run(cmd)
20
-
21
- def kick(self, player, message="Kicked"):
22
- safe = message.replace('"', '\\"')
23
- return self.run(f'kick {player} "{safe}"')
24
-
25
- def kickAll(self, message="Server restarting"):
26
- safe = message.replace('"', '\\"')
27
- return self.run(f'kick @a "{safe}"')
28
-
29
- def whitelistAdd(self, player):
30
- return self.run(f"whitelist add {player}")
31
-
32
- def whitelistRemove(self, player):
33
- return self.run(f"whitelist remove {player}")
34
-
35
- def whitelistList(self):
36
- return self.run("whitelist list")
37
-
38
- def runFunction(self, function_name):
39
- """Run a datapack function."""
40
- return self.run(f"function {function_name}")
41
-
42
- def enableDatapack(self, name):
43
- return self.run(f"datapack enable {name}")
44
-
45
- def disableDatapack(self, name):
46
- return self.run(f"datapack disable {name}")
47
-
48
- def listDatapacks(self):
49
- return self.run("datapack list")
50
-
51
- # ============================================================
52
- # GAMERULE HELPERS
53
- # ============================================================
54
-
55
- def setGamerule(self, rule, value):
56
- return self.run(f"gamerule {rule} {value}")
57
-
58
- def getGamerule(self, rule):
59
- return self.run(f"gamerule {rule}")
60
-
61
- # ============================================================
62
- # SCOREBOARD HELPERS
63
- # ============================================================
64
-
65
- def scoreboardAddObjective(self, name, criteria="dummy", display_name=None):
66
- if display_name:
67
- safe = display_name.replace('"', '\\"')
68
- return self.run(f'scoreboard objectives add {name} {criteria} "{safe}"')
69
- return self.run(f"scoreboard objectives add {name} {criteria}")
70
-
71
- def scoreboardRemoveObjective(self, name):
72
- return self.run(f"scoreboard objectives remove {name}")
73
-
74
- def scoreboardSetDisplay(self, slot, objective):
75
- return self.run(f"scoreboard objectives setdisplay {slot} {objective}")
76
-
77
- def scoreboardSet(self, player, objective, value):
78
- return self.run(f"scoreboard players set {player} {objective} {value}")
79
-
80
- def scoreboardAdd(self, player, objective, value):
81
- return self.run(f"scoreboard players add {player} {objective} {value}")
82
-
83
- def scoreboardGet(self, player, objective):
84
- return self.run(f"scoreboard players get {player} {objective}")
85
-
86
- # ============================================================
87
- # TIME & WEATHER HELPERS
88
- # ============================================================
89
-
90
- def setTime(self, value):
91
- return self.run(f"time set {value}")
92
-
93
- def addTime(self, value):
94
- return self.run(f"time add {value}")
95
-
96
- def setWeather(self, weather, duration=None):
97
- if duration:
98
- return self.run(f"weather {weather} {duration}")
99
- return self.run(f"weather {weather}")
100
-
101
- # ============================================================
102
- # BROADCAST HELPERS
103
- # ============================================================
104
-
105
- def broadcast(self, message):
106
- """Broadcast using tellraw @a."""
107
- return self.tellraw("@a", message)
@@ -1,26 +0,0 @@
1
- import os
2
-
3
- def mb_gb(mb, floor=False):
4
- return mb / 1000 if not floor else mb // 1000
5
-
6
- def gb_mb(gb):
7
- return gb * 1000
8
-
9
- def mib_gib(mib, floor=False):
10
- return mib / 1024 if not floor else mib // 1024
11
-
12
- def gib_mib(gib):
13
- return gib * 1024
14
-
15
- def clearTerminal():
16
- os.system("clear" if os.name == "posix" else "cls")
17
-
18
- def validateAll(panel, server):
19
- """
20
- Validate panel connectivity, API access, and server running state.
21
- """
22
- return (
23
- panel.ping() is True and
24
- panel.validateAPI() is True and
25
- server.getStatus() == "running"
26
- )
@@ -1,7 +0,0 @@
1
- from .colormaps import ColorMap, ASCII_COLOR_MAP, MC_COLOR_MAP
2
-
3
- __all__ = [
4
- "ColorMap",
5
- "ASCII_COLOR_MAP",
6
- "MC_COLOR_MAP",
7
- ]
File without changes
File without changes
File without changes