discord.js: проблема с добавлением имен пользователей в строку - PullRequest
0 голосов
/ 01 мая 2018

Я написал следующий код для бота Discord, используя discord.js. Цель кода, который я пытаюсь написать, состоит в том, чтобы бот отвечал списком имен пользователей, чьи идентификаторы указаны в другом файле .json. Это то, что я написал.

if(command === "privlist")
{
    var msg = ""
    msg += "[Privileged Users]\n"

    // iterate through the array of id's
    config.privileged.forEach(function(item, index) {
        msg += index + ": ";

        // fetch the user associated with the id in the array
        client.fetchUser(item).then(User => {
            // add the name of the user into the string to be outputted
            msg += User.username + "#" + User.discriminator;
        });

        // include the user id as well
        msg += " <" + item + ">\n";
    });

    // send the message
    message.channel.send(msg);
}

Ожидаемый ответ от бота должен быть примерно таким.

[Privileged Users]
0: Merlin#8474 <172734241136836608>
1: Spring Voltage#2118 <255109013383938048>
2: masterhunter56#2561 <243167201471889409>
3: brett#4582 <123957558133129217>

Но вместо этого это то, что я получаю.

[Privileged Users]
0:  <172734241136836608>
1:  <255109013383938048>
2:  <243167201471889409>
3:  <123957558133129217>

Я попытался добавить console.log(User.username) после строки msg += User.username + "#" + User.discriminator;, и это заставляет имена правильно отображаться в консоли.

Я могу даже сделать message.channel.send(User.username) после msg += User.username + "#" + User.discriminator;, и это будет отправлять каждое из имен как его собственное сообщение.

Я просто не могу связать это User.username + "#" + User.discriminator со строкой msg.

1 Ответ

0 голосов
/ 04 мая 2018

Как сказал Jaromanda X , вы использовали асинхронную функцию. Что означает, что эта строка: msg += " <" + item + ">\n"; не будет ждать окончания действия client.fetchUser(item).then(User.

Я думаю, что это должно работать:

if(command === "privlist")
{
    var msg = ""
    msg += "[Privileged Users]\n"

    // iterate through the array of id's
    config.privileged.forEach(function(item, index) {
        msg += index + ": ";

        // fetch the user associated with the id in the array
        client.fetchUser(item).then(User => {
            // add the name of the user into the string to be outputted
            msg += User.username + "#" + User.discriminator;
            // include the user id as well
            msg += " <" + item + ">\n";
        });
    });

    // send the message
    message.channel.send(msg);
}
...