dj-embe/framework/discordPlayer.py

41 lines
1.3 KiB
Python
Raw Normal View History

2023-05-16 23:04:16 +00:00
from discord import FFmpegOpusAudio, VoiceChannel, VoiceClient
from entity import File
class DiscordPlayer:
def __init__(self) -> None:
self.clients: dict[int, VoiceClient] = {}
self.timeout = 60
async def connect(self, guildId: int, voiceChannel: VoiceChannel) -> None:
if (
guildId not in self.clients
or self.clients[guildId] is None
or not self.clients[guildId].is_connected()
):
self.clients[guildId] = await voiceChannel.connect(timeout=self.timeout)
print(f"connect to {voiceChannel.name}")
async def disconnect(self, guildId: int) -> None:
if guildId in self.clients and self.clients[guildId].is_connected():
await self.clients[guildId].disconnect()
def play(
self, guildId: int, file: File | str, seekTime: int = 0, after=None
) -> None:
self.clients[guildId].play(
FFmpegOpusAudio(
file.name if isinstance(file, File) else file,
bitrate=256,
before_options="-ss %d" % seekTime,
options="-vn",
),
after=lambda error: self.clients[guildId].loop.create_task(after(error))
if after is not None
else None,
)
def stop(self, guildId) -> None:
self.clients[guildId].stop()