当前位置: 首页 > 知识库问答 >
问题:

Discord Bot JS:编辑先前斜杠命令交互的回复

糜运良
2023-03-14

我正在编写一个具有音乐支持的多功能不和谐机器人,需要在这个单一功能方面的帮助。

有一个play命令,它发送包含音乐信息的嵌入消息,当执行stop命令时,它必须编辑play命令发送的嵌入内容。

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

(...)
    //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”只是在停止命令之后发送新的嵌入。这可能比我想象的要容易得多,我知道我需要获得“播放”交互来编辑该交互发送的特定回复,无论是通过Webhooks还是其他方法,但我不知道如何。子命令“播放”和“停止”的处理方式如下:常量选项 = 交互。

共有1个答案

阙奇思
2023-03-14

注意:此答案适用于不和谐.js v13.3.0

每个命令都位于不同的 if 块中。发送播放命令时,机器人将按预期编辑回复。完成此操作后,它将根据 stop 命令检查自身。stop播放不匹配,代码继续。它没有编辑您想要的回复的原因是,您每次都使用不同的交互。第一个交互是针对 play 命令的,如前所述,由于 playstop 不匹配,代码将继续,丢弃交互。

对此的解决方案是使用一个集合,并将成员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]})
}

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

 类似资料:
  • 我正在使用discord.js和WOKCommands来使用斜杠命令,但是当在discord中输入时,它给我一个错误“无效的交互应用程序命令” 下面是该命令的代码: 仅当我也需要显示主脚本的代码时,该命令的代码才是命令的代码。我会这样做的。

  • 本文向大家介绍Python中的左斜杠、右斜杠(正斜杠和反斜杠),包括了Python中的左斜杠、右斜杠(正斜杠和反斜杠)的使用技巧和注意事项,需要的朋友参考一下 首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在Windows (一)目录中的斜杠们 python读文件需要输入的目录参数,列出以下

  • MOAC母链客户端使用了和以太坊类似的交互式命令行。用户可以在命令行(console)中执行内置的JAVA script命令或者利用脚本(script),输出结果显示在命令行中。 这里使用的chain3对象,是MOAC参考以太坊,而开发的一套javascript库,目的是让应用程序能够与MOAC的VNODE和SCS节点进行通信。注意,这里有两层,moac启动了一个MOAC VNODE节点,cons

  • 图形的编辑 MATLAB在一个图形中提供了可读性,设定轴的比例(包括单位长度),使用颜色及线型区分图形的格式。然而,如果要创建用于介绍的图形,可能需要改变这些默认格式或添加描述性标签,符号,图例或其他注释以助解释数据。 MATLAB支持两种编辑所建图形的途径。 用鼠标交互地选择并编辑对象 在命令行或M-文件中用MATLAB函数 若在MATLAB的Figure窗口中打开作图编辑模式,就可以在图形中向

  • 从v1.1.1开始,应用链客户端SCS也支持使用了和以太坊类似的交互式命令行。用户可以在命令行(console)中执行内置的JAVA script命令或者利用脚本(script),输出结果显示在命令行中。 这里使用的chain3对象,是MOAC参考以太坊,而开发的一套javascript库,目的是让应用程序能够与MOAC的VNODE和SCS节点进行通信。注意,这里有两层,moac启动了一个MOAC

  • 键盘上的多个箭头键和控制键允许撤消,编辑和重新执行之前的命令。例如,如果你错误输入 rho = (1 + sqt(5))/2 你错误拼写sqrt, MATLAB 会显示 Undefined function or variable 'sqt'. (未定义的函数或变量 'sqt'.) 这时不用重新输入整行的命令,只需按键,错误拼写命令会再次显示。 用键移动光标,并加上漏掉的r。再次使用 键召回之