- GuildMusicState zbiera stan jednego serwera w jedną strukturę. Dotąd było to dziewięć równoległych słowników indeksowanych guild_id (queues, currents, volumes, loop_currents, loop_playlists, last_channels, history, queue_indices, jump_flag), co wymagało pamiętania, że przy każdej zmianie trzeba ruszyć kilka z nich naraz. - LoopMode zastępuje parę booleanów loop_current/loop_playlist, których kombinacja "oba włączone" nie miała sensu, a mimo to była osiągalna. Wartości enuma (off/playlist/single) odpowiadają kontraktowi API panelu. - TrackEmbedFactory zbiera budowanie osadzeń Discorda, powielone dotąd w enqueue_track i play_next. - NotificationChannelResolver opisuje kolejność szukania kanału logów: zapamiętany -> z konfiguracji -> pierwszy zapisywalny na serwerze. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
32 lines
857 B
Python
32 lines
857 B
Python
from __future__ import annotations
|
|
|
|
from enum import Enum
|
|
|
|
|
|
class LoopMode(Enum):
|
|
"""Tryb zapętlania w cyklu: wyłączone -> cała kolejka -> jeden utwór."""
|
|
|
|
OFF = "off"
|
|
QUEUE = "playlist"
|
|
TRACK = "single"
|
|
|
|
@property
|
|
def loops_track(self) -> bool:
|
|
return self is LoopMode.TRACK
|
|
|
|
@property
|
|
def loops_queue(self) -> bool:
|
|
return self is LoopMode.QUEUE
|
|
|
|
def next(self) -> LoopMode:
|
|
order = (LoopMode.OFF, LoopMode.QUEUE, LoopMode.TRACK)
|
|
return order[(order.index(self) + 1) % len(order)]
|
|
|
|
@property
|
|
def label(self) -> str:
|
|
return {
|
|
LoopMode.OFF: "➡️ Tryb zapętlania: **Wyłączone**",
|
|
LoopMode.QUEUE: "🔁 Tryb zapętlania: **Cała kolejka (playlista)**",
|
|
LoopMode.TRACK: "🔂 Tryb zapętlania: **Jeden utwór**",
|
|
}[self]
|