我正在开发一个小型的Discord私人机器人(主要用于学习)
我一直在研究一种功能,该功能是僵尸程序发送一条消息,用户发送一个响应,而该僵尸程序将删除最初的嵌入,然后再进行另一个嵌入。
(创建一系列嵌入式消息以收集用户输入并从中获得最终结果)
到目前为止,这就是我的代码所组成的
const wait = 30000;
let count;
const embed = new Discord.MessageEmbed()
.setColor('#9EFF9A')
.setTitle('Question?')
.setDescription('');
message.channel.send(embed);
message.channel.awaitMessages(m => m.author.id == message.author.id,
{ max: 1, time: `${wait}` }).then(collected => {
message.delete(embed);
count = collected.first().content;
console.log(count);
}).catch(() => {
message.delete(embed);
return message.reply('No reply after ' + `${wait / 1000}` + ' seconds, operation canceled.').then(m => {
m.delete({ timeout: 15000 });
});
});
我尝试了message.delete();
的各种迭代,但都没有得到有用的结果,该漫游器通常最终会删除用户发送的命令消息以启动嵌入链。
我从一个朋友那里得到的建议是,我也最终在网上看到了几次,如下所示:
.then(() => {
message.delete()
})
我无法提出将其实现到当前代码中的任何方法。
我有什么误会吗?我是DiscordJS和Javascript的新手,我的朋友确实提到.then()语句可能会非常棘手
感谢您能获得的任何帮助!
答案 0 :(得分:0)
您的代码非常接近实现您想要的目标,只是您尝试删除创建的Embed
对象而不是嵌入的Message
对象。这里有一些细微调整,可以满足您的需求:
const wait = 30000;
let count;
const embed = new Discord.MessageEmbed()
.setColor('#9EFF9A')
.setTitle('Question?')
.setDescription('');
message.channel.send(embed).then(embedMessage => {
embedMessage.channel.awaitMessages(m => m.author.id == message.author.id,
{ max: 1, time: wait }).then(collected => {
embedMessage.delete();
count = collected.first().content;
console.log(count);
}).catch(() => {
embedMessage.delete();
return message.reply('No reply after ' + (wait / 1000) + ' seconds, operation canceled.').then(m => {
m.delete({ timeout: 15000 });
});
});
})
这里的秘密是在发送嵌入代码的方法上使用.then()
。这使您可以获取已发送的嵌入的实际Message
对象,然后可以与之进行交互。现在您已嵌入Message
对象,您可以使用其方法(例如delete()
和edit()
)直接与邮件进行交互。
答案 1 :(得分:0)
.then(() => {
message.delete()
})
不起作用,因为您从未将消息作为参数传递,因此您的嵌入在.then()
的上下文中不存在
您可以尝试使用.then()
或await
删除发送消息。
然后的方法
// const embed = ...
message.channel.send(embed).then(msg => {
msg.delete();
});
等待方式
// Make sure you're in an async function
//const embed = ...
const msg = await message.channel.send(msg);
msg.delete();
答案 2 :(得分:0)
我对discordjs并不熟悉,但是据我了解,您使用bot在变量“ message”下创建了一条消息,其属性如下所示: https://discord.js.org/#/docs/main/master/class/Message
然后,您使用该消息将嵌入内容发送到消息的频道。嵌入询问是一个问题,然后您等待后续消息。然后,您想获取第一个响应并将其放入count变量中。然后,您要删除原始嵌入。如果一切正确,我建议删除包含嵌入自身的原始消息,如下所示:
message.channel.awaitMessages(m => m.author.id == message.author.id,
{ max: 1, time: `${wait}` }).then(collected => {
message.delete();
count = collected.first().content;
console.log(count);
})
或者尝试一下,但我认为此方法无效:
message.channel.awaitMessages(m => m.author.id == message.author.id,
{ max: 1, time: `${wait}` }).then(collected => {
embed.delete();
count = collected.first().content;
console.log(count);
})
我将检查以下两页文档: https://discord.js.org/#/docs/main/master/class/Message?scrollTo=delete https://discord.js.org/#/docs/main/master/class/MessageEmbed
欢迎您使用Stack Overflow告诉我其中一项是否有效。