код музыкального бота на python для дискорда
Создание Discord-бота на Python. Часть 1
Версия Python: 3.8.2
Версия discord.py: 1.3.3
Приветствую, хабровчане и другие пользователи интернета. Сегодня я начну цикл статей, посвящённых созданию Discord-бота с помощью библиотеки discord.py. Мы рассмотрим создание как и примитивного бота, как и «продвинутого» бота с модулями. В этой статье мы сделаем стандартную команду и ещё одну небольшую команду. Начнём!
Создание бота и получение токена
Для того, чтобы добавить бота на сервер нужно создать свое приложение и во вкладке General Information скопировать Client ID.
Здесь заменяем CLID на ранее скопированный Client ID.
Во вкладке Bot создаём бота и копируем токен.
Написание кода
Устанавливаем саму библиотеку.
Создаём файл config.py (так удобнее), и создаём там словарь.
Создаём main-файл, название может быть любое.
Импортируем библиотеки и наш файл конфига:
Создаём «тело» бота, название может быть любое:
Начинаем писать основной код.
В конце запускаем бота с помощью:
Должно получится так:
Бонусный туториал!
Сделаем вывод случайных картинок с лисами
Для этого импортируем еще пару библиотек:
Приступим к написанию команды.
Должно получится так:
Конец
На этом 1 часть закончена. Скоро будет опубликована 2 часть.
Discord бот на Python
В данной статье мы создадим Discord бот, используя при этом только Python.
Краткая информация о Discord для тех, кто еще о нем не знает
Discord — это, фактически, универсальная платформа голосового и текстового общения для геймеров.
Игроки, стримеры, студенты и разработчики используют Discord, чтобы обсуждать игры, отвечать на вопросы, общаться в чате во время игры в хорошем качестве, в том числе с членами своей команды. В нем даже есть игровой магазин с критическими отзывами и возможностью подписки. По сути, это центр игровых сообществ.
Хотя есть много вещей, которые вы можете создать с помощью API Discord, в этом руководстве мы остановимся на создании бота на Python.
Необходимые приготовления
Чтобы создать Discord бот, вам понадобится:
Что такое боты?
Бот (сокращение от «робот») — это программа, которая выполняет автоматические, повторяющиеся и заранее определенные задачи. Боты обычно имитируют человеческое поведение или подменяют его. Поскольку все их действия автоматизированы, они работают намного быстрее, чем обычные пользователи.
Боты очень часто используются для ответов на типовые вопросы, возникающие в различных сообществах. Они действуют как своего рода представители человека для выполнения различных функций. Основной особенностью такого бота является то, что он устраняет необходимость вручную отвечать каждому участнику и полностью автоматизирует данный процесс.
Для чего нужны чат-боты
Автоматизация ответов на основные вопросы
В любой области деятельности всегда есть вопросы, которые пользователи задают чаще всего. И на эти вопросы каждый раз надо давать одни и те же ответы. Лучшее решение в таком случае — чат-бот.
Ускорение рабочих процессов
Чат-боты, в отличии от людей, никогда не устают. Все люди могут работать только ограниченный период времени, в то время как у ботов таких ограничений нет. Использование чат-ботов в бизнесе хорошо дополняет работу людей, повышает производительность труда и сокращает человеческий труд.
Экономия денег и времени
При правильном использовании дружелюбного чат-бота привлечение клиентов происходит с минимальными затратами и максимальной эффективностью.
Марк Лутц «Изучаем Python»
Скачивайте книгу у нас в телеграм
Пишем код для чат-бота
Сперва убедитесь, что на вашем компьютере установлен Python. Если его еще нет, то загрузите его с официального сайта.
Среду программирования можно использовать любую, какая вам больше нравится. Например, PyCharm, VS Code или Sublime.
Теперь выберите опцию New application (новое приложение) в правом верхнем углу страницы и дайте вашему новому приложению имя. Как видите, можно даже добавить изображение к аватару вашего бота. Мы можем сделать это позже. Сейчас пойдем в раздел Bot (на странице слева) и выберем опцию Add bot (добавить бота).
Затем откройте ссылку под секцией scope в новом окне и выберите сервер, на котором вы желаете видеть ваш бот.
Для этого введем следующую команду:
Основная задача нашего тестового бота будет состоять в том, чтобы давать ответ всем пользователям на их сообщение «Hello». Но вы, конечно, можете его настроить в соответствии с вашими потребностями.
Для начала импортируем необходимые библиотеки:
Создадим переменную Client :
Напишем следующий код для определения статуса бота:
Это сообщение будет отображаться всякий раз, когда вы размещаете своего бота в сети. Вы также можете проверить статус бота из самого Discord.
Это сообщение подтверждает, что наш бот готов к использованию на сервере.
Теперь, когда бот готов к работе, мы можем ответить пользователям на их приветствие hello :
Для запуска бота нам понадобится токен. Он находится в разделе Bot на сайте Discord. Мы заходили туда при создании бота.
Теперь настало время запустить нашего бота!
Откройте CMD и наберите следующую команду:
Если так не выходит, то наберите вот это:
Точно таким же образом пишем бот для приветствия новых участников:
Возможные проблемы при создании бота
Все может быть не так просто, как это кажется на первый взгляд. Вы обязательно должны помнить о проблемах, с которыми можете столкнуться при создании бота. Некоторые из них мы перечислили ниже:
Заключение
Мы рассмотрели, как создать Discord бот на Python. Разумеется, это был простейший бот. Но вы, конечно же, можете написать свой собственный код и добавить множество различных функций, например OCR.
Создание музыкального бота в Discord
В этой статье речь пойдет о ручном создании бота для воспроизведения музыки в Discord. Вы можете как просто скопировать весь представленный код, так и редактировать его под себя, если владеете навыками JavaScript. Созданный нами бот был проверен, но на некоторых этапах пользователь все же может столкнуться с разными проблемами, поэтому советуем внимательно читать не только нашу инструкцию, но и появляющиеся на экране коды ошибок, если такие будут.
Если же окажется, что данный материал слишком сложный для вас или не подходит по другим причинам, используйте готовые бесплатные боты для воспроизведения музыки. В статье по ссылке ниже вы найдете детальную информацию об этом и сможете реализовать поставленную задачу.
Шаг 1: Создание нового приложения
Каждый бот для Дискорда должен быть зарегистрирован на официальном портале для разработчиков. Так вы получаете доступ ко всем необходимым настройкам, связанным с разрешениями и общим поведением бота, сможете скопировать ссылку на его авторизацию в личном сервере и использовать уникальный токен, который нужен для дальнейшей разработки команд.
Теперь у вас есть приложение бота с уникальным токеном, а бот уже добавлен на сервер, но пока находится в офлайн-режиме. Для начала его работы придется выполнить еще несколько действий уже на локальном компьютере, поскольку пока мы не выгружаем бота на хостинг для автономного функционирования.
Шаг 2: Подготовительные действия
К подготовительным действиям относится создание требуемых каталогов и файлов, установка инструментов и зависимостей для них. В этом нет ничего сложного, нужно лишь по очереди произвести каждое действие, внимательно следя за тем, чтобы ни на одном этапе не появились ошибки.
В итоге в домашней папке пользователя должны появиться файлы, связанные с компонентом Node.js и добавленным после модулем. Перезагрузите компьютер, чтобы при дальнейшем запуске бота не возникло трудностей, затем переходите к следующему шагу.
Шаг 3: Редактирование файла конфигурации бота
Вы уже знаете, что в созданном файле конфигурации бота будет всего пара строк кода, отвечающих за используемый префикс (символ перед вводом команды на сервере) и уникальный токен, определяющий приложение в API. Для выполнения всех дальнейших действий рекомендуем скачать программу с поддержкой синтаксиса JS или любой продвинутый текстовый редактор, если этого не было сделано ранее. В статье по ссылке ниже вы сможете ознакомиться с доступными подходящими решениями.
Как только ПО установлено на компьютер и готово к работе, можно смело приступать к редактированию конфигурационного файла, вводя туда пользовательские данные.
На этом действия с конфигурационным файлом завершены, больше там не нужно прописывать ни одной строчки кода. Закройте его, не забыв сохранить внесенные правки, и приступайте к дальнейшему написанию бота для воспроизведения музыки.
Шаг 4: Пробный запуск бота
const Discord = require(‘discord.js’);
const <
prefix,
token,
> = require(‘./config.json’);
const ytdl = require(‘ytdl-core’);
const client = new Discord.Client();
client.login(token);
client.once(‘ready’, () =><
console.log(‘Ready!’);
>);
client.once(‘reconnecting’, () =><
console.log(‘Reconnecting!’);
>);
client.once(‘disconnect’, () =><
console.log(‘Disconnect!’);
>);
Шаг 5: Написание основного кода музыкального бота
Остался самый сложный процесс — написание основного кода для музыкального бота. Есть перечень задач, который он должен выполнять: чтение сообщений и обработка команд, определение названия песни или ее адреса, подключение к голосовому каналу и воспроизведение. Разрешения на все это у бота есть, поэтому нужно лишь указать ему на действия при помощи функций JavaScript, что выполняется в том же файле «index.js».
Добавьте простую функцию для чтения сообщений:
client.on(‘message’, async message => <
Она состоит всего из двух строк, но позволит боту принять пользовательский запрос и корректно обработать. Можно сказать, что это одна из важнейших команд для ботов любых типов. Обязательно добавьте игнорирование сообщений от других ботов, введя
if (message.author.bot) return;
Это позволяет избежать конфликтов при одновременном использовании нескольких ботов на сервере. Далее понадобится проверить префикс, чтобы бот принял команду или вернул ее.
if (!message.content.startsWith(prefix)) return;
Проверка запускаемых команд осуществляется при помощи простых операторов if, а конструкция в нашем случае выглядит следующим образом:
const serverQueue = queue.get(message.guild.id);
if (message.content.startsWith(`$
execute(message, serverQueue);
return;
> else if (message.content.startsWith(`$
skip(message, serverQueue);
return;
> else if (message.content.startsWith(`$
stop(message, serverQueue);
return;
> else <
message.channel.send(‘Вы должны использовать существующую команду!’)
>
Обратите внимание на то, что функция send(») отправляет пользователю сообщение, если вдруг он вводит нерабочую команду. Это сообщение вы можете редактировать, изменяя надпись в кавычках.
const queue = new Map();
Он отправляет все команды в очередь и заставляет песни играть только тогда, когда предыдущая заканчивается. Далее понадобится создать функцию, которая будет проверять, подключился ли пользователь к голосовому каналу и есть ли у бота соответствующие разрешения.
Следующее действие — подключение библиотеки ytdl, поскольку этот бот будет считывать название песни по ссылке с YouTube, после чего воспроизводить ее на сервере. Для нее понадобится вставить всего небольшой кусочек кода.
const songInfo = await ytdl.getInfo(args[1]);
const song = <
title: songInfo.title,
url: songInfo.video_url,
>;
Следующий блок кода позволит понять, есть ли песни в очереди или можно сразу же подключиться к голосовому каналу и начать воспроизведение.
>else <
serverQueue.songs.push(song);
console.log(serverQueue.songs);
return message.channel.send(`$
>
Далее идет немного сложная для начинающих программистов схема контракта, которая добавляет песню в массив и делает то же самое при каждом вводе !play, проверяя очередь и выбирая правильное действие. Обратите внимание на представленные комментарии, которые и позволяют разобраться со всеми тонкостями.
// Создание контракта для очереди
const queueContruct = <
textChannel: message.channel,
voiceChannel: voiceChannel,
connection: null,
songs: [],
volume: 5,
playing: true,
>;
// Установка очереди с помощью нашего контракта
queue.set(message.guild.id, queueContruct);
// Вставляем композицию в наш массив песен
queueContruct.songs.push(song);
try <
// Здесь мы пытаемся присоединиться к голосовому чату и сохранить соединение в объекте
var connection = await voiceChannel.join();
queueContruct.connection = connection;
// Вызов функции воспроизведения для запуска песни
play(message.guild, queueContruct.songs[0]);
> catch (err) <
// Вывод сообщения об ошибке, если бот не может присоединиться к голосовому чату
console.log(err);
queue.delete(message.guild.id);
return message.channel.send(err);
>
function play(guild, song) <
const serverQueue = queue.get(guild.id);
if (!song) <
serverQueue.voiceChannel.leave();
queue.delete(guild.id);
return;
>
>
Проигрывание же начинается при помощи функции playStream() и указанной ссылки на трек.
const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
.on(‘end’, () => <
console.log(‘Музыка кончилась!’);
// Удаляет законченную песню из очереди
serverQueue.songs.shift();
// Снова вызывает функцию воспроизведения со следующей песней
play(guild, serverQueue.songs[0]);
>)
.on(‘error’, error => <
console.error(error);
>);
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
Если вы хотите добавить функцию пропуска песен, например, когда решили проиграть плейлист, сначала позаботьтесь о соответствующей команде, а затем добавьте такой фрагмент:
function skip(message, serverQueue) <
if (!message.member.voiceChannel) return message.channel.send(‘Вы должны быть в голосовом канале, чтобы остановить музыку!’);
if (!serverQueue) return message.channel.send(‘Нет песни, которую я мог бы пропустить!’);
serverQueue.connection.dispatcher.end();
>
Примерно по той же схеме работает и функция остановки, но блок с кодом обретает немного другой вид:
function stop(message, serverQueue) <
if (!message.member.voiceChannel) return message.channel.send(‘
Вы должны быть в голосовом канале, чтобы остановить музыку!’);
serverQueue.songs = [];
serverQueue.connection.dispatcher.end();
>
Учитывайте, что представленная выше информация подходит исключительно для тех пользователей, кто уже знаком с языком JavaScript или только занимается его изучением и решил создать музыкального бота. Если вы не владеете навыками вообще и указанные блоки с кодом вам вообще ни о чем не говорят, просто вставьте весь исходный код в файл, замените сообщения от бота на русские (они находятся в кавычках) и сохраните изменения. Весь исходный код имеет такой вид:
const Discord = require(‘discord.js’);
const <
prefix,
token,
> = require(‘./config.json’);
const ytdl = require(‘ytdl-core’);
const client = new Discord.Client();
const queue = new Map();
client.on(‘message’, async message => <
if (message.author.bot) return;
if (!message.content.startsWith(prefix)) return;
const serverQueue = queue.get(message.guild.id);
if (message.content.startsWith(`$
execute(message, serverQueue);
return;
> else if (message.content.startsWith(`$
skip(message, serverQueue);
return;
> else if (message.content.startsWith(`$
stop(message, serverQueue);
return;
> else <
message.channel.send(‘You need to enter a valid command!’)
>
>);
async function execute(message, serverQueue) <
const args = message.content.split(‘ ‘);
const songInfo = await ytdl.getInfo(args[1]);
const song = <
title: songInfo.title,
url: songInfo.video_url,
>;
if (!serverQueue) <
const queueContruct = <
textChannel: message.channel,
voiceChannel: voiceChannel,
connection: null,
songs: [],
volume: 5,
playing: true,
>;
try <
var connection = await voiceChannel.join();
queueContruct.connection = connection;
play(message.guild, queueContruct.songs[0]);
> catch (err) <
console.log(err);
queue.delete(message.guild.id);
return message.channel.send(err);
>
> else <
serverQueue.songs.push(song);
console.log(serverQueue.songs);
return message.channel.send(`$
>
function skip(message, serverQueue) <
if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);
if (!serverQueue) return message.channel.send(‘There is no song that I could skip!’);
serverQueue.connection.dispatcher.end();
>
function stop(message, serverQueue) <
if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);
serverQueue.songs = [];
serverQueue.connection.dispatcher.end();
>
function play(guild, song) <
const serverQueue = queue.get(guild.id);
if (!song) <
serverQueue.voiceChannel.leave();
queue.delete(guild.id);
return;
>
const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
.on(‘end’, () => <
console.log(‘Music ended!’);
serverQueue.songs.shift();
play(guild, serverQueue.songs[0]);
>)
.on(‘error’, error => <
console.error(error);
>);
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
>
По завершении лучше перезапустить бота, после чего можно перейти к своему серверу, подключиться к голосовому каналу и ввести любую команду взаимодействия, проверив, как на это отреагирует бот.
Если приведенный выше вариант бота вам не подходит, можно найти исходные коды на том же GitHub и скопировать их на свой компьютер. Принцип регистрации и запуска остается тот же, поэтому по необходимости просто редактируйте готовый код, а затем приступайте к тестированию бота.
В этой статье мы не затронули выгрузку бота на хостинг, распространение его среди других пользователей, создание аватарки и использование открытых площадок, откуда его и можно авторизовать. Все это — отдельные процессы, которыми стоит заниматься только в том случае, когда вы отточили свой навык создания ботов и готовы распространять проекты в сети.
Помимо этой статьи, на сайте еще 12256 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.
Отблагодарите автора, поделитесь статьей в социальных сетях.