猿问

如何删除 DiscordJS (v12) 中的现有嵌入

我正在开发一个小型私人 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() 语句可能会变得非常棘手,


我感谢我能得到的任何帮助!


12345678_0001
浏览 134回答 3
3回答

长风秋雁

您的代码非常接近实现您想要的目标,除了您尝试删除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()。

手掌心

.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();

慕尼黑8549860

我不太熟悉discordjs,但据我了解,您在变量“message”下使用机器人创建一条消息,该消息具有此处所示的属性: https://discord.js.org/#/docs/main/master/类/消息然后,您使用该消息将嵌入发送到该消息的频道。嵌入会询问一个问题,然后您等待随后的消息。然后,您想要获取第一个响应并将其放入计数变量中。然后你想删除原来的嵌入。如果这一切属实,我建议删除包含嵌入本身的原始消息,如下所示: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);})
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答