Add @help remove with confirmation prompt
This commit is contained in:
parent
24154a052c
commit
e361050b93
2 changed files with 52 additions and 2 deletions
|
|
@ -159,8 +159,34 @@ async def _on_edit_admin(
|
||||||
|
|
||||||
|
|
||||||
async def _cmd_remove(player: Player, args: str) -> None:
|
async def _cmd_remove(player: Player, args: str) -> None:
|
||||||
"""Placeholder for topic removal."""
|
"""Remove a help topic."""
|
||||||
await player.send("Not yet implemented.\r\n")
|
name = args.strip()
|
||||||
|
if not name:
|
||||||
|
await player.send("Usage: @help remove <topic>\r\n")
|
||||||
|
return
|
||||||
|
|
||||||
|
if name not in _help_topics:
|
||||||
|
await player.send(f"Topic '{name}' not found.\r\n")
|
||||||
|
return
|
||||||
|
|
||||||
|
await player.send(f"Remove topic '{name}'? [y/N]: ")
|
||||||
|
player.pending_input = lambda p, line: _on_remove_confirm(p, line, name)
|
||||||
|
|
||||||
|
|
||||||
|
async def _on_remove_confirm(player: Player, line: str, name: str) -> None:
|
||||||
|
if line.strip().lower() not in ("y", "yes"):
|
||||||
|
await player.send("Cancelled.\r\n")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Remove from memory
|
||||||
|
_help_topics.pop(name, None)
|
||||||
|
|
||||||
|
# Remove file
|
||||||
|
path = Path(__file__).resolve().parents[2] / "content" / "help" / f"{name}.toml"
|
||||||
|
if path.exists():
|
||||||
|
path.unlink()
|
||||||
|
|
||||||
|
await player.send(f"Topic '{name}' removed.\r\n")
|
||||||
|
|
||||||
|
|
||||||
register(
|
register(
|
||||||
|
|
|
||||||
|
|
@ -227,3 +227,27 @@ async def test_at_help_edit_prompts_title(admin_player):
|
||||||
output = "".join(c[0][0] for c in admin_player.writer.write.call_args_list)
|
output = "".join(c[0][0] for c in admin_player.writer.write.call_args_list)
|
||||||
# Should show current title as default
|
# Should show current title as default
|
||||||
assert "combat primer" in output
|
assert "combat primer" in output
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_at_help_remove_unknown_topic(admin_player):
|
||||||
|
await commands.dispatch(admin_player, "@help remove bogus")
|
||||||
|
output = "".join(c[0][0] for c in admin_player.writer.write.call_args_list)
|
||||||
|
assert "not found" in output.lower()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_at_help_remove_no_args(admin_player):
|
||||||
|
await commands.dispatch(admin_player, "@help remove")
|
||||||
|
output = "".join(c[0][0] for c in admin_player.writer.write.call_args_list)
|
||||||
|
assert "usage" in output.lower()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_at_help_remove_prompts_confirmation(admin_player):
|
||||||
|
_help_topics["combat"] = HelpTopic(
|
||||||
|
name="combat", body="fight", title="combat primer"
|
||||||
|
)
|
||||||
|
await commands.dispatch(admin_player, "@help remove combat")
|
||||||
|
output = "".join(c[0][0] for c in admin_player.writer.write.call_args_list)
|
||||||
|
assert "y/n" in output.lower() or "confirm" in output.lower()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue