亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何刪除 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發送的嵌入的實際對象,然后您可以與之交互?,F在您已經有了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 關注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號