fix: migrate legacy state to the first Discord server

This commit is contained in:
mmacierzanka committed 2026-08-21 16:18:57 +02:00
1 parent 64b428555c
commit 32fd296d9e
6 files changed
+58 -2

No files matched your search

+1 -1
View File
@@ -43,7 +43,7 @@ class Application:
self.uploads = UploadsRepository(self.settings.uploads_dir)
self.tracks = TrackFactory(self.uploads, MediaProbe())
self.bot = MusicBot(self.settings, self.tracks, self.uploads)
self.bot = MusicBot(self.settings, self.tracks, self.uploads, self.config)
self.guilds = GuildResolver(self.bot)
self.player = MusicPlayer(
bot=self.bot,
@@ -23,6 +23,18 @@ class GuildConfigRepository:
# Migrate the old format {"guild_id": channel_id} lazily.
if isinstance(value, dict):
if self.DEFAULT_PLAYS_KEY in data:
try:
value.setdefault("default_plays", int(data[self.DEFAULT_PLAYS_KEY]))
except (TypeError, ValueError):
logger.error(
"Nieprawidłowa wartość %s: %r",
self.DEFAULT_PLAYS_KEY,
data[self.DEFAULT_PLAYS_KEY],
)
data.pop(self.DEFAULT_PLAYS_KEY, None)
data[key] = value
self._store.write(data)
return value
config: dict[str, int | None] = {}
if value is not None:
@@ -45,6 +57,10 @@ class GuildConfigRepository:
self._store.write(data)
return config
def migrate_legacy(self, guild_id: int) -> None:
"""Assign the old global configuration to the first known guild."""
self._guild_config(guild_id)
def get_notification_channel_id(self, guild_id: int) -> int | None:
value = self._guild_config(guild_id).get("notification_channel_id")
try:
+4
View File
@@ -45,6 +45,10 @@ class UploadsRepository:
)
self._legacy_guild_id = guild_id
def migrate_legacy(self, guild_id: int) -> None:
"""Assign old root-level uploads to the explicitly selected first guild."""
self._migrate_legacy(guild_id)
def resolve(self, filename: str, guild_id: int | None = None) -> str:
return os.path.join(self._guild_directory(guild_id), os.path.basename(filename))
+13 -1
View File
@@ -8,6 +8,7 @@ from discord.ext import commands
from zyrarbot.audio.track_factory import TrackFactory
from zyrarbot.music.music_player import MusicPlayer
from zyrarbot.settings import Settings
from zyrarbot.storage.guild_config_repository import GuildConfigRepository
from zyrarbot.storage.uploads_repository import UploadsRepository
from zyrarbot.ui.bot.cogs.control_cog import ControlCog
from zyrarbot.ui.bot.cogs.playback_cog import PlaybackCog
@@ -25,7 +26,13 @@ class MusicBot(commands.Bot):
odtwarzacz potrzebuje bota, a bot odtwarzacza, więc pętlę domykamy tutaj.
"""
def __init__(self, settings: Settings, tracks: TrackFactory, uploads: UploadsRepository):
def __init__(
self,
settings: Settings,
tracks: TrackFactory,
uploads: UploadsRepository,
config: GuildConfigRepository,
):
intents = discord.Intents.default()
intents.message_content = True
intents.voice_states = True
@@ -34,6 +41,7 @@ class MusicBot(commands.Bot):
self.settings = settings
self.tracks = tracks
self.uploads = uploads
self.config = config
self.player: MusicPlayer | None = None
def _create_music_cogs(self) -> tuple[commands.Cog, ...]:
@@ -65,5 +73,9 @@ class MusicBot(commands.Bot):
logger.info("Zsynchronizowano komendy globalnie")
async def on_ready(self) -> None:
if self.guilds:
first_guild_id = self.guilds[0].id
self.uploads.migrate_legacy(first_guild_id)
self.config.migrate_legacy(first_guild_id)
if self.user:
logger.info("Zalogowano jako %s (%s)", self.user.name, self.user.id)