@killeryStark

Как вывести данные сервера в бот discord через embed?

Сразу уточню в node js и в кодинге шарю слабо
Нужна помощь, возможно финансовое вознаграждение.

Впринципе как построить простой бот дискорда я понимаю, но задача в следующем:
есть библиотека: https://www.npmjs.com/package/gamedig#usage-from-c...

Нужно по команде вывести данные
name
map
Players &maxplayers
connect

Как их привязать к embed (и как их можно обновлять?) спасибо
const Discord = module.require("discord.js");
const Gamedig = require('gamedig');
const fs = require("fs");
const qs = require("querystring");

module.exports.run = async (bot,message,args) => {
    message.delete().catch();

Gamedig.query({
    type: 'arkse',
    host: '85.190.155.194',
    port: '27015'
}).then((state) => {
    console.log(state);
}).catch((error) => {
    console.log("Server is offline");

});

const embed = new Discord.RichEmbed()
.setTitle(name);
.setColor((online ? 0x37963F : 0x933836))
    .addField(Map, true)
    .addField(Players/maxplayers, true)
    .addField(Connect:, true)
    .setTimestamp()


message.channel.send(embed);

};
module.exports.help = {
    name: "ark"
};
  • Вопрос задан
  • 1068 просмотров
Решения вопроса 1
Idaspin
@Idaspin
Android developer. Создаю обучающий контент.
.then(()=>{})
.catch(()=>{})

Это структуры промиса - системы возвращающей результат выполнения той или иной асинхронной команды. То есть у тебя в коде Gamedig.query({... вызывается раньше создания и отправки embed, но на практике может получить ответ от сервера с задержкой т.е. уже после отправки сообщения.
Так в твоём случае тебе нужно (например) готовить Embed лишь После получения ответа от библиотеки. Тогда твой вариант:
// Создание запроса к библиотеке
Gamedig.query({
    type: 'arkse',
    host: '85.190.155.194',
    port: '27015'
})
// Код который вызовется при успешном запросе т.е. ответ, данные получены
.then((state) => {

const embed = new Discord.RichEmbed() 
.setTitle(state.name)
.addField(state.map, true)
.addField(state.players.length/state.maxplayers, true)
.addField(state.connect:, true) 
.setTimestamp();
message.channel.send(embed);

})
// Произошла ошибка 
.catch((e)=>{/*ну а тут обработчик ошибки*/})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы