Add @promote and @demote admin commands
This commit is contained in:
parent
05afff9538
commit
1064af87d0
1 changed files with 73 additions and 1 deletions
|
|
@ -4,7 +4,8 @@ from pathlib import Path
|
||||||
|
|
||||||
from mudlib.commands import CommandDefinition, register
|
from mudlib.commands import CommandDefinition, register
|
||||||
from mudlib.export import export_zone_to_file
|
from mudlib.export import export_zone_to_file
|
||||||
from mudlib.player import Player
|
from mudlib.player import Player, players
|
||||||
|
from mudlib.store import account_exists, load_player_data, set_admin
|
||||||
from mudlib.things import spawn_thing, thing_templates
|
from mudlib.things import spawn_thing, thing_templates
|
||||||
from mudlib.zone import Zone
|
from mudlib.zone import Zone
|
||||||
from mudlib.zones import get_zone, register_zone
|
from mudlib.zones import get_zone, register_zone
|
||||||
|
|
@ -114,7 +115,78 @@ async def cmd_place(player: Player, args: str) -> None:
|
||||||
await player.send(f"Placed {thing_name} at ({player.x}, {player.y}).\r\n")
|
await player.send(f"Placed {thing_name} at ({player.x}, {player.y}).\r\n")
|
||||||
|
|
||||||
|
|
||||||
|
async def cmd_promote(player: Player, args: str) -> None:
|
||||||
|
"""Grant admin status to a player."""
|
||||||
|
target_name = args.strip()
|
||||||
|
if not target_name:
|
||||||
|
await player.send("Usage: @promote <player_name>\r\n")
|
||||||
|
return
|
||||||
|
|
||||||
|
if not account_exists(target_name):
|
||||||
|
await player.send(f"Account '{target_name}' not found.\r\n")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Check current status via live player or DB
|
||||||
|
data = load_player_data(target_name)
|
||||||
|
if data and data.get("is_admin"):
|
||||||
|
await player.send(f"{target_name} is already an admin.\r\n")
|
||||||
|
return
|
||||||
|
|
||||||
|
set_admin(target_name, True)
|
||||||
|
|
||||||
|
# Update live player if online
|
||||||
|
target = next(
|
||||||
|
(p for p in players.values() if p.name.lower() == target_name.lower()),
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
if target is not None:
|
||||||
|
target.is_admin = True
|
||||||
|
await target.send("You have been granted admin status.\r\n")
|
||||||
|
|
||||||
|
await player.send(f"{target_name} is now an admin.\r\n")
|
||||||
|
|
||||||
|
|
||||||
|
async def cmd_demote(player: Player, args: str) -> None:
|
||||||
|
"""Revoke admin status from a player."""
|
||||||
|
target_name = args.strip()
|
||||||
|
if not target_name:
|
||||||
|
await player.send("Usage: @demote <player_name>\r\n")
|
||||||
|
return
|
||||||
|
|
||||||
|
if target_name.lower() == player.name.lower():
|
||||||
|
await player.send("You can't demote yourself.\r\n")
|
||||||
|
return
|
||||||
|
|
||||||
|
if not account_exists(target_name):
|
||||||
|
await player.send(f"Account '{target_name}' not found.\r\n")
|
||||||
|
return
|
||||||
|
|
||||||
|
data = load_player_data(target_name)
|
||||||
|
if data and not data.get("is_admin"):
|
||||||
|
await player.send(f"{target_name} is not an admin.\r\n")
|
||||||
|
return
|
||||||
|
|
||||||
|
set_admin(target_name, False)
|
||||||
|
|
||||||
|
# Update live player if online
|
||||||
|
target = next(
|
||||||
|
(p for p in players.values() if p.name.lower() == target_name.lower()),
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
if target is not None:
|
||||||
|
target.is_admin = False
|
||||||
|
await target.send("Your admin status has been revoked.\r\n")
|
||||||
|
|
||||||
|
await player.send(f"{target_name} is no longer an admin.\r\n")
|
||||||
|
|
||||||
|
|
||||||
register(CommandDefinition("@goto", cmd_goto, admin=True, help="Teleport to a zone"))
|
register(CommandDefinition("@goto", cmd_goto, admin=True, help="Teleport to a zone"))
|
||||||
register(CommandDefinition("@dig", cmd_dig, admin=True, help="Create a new zone"))
|
register(CommandDefinition("@dig", cmd_dig, admin=True, help="Create a new zone"))
|
||||||
register(CommandDefinition("@save", cmd_save, admin=True, help="Save current zone"))
|
register(CommandDefinition("@save", cmd_save, admin=True, help="Save current zone"))
|
||||||
register(CommandDefinition("@place", cmd_place, admin=True, help="Place a thing"))
|
register(CommandDefinition("@place", cmd_place, admin=True, help="Place a thing"))
|
||||||
|
register(
|
||||||
|
CommandDefinition("@promote", cmd_promote, admin=True, help="Grant admin status")
|
||||||
|
)
|
||||||
|
register(
|
||||||
|
CommandDefinition("@demote", cmd_demote, admin=True, help="Revoke admin status")
|
||||||
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue