fix: migrate legacy state to the first Discord server
This commit is contained in:
6 files changed
+58
-2
No files matched your search
@@ -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:
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
@@ -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)
|
||||
Reference in new issue
Block a user