【问题标题】:Discord.js send messages in orderDiscord.js 按顺序发送消息
【发布时间】:2021-02-05 20:52:34
【问题描述】:

我有一个不和谐的机器人,它会根据命令向一个频道发送多条消息。有些消息是图像,它们总是最后发送。

msg.channel.send({files: ["image.png"]});
for (var i in rules) {
    msg.channel.send({embed: rules[i]});
}
msg.channel.send({files: ["image2.png"]});
msg.channel.send({embed: embed1});
msg.channel.send({files: ["image3.png"]});
msg.channel.send({embed: embed2});

我希望消息按代码顺序发送。

【问题讨论】:

    标签: javascript asynchronous discord discord.js embed


    【解决方案1】:

    因为你使用的是异步函数,所以消息不会按照编码顺序发送,而是按照处理时间发送。

    由于图像比文本消息大得多,它们将在异步环境中最后发送。

    您需要使用回调来使这些函数同步,但我建议搜索本质上是同步的不和谐命令。

    【讨论】:

    • 好的,我会调查的。
    • 您不需要使用回调,您可以使用await 关键字更简单地实现它。 await 在当前消息完成发送之前不会开始发送下一条消息
    • @Samathingamajig 当我尝试这个时,它给了我这个错误:SyntaxError: await is only valid in async function
    • 嗯,你需要使函数异步。 async function funcName() {...}const funcName = async() => {...} 或类似名称,具体取决于您执行功能的方式
    【解决方案2】:

    TextChannel.send() 返回一个承诺,所以你可以使用async/await

    // make sure your function is async
    await msg.channel.send({files: ["image.png"]});
    await msg.channel.send({files: ["image2.png"]});
    await msg.channel.send({embed: embed1});
    await msg.channel.send({files: ["image3.png"]});
    await msg.channel.send({embed: embed2});
    

    【讨论】:

    • 当我尝试这个时,它给了我这个错误:SyntaxError: await is only valid in async function
    • 嗯,你需要使函数异步。 async function funcName() {...}const funcName = async() => {...} 或类似名称,具体取决于您执行功能的方式
    猜你喜欢
    • 2018-11-25
    • 1970-01-01
    • 2016-09-06
    • 2021-04-01
    • 2018-08-25
    • 2020-08-04
    • 2018-12-24
    • 1970-01-01
    相关资源
    最近更新 更多