Discord.js 按顺序发送消息

Posted

技术标签:

【中文标题】Discord.js 按顺序发送消息【英文标题】:Discord.js send messages in order 【发布时间】: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);

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

【问题讨论】:

【参考方案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() => ... 或类似名称,具体取决于您执行功能的方式

以上是关于Discord.js 按顺序发送消息的主要内容,如果未能解决你的问题,请参考以下文章

计算使用 discord.js 发送消息的次数

向一组用户发送私人消息(Discord.js)

自动发送消息 discord.js

discord.js 发送自定义消息而不是镜像消息

Discord.js -- 使 presenceUpdate 发送消息

Discord.js:如何发送消息并从中收集反应