This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Мануал [JS] Интеграция бота на DiscordJS в RAGE MP на примере чата

faceplant

Начинающий специалист
Автор темы
29 Май 2021
67
20
72
Так как не нашел на данном форуме маунал/урок/пример кода(на JS), с помощью которого можно было бы интегрировать бота Discord, напишу мануал.

Перед началом работы, нужно создать самого "бота":

1. Переходим на Discord Developers App, авторизируемся.

2. Создание бота
Для создания приложения - нажимаем на "New Application"

Вводим название, выбираем команду разработки если таковая у вас имеется.

После создания, в левом меню выбираем Bot



Создаем бота нажатием на add bot



После создания, копируем токен бота

Приглашаем бота

3. Открываем среду разработки(WebStorm || Visual Code и т.п).
4. Через среду разработки открываем папку server-files в директории RAGEMP
5. В терминале, либо в cmd, загружаем автокомплит rage mp в папку с сервером, любая ссылка(взято с wiki.rage.mp)
Не забываем сначала инициализировать проект с помощью npm init -y
6. Дополнительно загружаем discord.js:
7. После успешной установки компонентов, переходим в папку packages и создаем там файл index.js
8. В папке packages так же для удобства создадим папку discord, а в ней еще один index.js

9.В index, созданный на 7 шаге, вписываем
require('./discord/index')
10. В Index.js, созданном на 8 шаге, вписываем следующее
JavaScript:
    const Discord = require('discord.js')
    const client = new Discord.Client()
    const webHook = new Discord.WebhookClient('id', 'token') // Не нужно, если вы хотите выводить просто сообщение от бота
    // Задаем webhook и присваиваем id и токен созданного вебхука: https://discord.com/api/webhooks/id/token

    client.on('ready', () => { // Событие при запуске бота
        console.log('Дискорд бот запущен') // В моем случае - выведется в консоль данная строка
    })
Вывод сообщения из игры в дискорд
JavaScript:
    mp.events.addCommand('a', (player, fullText) => { // Создаем команду /a, которая принимает в себя обязательно player и полный текст сообщения.
        if(!fullText) return player.notify('~r~Для отправки сообщения, введите текст!') // Проверка, имеется ли текст после ввода команды
        // client.channels.cache.get('843538101938290728').send(fullText)  - Используем для того что бы отправить просто текст в чат discord
        webHook.send('rudepohui', { // Задействуем вебхук и отправляем сообщение
            username: player.name, // Имя вебхука, в моем случае - никнейм игрока
            avatarURL: `https://a.rsg.sc/n/${player.socialClub}`, // Картинка вебхука, в моем случае, аватарка игрока в SoicalClub
            content: fullText // Собственно сам текст, который выведется
        })
    })
Вывод сообщения из дискорд в игру
JavaScript:
    client.on('message', (message) => { // Событие, когда кто то отправляет в канал дискорд сообщение
        if(message.author.bot) return // Проверяем, является ли автор сообщения ботом
        if(message.channel.id != '843538101938290728') return // Проверяем, находится ли сообщение в нужном нам канале
        mp.players.forEach((player) => { // Отправляем игроку в чат сообщение, с любым условием, например if(player.adminLevel >= 1).
            player.outputChatBox(`${message.author.username}: ${message.content}`); // Сам вывод сообщения, в моем случае без условия
        })
    })
    client.login('token') // Токен бота, который мы скопировали
11. Проверяем


Пишем сообщение в дискорде - получаем сообщение в чате



Пишем в игре команду - получаем сообщение в дискорде


Надеюсь расписал все понятно! Удачного кодинга. Жду комментарии с критикой.
 

Moretti

Специалист
high coder
19 Янв 2021
83
31
92
В использовании вебхука нет смысла, почему бы простой ембед не использовать?
 

faceplant

Начинающий специалист
Автор темы
29 Май 2021
67
20
72
Кому как лучше, потому что используя embed, мы теряем возможность менять аватарку и никнейм бота, под игрока сервера.

На мой взгляд, аккуратнее и эстетичнее смотрится через webHook.
 

Lavanda

Начинающий специалист
25 Авг 2021
173
30
65
у него проблема с мозгом что то
 

TripleBoom

Активный участник
22 Янв 2023
79
9
31
Вроде одно решил, и появилось второе