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 предоставляет последние изменения и улучшения.


Плагины

В 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.0.1.tar.gz (44.7 kB view details)

Uploaded Source

Built Distribution

dsplayer-2.0.1-py3-none-any.whl (54.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for dsplayer-2.0.1.tar.gz
Algorithm Hash digest
SHA256 d50d2b441ab21367e8d2be1c1f2e4c054bf41e6cdc163d04a0e24bcbcfd64d6e
MD5 975f670be7403a4105bb9bbe50934f7e
BLAKE2b-256 402b3e5b5fd4e358590c0f6e0761844306a1548a7375933ca75df87352de4593

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dsplayer-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 54.0 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.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0bff6e8671e355b8560f0d43414c2dd728ae9fbfc3114f6ac2a370a99a93019f
MD5 a60eb2a3a1785a536278039f785e23fc
BLAKE2b-256 cae3b2fb1a39c0f16a1516bd516a063fdd98dca5d4dd22e0f4898c46ec403cd1

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