hungerlib 3.0.dev15__tar.gz → 3.0.dev16__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.dev16}/PKG-INFO +1 -1
  2. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/pyproject.toml +1 -1
  3. hungerlib-3.0.dev16/src/hungerlib/__init__.py +24 -0
  4. {hungerlib-3.0.dev15/src/hungerlib/addons → hungerlib-3.0.dev16/src/hungerlib}/configloader.py +3 -0
  5. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib/datamap.py +10 -0
  6. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib/messagerouter.py +4 -0
  7. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib/panel.py +4 -0
  8. hungerlib-3.0.dev16/src/hungerlib/utils/__init__.py +18 -0
  9. hungerlib-3.0.dev15/src/hungerlib/addons/scheduler.py → hungerlib-3.0.dev16/src/hungerlib/utils/time.py +0 -35
  10. hungerlib-3.0.dev15/src/hungerlib/addons/snapshot.py → hungerlib-3.0.dev16/src/hungerlib/utils/utils.py +13 -1
  11. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16/src/hungerlib.egg-info}/PKG-INFO +1 -1
  12. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib.egg-info/SOURCES.txt +6 -9
  13. hungerlib-3.0.dev15/src/hungerlib/__init__.py +0 -37
  14. hungerlib-3.0.dev15/src/hungerlib/addons/__init__.py +0 -22
  15. hungerlib-3.0.dev15/src/hungerlib/addons/mchelpers.py +0 -107
  16. hungerlib-3.0.dev15/src/hungerlib/addons/utils.py +0 -26
  17. hungerlib-3.0.dev15/src/hungerlib/datamaps/__init__.py +0 -7
  18. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/LICENSE +0 -0
  19. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/README.md +0 -0
  20. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/setup.cfg +0 -0
  21. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib/api/__init__.py +0 -0
  22. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib/api/backups.py +0 -0
  23. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib/api/command.py +0 -0
  24. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib/api/databases.py +0 -0
  25. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib/api/filemanager.py +0 -0
  26. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib/api/schedule.py +0 -0
  27. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib/api/startup.py +0 -0
  28. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib/servers/__init__.py +0 -0
  29. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib/servers/generic.py +0 -0
  30. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib/servers/minecraft.py +0 -0
  31. {hungerlib-3.0.dev15/src/hungerlib/datamaps → hungerlib-3.0.dev16/src/hungerlib/utils}/colormaps.py +0 -0
  32. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib.egg-info/dependency_links.txt +0 -0
  33. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/src/hungerlib.egg-info/requires.txt +0 -0
  34. {hungerlib-3.0.dev15 → hungerlib-3.0.dev16}/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.dev16
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.dev16"
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
+ ]
@@ -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
+ ]
@@ -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"]
@@ -63,3 +63,7 @@ class Panel:
63
63
  def validateAPI(self):
64
64
  r = self.get("/api/client/account")
65
65
  return r.status_code == 200
66
+
67
+
68
+
69
+ __all__ = ["Panel"]
@@ -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.dev16
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