Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何删除DiscordJS(v12)中的现有嵌入_Javascript_Discord.js - Fatal编程技术网

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

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

我正在开发一个小型私人Discord机器人(主要用于学习)
我一直在开发一个功能,其中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