Как создать музыкального бота в discord python

Обновлено: 21.11.2024

Это список часто задаваемых вопросов об использовании discord.py и его модулей расширения. Не стесняйтесь предлагать новый вопрос или отправлять его с помощью запросов на вытягивание.

Сопрограммы¶

Вопросы о сопрограммах и асинхронности относятся сюда.

Что такое сопрограмма?¶

Сопрограмма – это функция, которую необходимо вызывать с помощью команды await или yield from . Когда Python сталкивается с ожиданием, он останавливает выполнение функции в этой точке и работает над другими вещами, пока не вернется к этой точке и не завершит свою работу. Это позволяет вашей программе делать несколько вещей одновременно без использования потоков или сложной многопроцессорной обработки.

Если вы забудете дождаться сопрограммы, сопрограмма не запустится. Никогда не забывайте ждать сопрограммы.

Где я могу использовать await?¶

Вы можете использовать await только внутри функций асинхронного определения и нигде больше.

Что означает «блокировка»?¶

В асинхронном программировании блокирующий вызов — это, по сути, все части функции, которые не являются await . Однако не отчаивайтесь, потому что не все формы блокировки плохи! Использование блокирующих вызовов неизбежно, но вы должны работать над тем, чтобы не чрезмерно блокировать функции. Помните, что если вы будете блокировать слишком долго, ваш бот зависнет, так как он не остановил выполнение функции в этот момент, чтобы заняться другими делами.

Если ведение журнала включено, эта библиотека попытается предупредить вас о блокировке сообщением: Heartbeat заблокирован более чем на N секунд. Дополнительные сведения о включении ведения журнала см. в разделе Настройка ведения журнала.

Распространенным источником слишком долгой блокировки является что-то вроде time.sleep() . Не делай этого. Вместо этого используйте asyncio.sleep(). Аналогично этому примеру:

Рассмотрите следующий пример:

Общие¶

Общие вопросы, касающиеся использования библиотеки, относятся сюда.

Где найти примеры использования?¶

Пример кода можно найти в папке примеров в репозитории.

Как установить статус «В игре»?¶

Существует высокая вероятность отключения, если присутствие изменяется сразу после подключения.

Тип состояния (воспроизведение, прослушивание, потоковая передача, просмотр) можно задать с помощью перечисления ActivityType. В целях оптимизации памяти некоторые действия предлагаются в упрощенных версиях:

Соединяя обе эти части информации, вы получаете следующее:

Как отправить сообщение на определенный канал?¶

Вы должны получить канал напрямую, а затем вызвать соответствующий метод. Пример:

Как отправить личное сообщение?¶

Получите объект User или Member и вызовите abc.Messageable.send() . Например:

Если вы отвечаете на событие, такое как on_message() , у вас уже есть объект User через Message.author :

Как получить идентификатор отправленного сообщения?¶

abc.Messageable.send() возвращает отправленное сообщение. Доступ к идентификатору сообщения можно получить через Message.id :

Как загрузить изображение?¶

Чтобы загрузить что-либо в Discord, вы должны использовать объект File.

Файл принимает два параметра: файлоподобный объект (или путь к файлу) и имя файла, которое передается в Discord при загрузке.

Если вы хотите загрузить изображение, это так же просто, как:

Если у вас есть файлоподобный объект, вы можете сделать следующее:

Чтобы загрузить несколько файлов, вы можете использовать аргумент ключевого слова files вместо файла:

Как я могу добавить реакцию на сообщение?¶

Если вы хотите использовать смайлики в формате Unicode, вы должны передать действующую кодовую точку Unicode в строке. В своем коде вы можете написать это несколькими способами:

Если вы хотите использовать эмодзи из сообщения, вы уже получаете их кодовые точки в содержании, и вам не нужно делать ничего особенного. Вы не можете отправлять сокращения в стиле ':thumbsup:'.

Для пользовательских эмодзи необходимо передать экземпляр эмодзи . Вы также можете передать строку ' ', но если вы можете использовать указанный смайлик, вы должны иметь возможность использовать Client.get_emoji() для получения смайлика через идентификатор или использовать utils.find() / utils.get() на клиенте. коллекции emojis или Guild.emojis.

Название и идентификатор пользовательского смайлика можно найти в клиенте, добавив перед :custom_emoji: обратную косую черту. Например, отправка сообщения \:python3: клиенту приведет к .

Как передать сопрограмму в функцию «после» игрока?¶

Музыкальный проигрыватель библиотеки запускается в отдельном потоке, поэтому он не выполняется внутри сопрограммы. Это не означает, что нельзя вызвать сопрограмму в параметре after. Для этого вы должны передать вызываемый объект, который оборачивает пару аспектов.

Однако эта функция возвращает Future, и чтобы ее вызвать, нам нужно получить ее результат. Собрав все это вместе, мы можем сделать следующее:

Как запустить что-то в фоновом режиме?¶

Как получить конкретную модель?¶

Есть несколько способов сделать это.Если у вас есть идентификатор конкретной модели, вы можете использовать одну из следующих функций:

Discord API предоставляет вам простой инструмент для создания и использования собственных ботов и инструментов. Сегодня мы рассмотрим, как мы можем создать простого музыкального бота и добавить его на наш сервер. Бот сможет воспроизводить, пропускать и останавливать музыку, а также поддерживать функции очередей.

Предпосылки

Прежде чем мы начнем создавать бота, убедитесь, что у вас установлены все необходимые инструменты.

После установки мы можем продолжить настройку нашего бота для разногласий.

Настройка бота для разногласий

Во-первых, нам нужно создать новое приложение на портале разработки Discord.

Мы можем сделать это, посетив портал и нажав новое приложение.

Создание нового приложения

После этого нам нужно дать нашему приложению имя и нажать кнопку "Создать".

Создание бота для разногласий

После этого нам нужно выбрать вкладку бота и нажать добавить бота.

Информационная страница Discord-бота

Теперь наш бот создан, и мы можем продолжить его приглашение на наш сервер.

Добавление бота на ваш сервер

После создания нашего бота мы можем пригласить его с помощью генератора URL-адресов OAuth2.

Для этого нам нужно перейти на страницу OAuth2 и выбрать бота в области касания.

Вкладка OAuth2

После этого нам нужно выбрать необходимые разрешения для воспроизведения музыки и чтения сообщений.

Предоставление боту Discord необходимых разрешений

Затем мы можем скопировать сгенерированный URL-адрес и вставить его в наш браузер.

Ссылка для приглашения бота Discord

После вставки мы добавляем его на наш сервер, выбрав сервер и нажав кнопку авторизации.

Пригласить бота на сервер

Создание нашего проекта

Теперь мы можем начать создавать наш проект, используя наш терминал.

Сначала мы создаем каталог и переходим в него. Мы можем сделать это с помощью этих двух команд.

После этого мы можем создавать модули нашего проекта с помощью команды npm init. После ввода команды вам будет задано несколько вопросов, просто ответьте на них и продолжайте.

Тогда нам просто нужно создать два файла, с которыми мы будем работать.

Теперь нам просто нужно открыть наш проект в текстовом редакторе. Я лично использую VS Code и могу открыть его с помощью следующей команды.

Основы Discord js

Теперь нам просто нужно установить некоторые зависимости, прежде чем мы сможем начать.

После завершения установки мы можем продолжить запись файла config.json. Здесь мы сохраняем токен нашего бота и префикс, который он должен прослушивать.

Чтобы получить токен, вам нужно снова посетить портал разработчиков Discord и скопировать его из раздела ботов.

Копировать токен

Это единственное, что нам нужно сделать в нашем файле config.json. Итак, давайте начнем писать наш код JavaScript.

Во-первых, нам нужно импортировать все наши зависимости.

После этого мы можем создать наш клиент и войти в систему, используя наш токен.

Теперь давайте добавим несколько простых слушателей, которые будут регистрироваться в console.log при их выполнении.

После этого мы можем запустить нашего бота с помощью команды узла, и он должен быть в сети в дискорде и вывести «Готово!» в консоли.

Чтение сообщений

Теперь, когда наш бот находится на нашем сервере и может подключаться к Интернету, мы можем начать читать сообщения чата и отвечать на них.

Для чтения сообщений нам нужно написать только одну простую функцию.

Здесь мы создаем прослушиватель для события сообщения, получаем сообщение и сохраняем его в объекте сообщения, если оно срабатывает.

Теперь нам нужно проверить, исходит ли сообщение от нашего собственного бота, и проигнорировать его, если это так.

В этой строке мы проверяем, является ли автор сообщения нашим ботом, и возвращаем результат, если это так.

После этого мы проверяем, начинается ли сообщение с префикса, который мы определили ранее, и возвращаем значение, если это не так.

После этого мы можем проверить, какую команду нам нужно выполнить. Мы можем сделать это, используя несколько простых операторов if.

В этом блоке кода мы проверяем, какую команду выполнять, и вызываем команду. Если команда ввода недействительна, мы пишем сообщение об ошибке в чат, используя функцию send() .

Теперь, когда мы знаем, какую команду нам нужно выполнить, мы можем приступить к реализации этих команд.

Добавление песен

Начнем с добавления команды воспроизведения. Для этого нам нужна песня и гильдия (гильдия представляет собой изолированный набор пользователей и каналов и часто называется сервером). Нам также понадобится библиотека ytdl, которую мы установили ранее.

Во-первых, нам нужно создать карту с названием очереди, куда мы сохраняем все песни, которые мы набираем в чате.

После этого мы создаем асинхронную функцию с именем execute и проверяем, находится ли пользователь в голосовом чате и есть ли у бота соответствующие права. Если нет пишем сообщение об ошибке и возвращаемся.

Теперь мы можем продолжить получение информации о песне и сохранить ее в объект песни. Для этого мы используем нашу библиотеку ytdl, которая получает информацию о песне по ссылке на YouTube.

Это позволит получить информацию о песне с помощью библиотеки ytdl , которую мы установили ранее. Затем мы сохраняем необходимую информацию в объект песни.

После сохранения информации о песне нам просто нужно создать контракт, который мы можем добавить в нашу очередь. Для этого нам сначала нужно проверить, определена ли уже наша serverQueue, что означает, что музыка уже играет. Если это так, нам просто нужно добавить песню в нашу существующую очередь serverQueue и отправить сообщение об успешном завершении. Если нет, нам нужно создать его и попытаться присоединиться к голосовому каналу и начать воспроизводить музыку.

Здесь мы проверяем, пуста ли serverQueue , и добавляем в нее песню, если это не так. Теперь нам просто нужно создать наш контракт, если serverQueue нуль.

В этом блоке кода мы создаем контракт и добавляем нашу песню в массив песен. После этого мы пытаемся присоединиться к голосовому чату пользователя и вызываем нашу функцию play(), которую мы реализовать после этого.

Воспроизведение песен

Теперь, когда мы можем добавить наши песни в нашу очередь и создать контракт, если его еще нет, мы можем приступить к реализации нашей функции воспроизведения.

Сначала мы создадим функцию play, которая принимает два параметра (гильдия и песня, которую мы хотим воспроизвести) и проверяет, пуста ли песня. Если это так, мы просто покинем голосовой канал и удалим очередь.

После этого мы начнем воспроизводить нашу песню, используя функцию соединения play() и передав URL-адрес нашей песни.

Здесь мы создаем поток и передаем ему URL-адрес нашей песни. Мы также добавляем два слушателя, которые обрабатывают события конца и ошибки.

Примечание: это рекурсивная функция, что означает, что она вызывает сама себя снова и снова. Мы используем рекурсию, поэтому она воспроизводит следующую песню, когда песня закончена.

Теперь мы готовы воспроизвести песню, просто набрав !play URL в чате.

Пропуск песен

Теперь мы можем приступить к реализации функции пропуска. Для этого нам просто нужно завершить диспетчер, который мы создали в нашей функции play(), чтобы он запускал следующая песня.

Здесь мы проверяем, находится ли пользователь, введший команду, в голосовом канале и есть ли песня, которую нужно пропустить.

Остановка песен

Функция stop() почти аналогична функции skip() за исключением того, что мы очищаем массив песен, из-за чего наш бот удаляет очередь и покидает голосовой чат.

Полный исходный код index.js:

Здесь вы можете получить полный исходный код нашего музыкального бота:

Заключение

Вы дошли до конца! Надеюсь, что эта статья помогла вам понять API Discord и то, как вы можете использовать его для создания простого бота. Если вы хотите увидеть пример более продвинутого бота для разногласий, вы можете посетить мой репозиторий Github.

Если вы нашли это полезным, подумайте о том, чтобы порекомендовать его и поделиться им с другими разработчиками.

Если у вас есть какие-либо вопросы или отзывы, дайте мне знать в комментариях ниже.

Если вы являетесь пользователем Discord, вы наверняка видели несколько ботов Discord на популярных серверах. Будь то музыкальный бот или бот для модерации сервера, почти для всего найдется бот. Но если вы заинтересованы в создании бота Discord самостоятельно, следуйте нашему руководству, чтобы создать простого бота Discord в 2022 году и позже.

Создать Discord-бота (2022)

Необходимые условия для создания Discord-бота

Чтобы эффективно просматривать, писать и изменять код, вы можете использовать любой из этих лучших текстовых редакторов для написания кода. Если бы нам нужно было выбрать одну из них, мы бы выбрали Visual Studio Code от Microsoft (скачать), в которой также есть множество тем VSCode.

Настроить учетную запись Discord Bot и добавить на сервер Discord

<р>1. Посетите портал разработчиков Discord и войдите в свою учетную запись Discord. Оказавшись там, нажмите кнопку «Новое приложение» в правом верхнем углу, чтобы начать.

<р>2. Введите имя для вашего приложения и нажмите «Создать». Обратите внимание, что имя приложения не обязательно должно совпадать с именем бота. Вы можете изменить имя бота позже.

<р>3. Теперь перейдите в раздел «Бот» на левой боковой панели и нажмите «Добавить бота».

<р>4. Когда появится всплывающее окно, нажмите «Да, сделайте это!» чтобы продолжить.

<р>5. Теперь Discord создал вашего бота. Теперь вы можете изменить имя и значок бота в разделе «Бот». Перед этим нажмите на кнопку «Копировать» под «Токеном», чтобы скопировать токен бота. Токен бота потребуется позже. Имейте в виду, что вы не должны никому передавать токен своего бота, так как он предоставляет им доступ к вашему боту.

<р>6. Теперь разверните вкладку «OAuth2» на левой боковой панели и перейдите в раздел «Генератор URL». Здесь выберите «бот» в качестве области действия и предоставьте соответствующие разрешения для бота. Для этой демонстрации мы даем боту права администратора.

<р>7. Прокрутите вниз и нажмите кнопку «Копировать», чтобы скопировать URL-адрес бота.

<р>8. Перейдите по скопированному URL-адресу из браузера, чтобы добавить бота на свой сервер Discord. Все, что вам нужно сделать, это выбрать сервер из списка «Добавить на сервер» и нажать «Продолжить», чтобы добавить бота.

Создайте и разместите бота Discord локально на своем ПК

Теперь, когда вы добавили бота на свой сервер Discord, пришло время настроить его. Просто следуйте инструкциям ниже, чтобы локально разместить бота Discord на своем ПК.

<р>1. Создайте новую папку в любом месте на вашем ПК. Затем вы должны создать в этой папке два файла — .env, bot.js. Вставьте в файл .env скопированный ранее токен бота в следующем формате:

<р>2. Затем добавьте следующий код в файл bot.js. С помощью этого кода бот будет отвечать «pong» всякий раз, когда пользователь отправляет «ping».

<р>4. Теперь установите библиотеку Discord.js с помощью следующей команды:

<р>5. Далее вы должны создать файл package.json с помощью команды «npm init -y».

<р>6.Наконец-то вы можете использовать команду «node bot.js» для запуска своего бота Discord.

<р>7. Как вы можете видеть ниже, бот работает как положено и ответил на мое тестовое сообщение.

Создание и размещение бота Discord в облаке

Если вы предпочитаете размещать своего бота Discord в Интернете, мы рекомендуем использовать Replit. Для тех, кто не знает, Replit — это онлайн-среда разработки, в которой вы можете запускать и размещать более 50 языков программирования. Кроме того, процесс настройки Replit также довольно прост. Итак, давайте приступим к делу.

<р>1. Сначала вы должны зарегистрировать новую учетную запись Replit. Вы можете использовать свой адрес электронной почты или продолжить работу со своими учетными записями Google, GitHub или Facebook.

<р>2. Нажмите кнопку «Создать» в левом верхнем углу, чтобы создать новый проект.

<р>3. В появившемся всплывающем окне выберите шаблон Node.js, назовите свой проект и нажмите «Создать реплику».

<р>4. Найдите символ замка на левой боковой панели и вставьте ранее скопированный токен бота. Вы должны вставить токен в поле «значение» и установить имя токена в поле «ключ». Нажмите «Добавить новый секрет», чтобы подтвердить токен и добавить его в свой код Node.js.

<р>5. Вставьте следующий код и нажмите зеленую кнопку «Выполнить» вверху, чтобы запустить проект. Теперь вы можете использовать своего бота даже после выключения компьютера.

<р>6. Вы можете вернуться в проект Replit и нажать кнопку «Стоп», чтобы остановить бота. И вот оно. Вы можете изменить код бота, чтобы добавить или удалить нужные вам функции.

Часто задаваемые вопросы

В: Могу ли я бесплатно создать бота Discord?

Да, вы можете бесплатно создать бота Discord и разместить его локально на своем ПК или в облаке.

В: Как создать бота Discord без программирования?

Если вам нужно создать бота Discord без программирования, вам придется поискать примеры проектов бота Discord, которые сделали другие, и изменить бота в соответствии с вашими потребностями. Если это окажется проблемой, вы всегда можете использовать одного из доступных лучших ботов Discord, чтобы улучшить возможности вашего сервера.

В: Могу ли я использовать Discord.py для создания своего бота Discord?

Разработчик популярной библиотеки Discord Python «discord.py» недоволен обязательным переходом Discord на команды с косой чертой для проверенных ботов с апреля 2022 года и решил прекратить поддержку этой библиотеки. Библиотека больше не разрабатывается, и страница GitHub Discord.py теперь доступна только для чтения. Хотя на данный момент неподтвержденные боты не затронуты, это может измениться в будущем.

Создайте собственного Discord-бота

Итак, вот как вы можете создать бота в Discord. Хотя мы показали простого бота, который отвечает на текст, возможности настройки возможностей бота безграничны. Если вам нужно вдохновение или идеи для вашего нового бота Discord, прочтите нашу статью о лучших ботах Discord и попробуйте реализовать функции, которые вам нравятся больше всего.

Поддержка библиотеки discord.py больше не поддерживается. Это руководство по-прежнему будет работать для discord.py версий 1.6.0-1.7.3, но некоторые части могут быть повреждены в версии 2.0.0 и выше, на чем основано большинство форков библиотеки. Однако многие из этих библиотек, такие как pycord, nextcord и disnake, предоставляют прокладки, которые позволяют вам продолжать использовать пространство имен discord, поэтому большую часть этого руководства по-прежнему можно использовать и с этими библиотеками.

В настоящее время я не уверен в будущем этого руководства.Мне нравится создавать ботов Discord, язык Python и создавать контент, чтобы помочь другим людям узнать об обеих этих вещах, но в текущем нестабильном состоянии экосистемы ботов Discord в Python я не чувствую себя комфортно, создавая какой-либо контент вокруг нее до тех пор, пока Я могу быть уверен, что библиотека, которую я выберу, останется, и моя работа не будет напрасной.

Однако я хотел бы сказать, что, просмотрев несколько доступных библиотек (pycord, nextcord и disnake), я считаю, что на данный момент есть одна явная победительница из-за ее сходства по стилю с оригинальным discord. ру, умные и разумные дизайнерские решения, и вообще направление, в котором оно движется: disnake. Я лично хотел бы, чтобы эта библиотека выиграла эту битву, поскольку ее дизайнерские решения кажутся хорошо продуманными, особенно реализация команд с косой чертой.

Учебное пособие, в котором подробно объясняется, как создать собственного бота Discord с помощью библиотеки discord.py.

Некоторые примечания перед началом

Для этого урока вам понадобится:

  • Установлен Python 3.6 или более поздней версии.
  • discord.py 1.6.0 или более поздней версии установлен
  • Средний опыт работы с Python или сильное желание учиться

Невероятно полезным ресурсом для вас на протяжении всего обучения будет документация discord.py

Если вы обнаружите, что в руководстве что-то не так или у вас есть предложения по его улучшению, создайте вопрос в репозитории.

Библиотека discord.py — это расширенная библиотека Python. Таким образом, в этом руководстве предполагается наличие определенного уровня промежуточных знаний Python, а базовые функции Python не рассматриваются и не объясняются. При этом, если вы хотите учиться и искать то, чего не понимаете, по ходу дела, нет никаких причин, по которым вы не сможете участвовать.

Исходя из этого руководства, вы сами пишете код и понимаете, что пишете. Я стремлюсь объяснить, что я делаю, и прояснить решения, которые я принимаю, но это руководство не поможет вам, если вы решите скопировать и вставить его содержимое, а не пытаться понять и решить его самостоятельно. Я настоятельно рекомендую вам поиграть с кодом, который вы пишете, и сделать его отличным от того, что вы видите здесь. Это поможет вам научиться использовать discord.py, а не даст вам код для бота.

Индекс

Дополнительно

Если это руководство помогло вам, рассмотрите возможность поддержки меня на Ko-fi, чтобы я мог продолжать работать над проектами, подобными этому: P

Читайте также: