Javascript 如何删除DiscordJS(v12)中的现有嵌入
我正在开发一个小型私人Discord机器人(主要用于学习)Javascript 如何删除DiscordJS(v12)中的现有嵌入,javascript,discord.js,Javascript,Discord.js,我正在开发一个小型私人Discord机器人(主要用于学习) 我一直在开发一个功能,其中bot发送一条消息,用户发送一个响应,bot将删除初始嵌入,然后再执行另一个嵌入(创建嵌入式消息链以收集用户输入并从中生成最终结果) 到目前为止,这就是我的代码所包含的内容 const wait = 30000; let count; const embed = new Discord.MessageEmbed() .setColor('#9EFF9A') .s
我一直在开发一个功能,其中bot发送一条消息,用户发送一个响应,bot将删除初始嵌入,然后再执行另一个嵌入
(创建嵌入式消息链以收集用户输入并从中生成最终结果) 到目前为止,这就是我的代码所包含的内容
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()的各种迭代代码>如果没有有用的结果,bot通常会删除用户发送的命令消息以启动嵌入链。
我从一位朋友那里得到一个建议,我也在网上看到过几次,内容如下:
.then(() => {
message.delete()
})
我想不出任何方法在我当前的代码中实现这一点。
我有什么误解吗?我对DiscordJS和Javascript非常陌生,我的朋友也提到了这一点。then()语句可能会变得非常棘手
我很感激能得到的任何帮助 您的代码非常接近您想要的,除了您试图删除您创建的嵌入
对象,而不是嵌入的消息
对象。这里有一个小小的调整,可以满足您的需要:
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()
。这允许您获取发送的嵌入的实际消息
对象,然后可以与之交互。现在,您有了嵌入的消息对象,您可以使用消息的方法直接与消息交互,例如delete()
和edit()
无法工作,因为您从未将消息作为参数传递,因此您的嵌入在的上下文中不存在。then()
您可以尝试使用.then()
或wait
删除发送邮件
然后方法
// 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();
等待方法
// 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();
我不太熟悉discordjs,但据我所知,您使用bot在变量“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);
})
我将查看这两页文档:
欢迎使用Stack Overflow,告诉我其中一个是否有效。消息对象实际上不包含嵌入消息的消息。message
对象是用户发送的消息,例如命令,而嵌入是bot响应该消息而发送的。embed
对象也不是包含嵌入的消息,它本质上只是一个表示嵌入结构本身的JSON结构(即类似于{description:“Desc”,fields:[],“title”:“title”}
)。获取包含嵌入的消息的最简单方法是使用message.channel.send(embed)
语句上的.then()
或wait
。