add confirmation for name, logo and banner sync
This commit is contained in:
parent
4ae8a5025e
commit
778a9aeb28
2 changed files with 73 additions and 41 deletions
|
|
@ -56,45 +56,48 @@ class MigrationEngine:
|
||||||
await self.discord_reader.close()
|
await self.discord_reader.close()
|
||||||
await self.fluxer_writer.close()
|
await self.fluxer_writer.close()
|
||||||
|
|
||||||
async def sync_server_metadata(self, progress_callback: Callable[[str, str], Awaitable[None]]):
|
async def sync_server_metadata(self, progress_callback: Callable[[str, str], Awaitable[None]], components: List[str] = ["name", "icon", "banner"]):
|
||||||
"""Syncs the server name, logo and banner."""
|
"""Syncs the server name, logo and banner."""
|
||||||
metadata = await self.discord_reader.get_server_metadata()
|
metadata = await self.discord_reader.get_server_metadata()
|
||||||
name = metadata.get("name")
|
|
||||||
|
|
||||||
# 1. Sync Name
|
# 1. Sync Name
|
||||||
try:
|
if "name" in components:
|
||||||
await self.fluxer_writer.update_guild_metadata(name=name)
|
try:
|
||||||
await progress_callback("Server Name", "DONE")
|
name = metadata.get("name")
|
||||||
except Exception:
|
await self.fluxer_writer.update_guild_metadata(name=name)
|
||||||
await progress_callback("Server Name", "ERROR")
|
await progress_callback("Server Name", "DONE")
|
||||||
|
except Exception:
|
||||||
|
await progress_callback("Server Name", "ERROR")
|
||||||
|
|
||||||
# 2. Sync Icon
|
# 2. Sync Icon
|
||||||
try:
|
if "icon" in components:
|
||||||
icon_bytes = None
|
try:
|
||||||
if self.discord_reader.guild and self.discord_reader.guild.icon:
|
icon_bytes = None
|
||||||
icon_bytes = await self.discord_reader.download_asset(self.discord_reader.guild.icon)
|
if self.discord_reader.guild and self.discord_reader.guild.icon:
|
||||||
|
icon_bytes = await self.discord_reader.download_asset(self.discord_reader.guild.icon)
|
||||||
|
|
||||||
if icon_bytes:
|
if icon_bytes:
|
||||||
await self.fluxer_writer.update_guild_metadata(icon=icon_bytes)
|
await self.fluxer_writer.update_guild_metadata(icon=icon_bytes)
|
||||||
await progress_callback("Server Icon", "DONE")
|
await progress_callback("Server Icon", "DONE")
|
||||||
else:
|
else:
|
||||||
await progress_callback("Server Icon", "SKIP")
|
await progress_callback("Server Icon", "SKIP")
|
||||||
except Exception:
|
except Exception:
|
||||||
await progress_callback("Server Icon", "ERROR")
|
await progress_callback("Server Icon", "ERROR")
|
||||||
|
|
||||||
# 3. Sync Banner
|
# 3. Sync Banner
|
||||||
try:
|
if "banner" in components:
|
||||||
banner_bytes = None
|
try:
|
||||||
if self.discord_reader.guild and self.discord_reader.guild.banner:
|
banner_bytes = None
|
||||||
banner_bytes = await self.discord_reader.download_asset(self.discord_reader.guild.banner)
|
if self.discord_reader.guild and self.discord_reader.guild.banner:
|
||||||
|
banner_bytes = await self.discord_reader.download_asset(self.discord_reader.guild.banner)
|
||||||
|
|
||||||
if banner_bytes:
|
if banner_bytes:
|
||||||
await self.fluxer_writer.update_guild_metadata(banner=banner_bytes)
|
await self.fluxer_writer.update_guild_metadata(banner=banner_bytes)
|
||||||
await progress_callback("Server Banner", "DONE")
|
await progress_callback("Server Banner", "DONE")
|
||||||
else:
|
else:
|
||||||
await progress_callback("Server Banner", "SKIP")
|
await progress_callback("Server Banner", "SKIP")
|
||||||
except Exception:
|
except Exception:
|
||||||
await progress_callback("Server Banner", "ERROR")
|
await progress_callback("Server Banner", "ERROR")
|
||||||
|
|
||||||
async def migrate_channels(self, progress_callback: Callable[[str, int, int], Awaitable[None]] | None = None):
|
async def migrate_channels(self, progress_callback: Callable[[str, int, int], Awaitable[None]] | None = None):
|
||||||
"""Clones categories and text channels."""
|
"""Clones categories and text channels."""
|
||||||
|
|
|
||||||
|
|
@ -288,18 +288,47 @@ class MigrationCLI:
|
||||||
self.engine.is_running = False
|
self.engine.is_running = False
|
||||||
|
|
||||||
async def sync_server_metadata(self):
|
async def sync_server_metadata(self):
|
||||||
if not Confirm.ask("Are you sure you want to sync server name, logo and banner?"):
|
console.print("\n[yellow]Fetching server metadata...[/yellow]")
|
||||||
return
|
|
||||||
|
|
||||||
console.print("\n[bold green]Syncing Server Metadata...[/bold green]")
|
|
||||||
|
|
||||||
async def progress_callback(item: str, status: str):
|
|
||||||
color = "green" if status == "DONE" else "red" if status == "ERROR" else "yellow"
|
|
||||||
console.print(f"{item} [[bold {color}]{status}[/bold {color}]]")
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
await self.engine.start_connections()
|
await self.engine.start_connections()
|
||||||
await self.engine.sync_server_metadata(progress_callback)
|
metadata = await self.engine.discord_reader.get_server_metadata()
|
||||||
|
|
||||||
|
name = metadata.get("name")
|
||||||
|
icon_status = "[bold green]FOUND[/bold green]" if metadata.get("icon_url") else "[yellow]NOT FOUND[/yellow]"
|
||||||
|
banner_status = "[bold green]FOUND[/bold green]" if metadata.get("banner_url") else "[yellow]NOT FOUND[/yellow]"
|
||||||
|
|
||||||
|
console.print(f"\n[bold]Server Name:[/bold] {name}")
|
||||||
|
console.print(f"[bold]Server Icon:[/bold] {icon_status}")
|
||||||
|
console.print(f"[bold]Server Banner:[/bold] {banner_status}")
|
||||||
|
|
||||||
|
console.print("\n(1) Sync Name only")
|
||||||
|
console.print("(2) Sync Icon only")
|
||||||
|
console.print("(3) Sync Banner only")
|
||||||
|
console.print("(4) Sync Everything")
|
||||||
|
console.print("(B) Back")
|
||||||
|
|
||||||
|
choice = Prompt.ask("Select an option", choices=["1", "2", "3", "4", "B", "b"], default="4").upper()
|
||||||
|
|
||||||
|
if choice == "B":
|
||||||
|
return
|
||||||
|
|
||||||
|
components = []
|
||||||
|
if choice == "1":
|
||||||
|
components = ["name"]
|
||||||
|
elif choice == "2":
|
||||||
|
components = ["icon"]
|
||||||
|
elif choice == "3":
|
||||||
|
components = ["banner"]
|
||||||
|
elif choice == "4":
|
||||||
|
components = ["name", "icon", "banner"]
|
||||||
|
|
||||||
|
console.print("\n[bold green]Syncing Server Metadata...[/bold green]")
|
||||||
|
|
||||||
|
async def progress_callback(item: str, status: str):
|
||||||
|
color = "green" if status == "DONE" else "red" if status == "ERROR" else "yellow"
|
||||||
|
console.print(f"{item} [[bold {color}]{status}[/bold {color}]]")
|
||||||
|
|
||||||
|
await self.engine.sync_server_metadata(progress_callback, components=components)
|
||||||
console.print("[bold green]Server metadata sync finished![/bold green]")
|
console.print("[bold green]Server metadata sync finished![/bold green]")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
console.print(f"[bold red]Error during metadata sync: {str(e)}[/bold red]")
|
console.print(f"[bold red]Error during metadata sync: {str(e)}[/bold red]")
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue