为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

12345678_0001 2023-07-29 14:54:50
我正在开发一个小型私人 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() 语句可能会变得非常棘手,我感谢我能得到的任何帮助!
查看完整描述

3 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

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


查看完整回答
反对 回复 2023-07-29
?
手掌心

TA贡献1942条经验 获得超3个赞

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


查看完整回答
反对 回复 2023-07-29
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

我不太熟悉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);

})

查看完整回答
反对 回复 2023-07-29
  • 3 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信