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

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

Здорово. Решено. Давайте создадим бота, который не захватит вселенную ... только ваш сервер раздора.

Мы будем использовать Node.js, а пока рассмотрим основы настройки для создания функционального бота. Мы добавим классный код «займись своим сервером» после того, как все будет готово.

Регистрация приложения в Discord

Прежде чем мы сможем сделать что-нибудь еще, нам нужно будет зайти на портал разработчиков Discord и рассказать ему о нашем новом замечательном боте.

Попасть на портал разработчиков можно здесь: https://discord.com/developers/applications

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

Далее вы попадете на экран настройки приложения.

Вы можете загрузить изображение профиля для своего приложения, а также добавить описание. Через минуту нам понадобится указанный здесь идентификатор клиента, поэтому нажмите кнопку «Копировать» под ним. Но сначала….

Откройте меню Бот слева. Нам нужно будет сообщить Discord, что в нашем приложении будет бот, создав пользователя-бота. Это позволит приложению взаимодействовать с текстовыми сообщениями и всем остальным, с чем вы хотите, чтобы оно могло взаимодействовать.

Нажмите «Добавить бота» и примите условия.

Ура. Появился дикий бот.

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

Вскоре нам также понадобится этот токен, но перед этим нам нужно авторизовать новое приложение, используя клиентский токен, полученный ранее. Для этого нам нужно перейти по другому URL-адресу Discord: «https://discord.com/oauth2/authorize?client_id=************************************************************************ ********************************

Замените <put your app client id here> идентификатором клиента самого приложения, который мы скопировали ранее, а затем вставьте его в новую вкладку браузера. Убедитесь, что вы вошли в систему, выберите сервер, на котором будет авторизован этот бот, и нажмите эту кнопку.

Кнопка авторизации то есть.

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

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

Но бот не в сети ... как это исправить?

На кодирование

Чтобы бот действительно присутствовал на вашем сервере, нам нужно написать код Node.js, чтобы он ожил.

Создайте где-нибудь папку в своей системе и назовите ее чем-нибудь супер креативным, например DiscordBot или MyAwesomeBot… решать вам.

Внутри папки создайте файл с именем: config.json

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

{
  "token"  : "thisisverymuchafaketoken.please.donotusethistokeninyourapp!",
  "prefix" : "+"
}

Как видите, это простой файл json, содержащий токен для пользователя-бота, а также префикс, который мы будем использовать в коде для идентификации команды для бота.

Давайте также создадим файл JavaScript с именем: bot.js

Начните с загрузки библиотеки Discord.

const Discord = require("discord.js");

Мы будем использовать версию 12, но нам не нужно указывать это здесь.

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

const client = new Discord.Client();
const config = require("./config.json");
// config.token contains the bot's token
// config.prefix contains the message prefix.

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

Далее нам нужно обработать событие «готово». Эта функция будет запущена, когда бот запустится и успешно войдет в систему. Мы будем использовать это, чтобы зарегистрировать сообщение об успешном завершении на консоли и установить действие, которое будет отображаться против пользователя-бота в Discord.

client.on("ready", () => {
  // If the bot starts and logs in.
  console.log('Bot has started');
  client.user.setActivity('Totally not plotting world domination');
});

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

Теперь мы подошли к сути нашего очень простого бота, обработав событие «message». Это происходит всякий раз, когда бот видит сообщение, будь то из канала или DM.

client.on("message", async message => {

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

if(message.author.bot) 
   return;

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

if(!message.content.startsWith(config.prefix)) 
   return;

Это будет означать, что наш бот будет игнорировать все, что не начинается с + (или того, что вы задали для префикса).

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

const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();

Итак, если мы отправим сообщение типа: + say Hello World!

Тогда в этот момент команда будет: + say, а аргументы будут массивом, содержащим каждое другое слово. ['Привет мир!']

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

if(command === "say") {
    /* To get the message for the bot to send, we will join the `args` back into a string with spaces: */
    const sayMessage = args.join(" ");
    // Then delete the command message from the user that sent it
    message.delete().catch(O_o=>{}); 
    // And we get the bot to say the thing: 
    message.channel.send(sayMessage);
}

Мы проигнорируем команду и объединим все «аргументы» обратно в строку. В приведенном выше случае мы получим "Hello World!" как сообщение.

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

Затем мы заставим бота отправлять сообщение.

Теперь закройте функцию обработчика сообщений.

});

И последнее, но не менее важное (для кода). Мы скажем боту войти в Discord.

// Login to discord with the secret bot user token
client.login(config.token);

Вот суть кода: https://gist.github.com/apocsurvivor/c5ca606952e89069d0d596e265acb3ff

Запуск бота

Перед запуском бота необходимо сделать еще пару вещей.

Откройте терминал в папке, в которой мы поместили код. Нам нужно создать Node.js project.json и загрузить необходимые зависимости.

Выполните команду:

npm init -y

Это должно создать project.json в правильном формате. Вы можете продолжить и отредактировать этот файл по мере необходимости, чтобы добавить вас в качестве автора, установить номер версии и т. Д.

Затем нам нужно установить библиотеку Discord, которую мы сначала включили в код. Убедившись, что вы сохранили все изменения в project.json, выполните следующее:

npm install discord -save

Это должно установить библиотеку Discord. Если ошибок нет, вы можете запустить своего бота, запустив:

узел bot.js

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

Если все в порядке, проверьте его, отправив ему команду:

+say Hello World!

Если все пойдет по плану, ваше сообщение должно исчезнуть, и бот должен сказать «Hello World!»

Если ваше сообщение не исчезает, убедитесь, что у пользователя-бота установлена ​​роль и есть разрешение на удаление сообщений.

Что дальше?

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

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