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.0.tar.gz (44.8 kB view details)

Uploaded Source

Built Distribution

dsplayer-2.0.0-py3-none-any.whl (54.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for dsplayer-2.0.0.tar.gz
Algorithm Hash digest
SHA256 ae432067b14e528c013543717e2e24758b1c6272aa54bac342b37ac630e2e7b7
MD5 8b1647caf7cb3d054348f726cad9e72e
BLAKE2b-256 85bf0c9c10c92dda93c5494ed9845208a2c490f88f9bb9b50ed19593bac290e5

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for dsplayer-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 203c27f6396da5955c84ecbf3d986a72a4ff050b799be3fa05c1baf671bd8b0a
MD5 97ac48a26c35db10bb292d09a5e2348e
BLAKE2b-256 0ad663a352105ec2111b53851ee5638ce84dd34a80569d46d57c3231171aa92b

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