Как создать бота в Discord
Содержание
- Создание приложения и авторизация бота
- Выбор среды разработки
- Вариант 1: Python и библиотека discord
- Шаг 1: Установка Python и библиотеки discord
- Шаг 2: Создание словаря бота
- Шаг 3: Создание тела бота
- Шаг 4: Запуск бота
- Вариант 2: JavaScript и discord.js
- Шаг 1: Установка Node.js и discord.js
- Шаг 2: Работа с файлами бота
- Шаг 3: Запуск бота
- Примеры полезных команд
- Вопросы и ответы
В статье мы расскажем о том, как создается приложение для бота, выполняется первая авторизация на сервере и пишется общий код для нормализации работы. Имея «каркас», вы уже можете добавлять пользовательские команды и сразу проверять, как они работают.
Создание приложения и авторизация бота
Далее речь пойдет о двух разных методах создания бота — при помощи JavaScript и Python. Каждый из них имеет свои особенности и нюансы, но вот метод создания приложения и авторизации бота на сервере остается одинаков, поскольку не зависит от выбранного языка программирования. После этого вы сможете перейти к подбору библиотеки и работе с кодом.
Перейти на Discord Developer Portal
Подробнее: Создание сервера в Discord
Выбор среды разработки
Перед началом работы с кодом в упомянутых языках программирования уточним, что вам понадобится установить текстовый редактор или специальную среду разработки, поддерживающую синтаксис Python или JavaScript (в зависимости от выбранного). Конечно, можно использовать просто «Блокнот», но по удобству он уступает специализированным программам. Просмотрите их списки в обзорах по следующим ссылкам и выберите для себя подходящий софт.
Подробнее:
Выбор среды разработки для программирования
Текстовые редакторы для Windows
Вариант 1: Python и библиотека discord
Если ранее вы не сталкивались с языками программирования или знакомы с ними только поверхностно, создание бота для Discord на Python — лучший выбор. Этот ЯП проще учится, компактный и имеет логически понятный синтаксис, поэтому идеально подходит новичкам. К тому же в сети есть огромное количество исходников с различными командами или уже готовыми ботами, которые ничего не мешает скопировать и использовать в своих целях. В следующих шагах вы узнаете, как создать «каркас» бота на Python и запустить его, чтобы проверить работу.
Шаг 1: Установка Python и библиотеки discord
По умолчанию в Windows нет встроенных функций и утилит, предназначенных для работы с Питоном, поэтому их придется установить отдельно, не забыв про подключаемую библиотеку discord, которая позволит взаимодействовать с полезными функциями и командами, связанными исключительно с Дискордом.
Перейти на официальный сайт Python
Если Python у вас установлен, но команда для добавления подключаемой библиотеки не работает, выполните обновление компонента PIP, о чем рассказывается в другой статье на нашем сайте. Там же вы найдете инструкцию и по изменению переменных среды, если этого не произошло во время установки.
Подробнее: Обновление PIP для Python
Шаг 2: Создание словаря бота
В этом варианте мы будем использовать словарь для бота, то есть конфигурационный файл, хранящий в разных именах значения токена, префикса и имени бота. Это существенно упрощает весь процесс написания кода и не заставляет каждый раз вспоминать данные приложения, чтобы ввести их в одной строке.
settings = {
‘token’: ‘Ваш токен’,
‘bot’: ‘Имя бота’,
‘id’: Client ID бота, без кавычек,
‘prefix’: ‘Префикс бота’
}
Шаг 3: Создание тела бота
Для обеспечения базового функционирования бота ему нужно создать «тело» — основной код для запуска и работы на сервере. Понадобится отдельный файл, который можно назвать как угодно, но обязательно сохранить его в том же месте, где находится созданный ранее словарь.
import discord
from discord.ext import commands
from config import settings
@bot.command() # Не передаём аргумент pass_context, так как он был нужен в старых версиях.
async def hello(ctx): # Создаём функцию и передаём аргумент ctx.
author = ctx.message.author # Объявляем переменную author и записываем туда информацию об авторе.
await ctx.send(f’Hello, {author.mention}!’) # Выводим сообщение с упоминанием автора, обращаясь к переменной author.
Далее вы видите полный код, о котором шла речь выше, поэтому при надобности просто можете скопировать его.
import discord
from discord.ext import commands
from config import settings
bot = commands.Bot(command_prefix = settings[‘prefix’])
@bot.command() # Не передаём аргумент pass_context, так как он был нужен в старых версиях.
async def hello(ctx): # Создаём функцию и передаём аргумент ctx.
author = ctx.message.author # Объявляем переменную author и записываем туда информацию об авторе.
await ctx.send(f’Hello, {author.mention}!’) # Выводим сообщение с упоминанием автора, обращаясь к переменной author.
bot.run(settings[‘token’]) # Обращаемся к словарю settings с ключом token, для получения токена
Дополнительно уточним, что вы можете использовать альтернативную схему, избавившись от файла со словарем и получив немного другое «тело» для бота. Решите, подходит ли вам этот код больше. Указанные строки с токеном нужно будет отредактировать под себя.
import discord
from discord.ext import commands
TOKEN = ‘Ваш токен’
bot = commands.Bot(command_prefix=’!’)
@bot.command(pass_context=True) # разрешаем передавать аргументы
async def test(ctx, arg): # создаем асинхронную функцию бота
await ctx.send(arg) # отправляем обратно аргумент
bot.run(TOKEN)
Шаг 4: Запуск бота
Теперь можно запустить бота для проверки, для чего понадобится созданный в Шаге 3 основной файл. Скомпилируйте его прямо через среду разработки или вызовите «Командную строку» и введите там python bot.py, где bot.py — название созданного файла. Если файл найти не удалось, укажите его полный путь, например python C:UsersUSER_NAMEbot.py.
Перейдите в Дискорд и проверьте текущее состояние бота. Он должен отображаться в списке участников в разделе «В сети» вместе с зеленой точкой.
Воспользуйтесь открытыми источниками или собственными знаниями, чтобы написать команды для бота или реализовать другие задачи, которые он должен выполнять. Для этого редактируйте его основной файл или создавайте другие, связывая все в единый проект.
Вариант 2: JavaScript и discord.js
Следующий вариант создания бота для Discord — использование JS и подключаемой библиотеки discord.js, которая добавляет все необходимые компоненты для работы с ботами. Принцип действий отличается от предыдущего варианта лишь инструментами и разницей в синтаксисах языков программирования, но остается примерно таким же.
Шаг 1: Установка Node.js и discord.js
Расширить функциональность JS и превратить его в язык программирования общего назначения поможет платформа Node.js, установкой которой и рекомендуем заняться в первую очередь. Для этого выполните простейший алгоритм действий:
Перейти на официальный сайт Node.js
Шаг 2: Работа с файлами бота
Все действия, связанные с файлами бота и программным кодом, рассмотрим в рамках одного этапа, поскольку делить их на несколько просто не имеет смысла. Вам понадобятся три основных файла, куда и вписываются все необходимые функции: один отвечает за конфигурацию бота, второй — за «тело», а третий хранит список добавленных команд.
{
«token» : «Ваш_токен»,
«prefix» : «Ваш_префикс»
}
Соответственно, выражения в двойных кавычках замените на уникальный токен бота и предпочитаемый префикс.
const Discord = require(‘discord.js’); // Подключаем библиотеку discord.js
const robot = new Discord.Client(); // Объявляем, что robot — бот
const comms = require(«./comms.js»); // Подключаем файл с командами для бота
const fs = require(‘fs’); // Подключаем родной модуль файловой системы node.js
let config = require(‘./config.json’); // Подключаем файл с параметрами и информацией
let token = config.token; // «Вытаскиваем» из него токен
let prefix = config.prefix; // «Вытаскиваем» из него префикс
robot.on(«ready», function() {
/* При успешном запуске, в консоли появится сообщение «[Имя бота] запустился!» */
console.log(robot.user.username + » запустился!»);
});
robot.on(‘message’, (msg) => { // Реагирование на сообщения
if (msg.author.username != robot.user.username && msg.author.discriminator != robot.user.discriminator) {
var comm = msg.content.trim() + » «;
var comm_name = comm.slice(0, comm.indexOf(» «));
var messArr = comm.split(» «);
for (comm_count in comms.comms) {
var comm2 = prefix + comms.comms[comm_count].name;
if (comm2 == comm_name) {
comms.comms[comm_count].out(robot, msg, messArr);
}
}
}
});
robot.login(token); // Авторизация бота
Читайте комментарии к строчкам, идущие после слэшей («//»), чтобы самостоятельно разобраться с предназначением каждой.
const config = require(‘./config.json’); // Подключаем файл с параметрами и информацией
const Discord = require(‘discord.js’); // Подключаем библиотеку discord.js
const prefix = config.prefix; // «Вытаскиваем» префикс
// Команды //
function test(robot, mess, args) {
mess.channel.send(‘Test!’)
}
// Список команд //
var comms_list = [{
name: «test»,
out: test,
about: «Тестовая команда»
}];
// Name — название команды, на которую будет реагировать бот
// Out — название функции с командой
// About — описание команды
module.exports.comms = comms_list;
Для дальнейшей работы с командами достаточно будет объявить их функции и пополнить список соответствующими блоками кода. На примере готовый файл «comms.js» выглядит так:
const config = require(‘./config.json’);
const Discord = require(‘discord.js’);
const prefix = config.prefix;
const versions = config.versions;
// Команды //
function test(robot, mess, args) {
mess.channel.send(«Тест!»)
}
function hello(robot, mess, args) {
mess.reply(«Привет!»)
}
// Список команд //
var comms_list = [{
name: «test»,
out: test,
about: «Тестовая команда»
},
{
name: «hello»,
out: hello,
about: «Команда для приветствия!»
}
}
module.exports.comms = comms_list;
Шаг 3: Запуск бота
Первые действия с ботом на JavaScript завершены, а значит, можно запустить его и проверить работу. Для этого вам понадобится выполнить следующее:
Примеры полезных команд
В завершение этого варианта вкратце расскажем о двух полезных командах, которые могут пригодиться при настройке бота. Их можно использовать в качестве тестовых, когда работа над проектом еще находится на стадии развития. Первая команда — !clear — удаляет указанное количество сообщений в чате. Ее код выглядит следующим образом:
const arggs = mess.content.split(‘ ‘).slice(1); // Все аргументы за именем команды с префиксом
const amount = arggs.join(‘ ‘); // Количество сообщений, которые должны быть удалены
if (!amount) return mess.channel.send(‘Вы не указали, сколько сообщений нужно удалить!’); // Проверка, задан ли параметр количества
if (isNaN(amount)) return mess.channel.send(‘Это не число!’); // Проверка, является ли числом ввод пользователя
if (amount > 100) return mess.channel.send(‘Вы не можете удалить 100 сообщений за раз’); // Проверка, является ли ввод пользователя числом больше 100
if (amount {
mess.channel.bulkDelete(messages)
mess.channel.send(`Удалено ${amount} сообщений!`)
})
};
delete_messages(); // Вызов асинхронной функции
Вторая команда предназначена для подбрасывания монетки и запускается путем ввода !heads_or_tails в чате. Здесь код не такой сложный, поскольку действий мало и бот должен откликнуться всего на один запрос без огромного количества переменных.
mess.channel.send(‘Монета подбрасывается…’)
var random = Math.floor(Math.random() * 4) + 1; // Объявление переменной random — она вычисляет случайное число от 1 до 3
if (random === 1) { // Если вычислено число 1, то выпадает орёл.
mess.channel.send(‘:full_moon: Орёл!’)
} else if (random === 2) { // Если вычислено число 2, то выпадает решка.
mess.channel.send(‘:new_moon: Решка!’)
} else if (random === 3) { // Если вычислено число 3, то монета падает ребром.
mess.channel.send(‘:last_quarter_moon: Монета упала ребром!’)
}
В интернете вы можете найти другие полезные команды, которые хотите включить в своего бота, однако для работы с ними все же понадобятся продвинутые знания в JavaScript или Python, чтобы самостоятельно исправлять ошибки или редактировать код под себя.