javascript - 向机器人发送一个命令,该机器人发送一条被编辑的消息
问题描述
我正在尝试制作一个在给出命令时编辑消息的机器人。我花了 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("")
});
我想要它,所以当有人说“为什么”时,看起来山羊正在吃“为什么”并且变得更大,哈哈。可悲的是,我只能让它运行一次命令,而无需重新启动终端或使其成为垃圾邮件命令。
解决方案
顾名思义,您需要使用client.on
而不是只运行一次。client.once
对 discord 进行 api 调用的频率也有速率限制。
尝试以下代码在编辑之间暂停。看起来像这样。
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?");
...
}
每次向聊天发送消息时都会执行函数体。重要的是要防止机器人自行触发,从而导致无限循环。
在这里,我添加了一个条件:只有当原始消息是 (exactly) 时,机器人才会执行某些操作why
。
当然,您可以做一些更复杂的事情,例如检查发件人、更多消息变体等。
推荐阅读
- sql - PX_SERVERS_EXECUTIONS 和 USERS OPENING 之间的关系
- xml - 分组后的 XSLT 1.0 循环元素
- r - R创建交易模拟
- vb.net - 查找最后一次出现并添加元素
- matlab - MATLAB绘图对比度增强?
- angular - IE11 - 运行角度 TestCafe 测试时出现 SecurityError zone.js
- environment-variables - 在 Julia 的所有进程中设置环境变量
- c - 右移浮点数的二进制表示 -0.0
- angular - p-calendar 项目不会修改您的宽度
- python-3.x - 使用 .agg (lambda) 而不是 .apply(lambda) 重写 group