我正在尝试制作一个在收到命令时编辑消息的机器人。我花了 5 个小时试图解决这个问题。这就是我得到的......
client.once("message", async message => {
const msg = await message.channel.send("why?");
msg.edit("why ?");
msg.edit("why ?");
msg.edit("why ?");
msg.edit("why ?");
msg.edit("why ?");
msg.edit("why?");
msg.edit("wh?");
msg.edit("w?");
msg.edit("?");
msg.react("?")
});
我想要它,所以当有人说“为什么”时,看起来山羊在吃“为什么”并且变大了,哈哈。 遗憾的是,我只能让它运行一次命令,而无需重新启动终端或使其成为垃圾命令。
答案 0 :(得分:0)
您需要使用 client.on
而不是 client.once
,顾名思义,它只运行一次。
还有一个 rate limit 说明您可以多久调用一次 api 来调用 discord。
尝试使用以下代码在编辑之间暂停。看起来像这样。
async function sleep(seconds) {
return new Promise((resolve) => setTimeout(resolve, seconds * 1000));
}
client.on("message", async message => {
if (message !== "why") return;
const msg = await message.channel.send("why?");
await sleep(1);
msg.edit("why ?");
await sleep(1);
msg.edit("why ?");
await sleep(1);
msg.edit("why ?");
await sleep(1);
msg.edit("why ?");
await sleep(1);
msg.edit("why ?");
await sleep(1);
msg.edit("why?");
await sleep(1);
msg.edit("wh?");
await sleep(1);
msg.edit("w?");
await sleep(1);
msg.edit("?");
await sleep(1);
msg.react("?");
});
async message => {
if (message !== "why") return;
const msg = await message.channel.send("why?");
...
}
每次向聊天发送消息时都会执行函数体。重要的是要防止机器人触发自身,导致无限循环。
在这里我添加了一个条件,以便:机器人仅在原始消息(恰好)为 why
时才执行某些操作。
您当然可以做一些更复杂的事情,例如检查发件人、更多消息变体等。