Music player for Discord
Project description
DSPlayer
Описание
dsplayer
— это библиотека для создания Discord-ботов, которая позволяет подключаться к голосовым каналам, воспроизводить музыкальные треки и управлять очередями воспроизведения. Библиотека также поддерживает плагины, что позволяет расширять количество доступных платформ для воспроизведения.
Совместимость: dsplayer
работает с библиотеками disnake
, discord.py
и nextcord
.
Установка
Установите библиотеку с помощью pip
из PyPI:
pip install dsplayer
Или установите последнюю версию с GitHub:
pip install git+https://github.com/FlacSy/dsplayer
Примечание: Установка через PyPI гарантирует стабильную версию, тогда как установка с GitHub предоставляет последние изменения и улучшения.
Список изменений
Ниже представлен список изменений для библиотеки, начиная с версии 2.0.0.
-
2.0.0 | Глобальное обновление:
- Обновлены компоненты: плеер, очередь, система плагинов.
- Оптимизирован код для лучшей производительности.
-
2.0.1 | Исправления и улучшения:
- Исправлены ошибки при инициализации некоторых классов.
- Удалены ненужные части кода.
- Добавлен новый метод в очередь:
get_current_track
.
-
2.1.0 | Новая система плагинов:
- Добавлена поддержка двух типов плагинов:
addon
иextractor
. - Частичная обратная совместимость с плагинами старых версий. Для работы старых плагинов необходимо реализовать метод
get_plugin_type
.
- Добавлена поддержка двух типов плагинов:
-
2.2.0 | Исправления и улучшения:
- Удалены лишние фрагменты кода.
- Обновлен стандарт возвращаемых данных плагинов. В этой версии плагины типа
extractor
совместимы только с версиями выше 1.4.0!
Плагины
В dsplayer
предусмотрены следующие плагины:
- Query - Плагин для поиска музыки по названию (включен по умолчанию).
- Spotify - Плагин для поиска треков, плейлистов и авторов из Spotify.
pip install dsplayer-spotify
- YouTube - Плагин для поиска треков из YouTube, YouTube Music и YouTube Shorts.
pip install dsplayer-youtube
- SoundCloud - Плагин для поиска треков, плейлистов и авторов из SoundCloud.
pip install dsplayer-soundcloud
- Apple Music - Плагин для поиска треков из Apple Music.
pip install dsplayer-applemusic
Поисковые движки
В dsplayer
предусмотрены следующие поисковые движки:
- YouTube Music - Более быстрая, но менее точная поисковая система.
- SoundCloud - Более точный поиск, но время отклика 2-3+ секунды.
- Bandcamp - Высокая точность с хорошей производительностью.
⚠️ Важно: SoundCloud работает на Selenium! Для его использования необходимо установить Chrome и соответствующий Chrome Driver.
Примеры использования
Использование Player
и Queue
Пример 1: Подключение и воспроизведение трека
import disnake
from disnake.ext import commands
from dsplayer import Player, PluginLoader, YTMusicSearchEngine
intents = disnake.Intents.all()
bot = commands.Bot(command_prefix='!', intents=intents)
players = {}
@bot.command()
async def play(ctx, url):
"""Добавить трек в очередь и воспроизвести его."""
if ctx.guild.id in players:
player = players[ctx.guild.id]
else:
if ctx.author.voice:
voice_channel = ctx.author.voice.channel
player = Player(
voice_channel=voice_channel,
bot=bot,
plugin_loader=PluginLoader(),
engine=YTMusicSearchEngine,
debug=True
)
players[ctx.guild.id] = player
await player.connect()
else:
await ctx.send('Вы не подключены к голосовому каналу.')
return
await player.play(url)
await ctx.send(f'Трек добавлен в очередь: {url}')
bot.run('YOUR_BOT_TOKEN')
Пример 2: Управление очередью треков
@bot.command()
async def skip(ctx):
"""Пропустить текущий трек."""
if ctx.guild.id in players:
player = players[ctx.guild.id]
await player.skip()
await ctx.send('Играет следующий трек.')
else:
await ctx.send("Нет активного плеера для этого сервера.")
@bot.command()
async def previous(ctx):
"""Вернуться к предыдущему треку."""
if ctx.guild.id in players:
player = players[ctx.guild.id]
await player.previous()
await ctx.send('Играет предыдущий трек.')
else:
await ctx.send("Нет активного плеера для этого сервера.")
@bot.command()
async def queue(ctx):
"""Показать текущую очередь треков."""
if ctx.guild.id in players:
player = players[ctx.guild.id]
queue = player.queue.get_queue()
if queue:
queue_list = "\n".join([f"{idx + 1}. {track['url']}" for idx, track in enumerate(queue)])
await ctx.send(f"Очередь:\n{queue_list}")
else:
await ctx.send("Очередь пуста.")
else:
await ctx.send("Нет активного плеера для этого сервера.")
bot.run('YOUR_BOT_TOKEN')
Пример 3: Обработка событий
from dsplayer import event
@event("on_play_track")
async def on_play_track(event_data: dict):
"""Отправляет сообщение, когда начинается воспроизведение трека."""
track = event_data['track']
channel_id = event_data['text_id']
channel = bot.get_channel(channel_id)
await channel.send(f"Начинается воспроизведение трека: {track['title']}")
PluginLoader
1. Загрузка плагинов из директории
from dsplayer import PluginLoader
plugins_list = ["custom_plugins.plugins"]
loader = PluginLoader(plugins_list)
2. Загрузка плагинов используя класс
from dsplayer import PluginLoader, PluginInterface
loader = PluginLoader()
loader.load_plugins_from_classes(plugins_list)
class MyCustomPlugin1(PluginInterface):
# Реализация плагина
...
class MyCustomPlugin2(PluginInterface):
# Реализация плагина
...
plugins_list = [MyCustomPlugin1, MyCustomPlugin2]
Пример бота можно найти в examples/example_bot.py
Обработка исключений
dsplayer
предоставляет систему обработки исключений, позволяющую гибко реагировать на ошибки. Для этого рекомендуется использовать исключения из модуля dsplayer.utils.exceptions.lib_exceptions
.
Основные исключения
-
VoiceChaneNotConnected
Возникает, если бот пытается воспроизвести трек, не подключившись к голосовому каналу. -
TrackNotFound
Возникает, если указанный трек не найден. -
TrackError
Общая ошибка, связанная с воспроизведением трека.
Пример обработки исключений
from dsplayer.utils.exceptions.lib_exceptions import VoiceChaneNotConnected, TrackNotFound, TrackError
try:
# Ваш код
except VoiceChaneNotConnected as e:
print(f"Ошибка подключения: {e}")
except TrackNotFound as e:
print(f"Трек не найден: {e}")
except TrackError as e:
print(f"Ошибка воспроизведения трека: {e}")
Список доступных исключений
-
VoiceChaneError
- VoiceChaneNotConnected: Бот не подключен к голосовому каналу.
- VoiceChaneNotFound: Указанный голосовой канал не найден.
- VoiceChaneNotPlaying: Бот не воспроизводит трек.
-
ConnectionError
- Проблемы с подключением к голосовому каналу.
-
TrackError
- TrackNotFound: Трек не найден.
- TrackError: Ошибка воспроизведения трека.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file dsplayer-2.2.0.tar.gz
.
File metadata
- Download URL: dsplayer-2.2.0.tar.gz
- Upload date:
- Size: 46.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1239a4f3258e6b81cca0d8deab04f371fc7b9564f020e592cc0f23aa7e611933 |
|
MD5 | c8141a43e256b9ffd0e6c93b40452341 |
|
BLAKE2b-256 | 3d1718234a29a607f76e35809cf0cb91932429d0dc2a3480cad3fbabc4fe74b9 |
File details
Details for the file dsplayer-2.2.0-py3-none-any.whl
.
File metadata
- Download URL: dsplayer-2.2.0-py3-none-any.whl
- Upload date:
- Size: 56.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | df70cf6bf05c4b579e244bb56115439f73ba30f9642d074feee8a68ea01c6d09 |
|
MD5 | 839b4383aad7fc59a9a7bcf6157fad3f |
|
BLAKE2b-256 | ccec05b96127957d9c26427c00e547725a811253208ff0ef0a0f9b69c898026f |