发送后如何删除消息?

时间:2021-02-09 12:11:02

标签: javascript node.js discord.js

我有一个代码,可以在成员加入公会时发送消息,我想在不久之后将其删除。

我的代码:

client.on('guildMemberAdd', (member) => {
  var server = member.guild.id;
  if (server === '760511134079254610') {
    let kanal = client.channels.cache.get('786172941703970860');
    const embed = new Discord.MessageEmbed()
      .setTitle('Hoşgeldin!')
      .setDescription(`**<@${member.user.id}>** kullanıcısı sunucumuza geldi!`)
      .setColor('BLUE')

    kanal.send(embed)
}})

我尝试了 embed.delete 或经典的 msg.delete,但它不起作用,因为我可以/不知道如何将“msg”定义为机器人发送的最后一条消息。

2 个答案:

答案 0 :(得分:5)

kanal.send(embed) 返回一个承诺。您可以在此处使用 async/await 来获取该消息,以便稍后将其删除。检查以下代码;它应该在 5 秒后删除消息:

client.on('guildMemberAdd', async (member) => {
  const server = member.guild.id;
  if (server === '760511134079254610') {
    let kanal = client.channels.cache.get('786172941703970860');
    const embed = new Discord.MessageEmbed()
      .setTitle('Hoşgeldin!')
      .setDescription(`**<@${member.user.id}>** kullanıcısı sunucumuza geldi!`)
      .setColor('BLUE');

    try {
      const sentMessage = await kanal.send(embed);

      setTimeout(() => {
        sentMessage.delete();
      }, 5000);
    } catch (error) {
      console.log(error);
    }
  }
});

更新:Legendary Emoji 提到您还可以在 setTimeout 中使用带有 timeout 属性的选项对象来代替 sentMessage.delete,如下所示:

    try {
      const sentMessage = await kanal.send(embed);
      sentMessage.delete({ timeout: 5000 });
    } catch (error) {
      console.log(error);
    }
    // ...

答案 1 :(得分:1)

这很简单,你只需要做

    kanal.send(embed).then(sentMessage => {
sentMessage.delete()
})

这将发送消息,然后立即将其删除。但玩家会收到提及和/或桌面通知