Skip to main content

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.

Плагины

В 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dsplayer-2.1.0.tar.gz (46.0 kB view details)

Uploaded Source

Built Distribution

dsplayer-2.1.0-py3-none-any.whl (55.4 kB view details)

Uploaded Python 3

File details

Details for the file dsplayer-2.1.0.tar.gz.

File metadata

  • Download URL: dsplayer-2.1.0.tar.gz
  • Upload date:
  • Size: 46.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.0

File hashes

Hashes for dsplayer-2.1.0.tar.gz
Algorithm Hash digest
SHA256 f3afe1441e19a3f0c997c8208de557073225b769a59f90ae52d9a9b12def0ed8
MD5 f0f45f6fd86fb4493e69c8e9fc3712d2
BLAKE2b-256 e1eb6b1ab60f6d162ebad5ee3e6686bec3640f5a45c0d2a1ce5351921391c15c

See more details on using hashes here.

File details

Details for the file dsplayer-2.1.0-py3-none-any.whl.

File metadata

  • Download URL: dsplayer-2.1.0-py3-none-any.whl
  • Upload date:
  • Size: 55.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.0

File hashes

Hashes for dsplayer-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2ec67e783d3f39ba59a5657b04d696249e1b1a4ec1cc520acae1001c95b8a900
MD5 cf5cc6756ef8ecbb900f75a4d02e4d7c
BLAKE2b-256 91f996d396c25af29918371bc8d397808ef86e52dd75b05a179665995e81550b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page