bundle.discord.cogs.music¶
Music playback cog – queue-based YouTube streaming with interactive controls.
Submodules¶
Attributes¶
Classes¶
Base data model class, providing utilities for serialization and deserialization |
|
Six-button control strip attached to the now-playing embed: prev, pause, skip, stop, shuffle, queue. |
|
Paginated queue browser with prev/next buttons. |
|
Manages the persistent now-playing message and seek-bar loop for one guild. |
|
Owns voice playback and timing for a single guild. |
|
Ordered track list with a cursor. |
|
Bundles the per-guild components. |
|
Queue-based YouTube audio streaming. |
Functions¶
|
Return 'Paused' or 'Playing' based on voice client state. |
Package Contents¶
- class bundle.discord.cogs.music.YoutubeResolveOptions(/, **data: Any)¶
Bases:
bundle.core.data.DataBase data model class, providing utilities for serialization and deserialization from/to JSON, along with JSON Schema generation.
- model_config¶
Default model configuration settings.
- class bundle.discord.cogs.music.PlayerControls(cog: bundle.discord.cogs.music.MusicCog, guild_id: int)¶
Bases:
discord.ui.ViewSix-button control strip attached to the now-playing embed: prev, pause, skip, stop, shuffle, queue.
- cog¶
- guild_id¶
- class bundle.discord.cogs.music.QueuePaginator(embed_mgr: bundle.discord.cogs.music.embed.PlayerEmbed, *, timeout: float = 120)¶
Bases:
discord.ui.ViewPaginated queue browser with prev/next buttons.
- class bundle.discord.cogs.music.PlayerEmbed(embeds: bundle.discord.embeds.EmbedFactory, queue: bundle.discord.cogs.music.queue.TrackQueue, player: bundle.discord.cogs.music.player.GuildPlayer, text_channel: discord.TextChannel)¶
Manages the persistent now-playing message and seek-bar loop for one guild.
- text_channel¶
- now_playing(track: bundle.youtube.track.YoutubeTrackData, status: str) discord.Embed¶
- bundle.discord.cogs.music.vc_status(vc: discord.VoiceProtocol | None) str¶
Return ‘Paused’ or ‘Playing’ based on voice client state.
- class bundle.discord.cogs.music.GuildPlayer(on_track_end: collections.abc.Callable[[int, Exception | None], collections.abc.Coroutine[Any, Any, None]])¶
Owns voice playback and timing for a single guild.
- play(vc: discord.VoiceClient, track: bundle.youtube.track.YoutubeTrackData, guild_id: int) bool¶
Start FFmpeg playback. Returns False if no stream URL available.
- class bundle.discord.cogs.music.TrackQueue¶
Ordered track list with a cursor.
- property tracks: list[bundle.youtube.track.YoutubeTrackData]¶
- property current: bundle.youtube.track.YoutubeTrackData | None¶
- enqueue(track: bundle.youtube.track.YoutubeTrackData) int¶
Append a track; return its index.
- bundle.discord.cogs.music.log¶
- bundle.discord.cogs.music.ALONE_TIMEOUT = 30¶
- bundle.discord.cogs.music.PAUSE_TIMEOUT = 300¶
- class bundle.discord.cogs.music.GuildSession¶
Bundles the per-guild components.
- queue: queue.TrackQueue¶
- player: player.GuildPlayer¶
- embed: embed.PlayerEmbed¶
- resolve_tasks: list[asyncio.Task] = []¶
- alone_task: asyncio.Task | None = None¶
- pause_task: asyncio.Task | None = None¶
- class bundle.discord.cogs.music.MusicCog(bot: bundle.discord.bot.Bot)¶
Bases:
discord.ext.commands.CogQueue-based YouTube audio streaming.
- bot¶
- async on_voice_state_update(member: discord.Member, before: discord.VoiceState, after: discord.VoiceState) None¶