mirror of
https://github.com/AstrBotDevs/AstrBot
synced 2026-07-16 01:40:15 +08:00
69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
import os
|
|
import shutil
|
|
from pathlib import Path
|
|
|
|
import click
|
|
|
|
from astrbot.core.utils.astrbot_path import astrbot_paths
|
|
|
|
|
|
@click.command()
|
|
@click.option("--yes", "-y", is_flag=True, help="Skip confirmation prompts")
|
|
@click.option(
|
|
"--keep-data", is_flag=True, help="Keep data directory (config, plugins, etc.)"
|
|
)
|
|
def uninstall(yes: bool, keep_data: bool) -> None:
|
|
"""Remove AstrBot files from the current root directory."""
|
|
|
|
if os.environ.get("ASTRBOT_SYSTEMD") == "1":
|
|
yes = True
|
|
|
|
dot_astrbot = astrbot_paths.root / ".astrbot"
|
|
lock_file = astrbot_paths.root / "astrbot.lock"
|
|
data_dir = astrbot_paths.data
|
|
removable_paths: list[Path] = [dot_astrbot, lock_file]
|
|
|
|
if not keep_data:
|
|
removable_paths.insert(0, data_dir)
|
|
|
|
# Check if this looks like an AstrBot root before blowing things up
|
|
if not dot_astrbot.exists() and not data_dir.exists():
|
|
click.echo("No AstrBot initialization found in current directory.")
|
|
return
|
|
|
|
if keep_data:
|
|
click.echo("Keeping data directory as requested.")
|
|
|
|
if yes or click.confirm(
|
|
f"Are you sure you want to remove AstrBot data at {astrbot_paths.root}? \n"
|
|
f"This will delete:\n"
|
|
f" - {data_dir} (Config, Plugins, Database)\n"
|
|
f" - {dot_astrbot}\n"
|
|
f" - {lock_file}",
|
|
default=False,
|
|
abort=True,
|
|
):
|
|
removed_any = False
|
|
for path in removable_paths:
|
|
if not path.exists():
|
|
continue
|
|
removed_any = True
|
|
if path.is_dir():
|
|
click.echo(f"Removing directory: {path}")
|
|
shutil.rmtree(path)
|
|
else:
|
|
click.echo(f"Removing file: {path}")
|
|
path.unlink()
|
|
|
|
if removed_any:
|
|
click.echo("AstrBot files removed successfully.")
|
|
else:
|
|
click.echo("No removable AstrBot files were found.")
|
|
|
|
# TODO: Consider adding an explicit `--service` cleanup mode instead of
|
|
# touching systemd or other service managers during normal uninstall.
|
|
# TODO: Consider adding package-manager-specific uninstall helpers once
|
|
# the CLI can reliably detect the installation source.
|
|
click.echo("uv: uv tool uninstall astrbot")
|
|
click.echo("paru/yay: paru -R astrbot")
|