【问题标题】:Discord Bot JS: Editing the reply from a previous slash command interactionDiscord Bot JS:编辑来自先前斜杠命令交互的回复
【发布时间】:2021-12-15 08:01:25
【问题描述】:

我正在编写一个支持音乐的多功能 Discord 机器人,需要一些关于这个单一功能的帮助。

有一个播放命令发送包含音乐信息的嵌入消息,当执行停止命令时,它必须编辑播放命令发送的嵌入消息。

这是我的代码的最小化版本(仅作为示例):

(...)
    //PLAY COMMAND
    if (options === 'play') {
      const PlayEmbed = new MessageEmbed()
      PlayEmbed.setColor('#007DD1')
      PlayEmbed.setDescription(`${track.title}`)
    
      //Send message
      interaction.editReply({embeds: [PlayEmbed]})   // <--- The original reply
    }
    
    //STOP COMMAND
    if (options === 'stop') {
      const EndEmbed = new MessageEmbed()
      EndEmbed.setColor('#007DD1')
      EndEmbed.setDescription(`The music stopped!`)
    
      //Edit message
      interaction.editReply({embeds: [EndEmbed]})   // <--- Edit the original reply
    }
(...)

在这种情况下,“.editReply”只是在停止命令之后发送新的嵌入。这可能比我想象的要容易得多,而且我知道我需要通过 webhook 或其他方法获得“播放”交互来编辑该交互发送的特定回复,但我不知道 -如何。子命令“play”和“stop”是这样处理的:const options = interaction.options.getSubcommand();

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

    注意:此答案适用于 Discord.js v13.3.0


    每个命令都在不同的if 块中。当您发送play 命令时,机器人将按预期编辑回复。一旦完成,它会根据停止命令检查自己。 stop 不匹配 play 并且代码继续。它没有编辑您想要的回复的原因是因为您每次都使用不同的交互。第一个交互用于播放命令,如前所述,由于playstop 不匹配,代码继续前进,丢弃交互。

    对此的解决方案是使用 Set 并将成员的 ID 映射到频道 ID 和回复 ID。但是,这仅适用于消息不是短暂的(“只有您可以看到”)。解决方案是这样的:

    const plays = new Map();
    
    (...)
    
    //PLAY COMMAND
    if (options === 'play') {
     (...)
     interaction.editReply({embeds: [PlayEmbed]})
     plays.set(interaction.member.id, [interaction.channel.id, interaction.fetchReply().id])
    }
        
    //STOP COMMAND
    if (options === 'stop') {
     (...)
     let channel = client.channels.cache.get(plays[interaction.member.id].0);
     // Fetch the messages before we can access any of them
     channel.messages.fetch();
     channel.messages.cache.get(plays[interaction.member.id].1).edit({embeds: [EndEmbed]})
    }
    

    此代码的一个警告是,如果用户尚未运行播放命令,plays[interaction.member.id] 将返回 undefined 并可能导致错误。

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 2021-10-19
      • 2021-07-02
      • 2021-06-06
      • 2017-08-31
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多