删除特定消息的 Button/Component (discord.js)

Delete Button/Component of a specifc message (discord.js)

我现在正在尝试从机器人消息中删除按钮,但没有成功。为此,我创建了一个命令。执行它时,它最多应该删除特定消息上的特定按钮、最后一个按钮或至少所有按钮。

我尝试了各种方法,但在所有尝试中都没有删除按钮。

module.exports = {
category: 'Utilities',
description: 'Delete Buttons',
permissions: ['ADMINISTRATOR'],

callback: async ({ client, message }) => {
    const channel = client.channels.cache.get('the channel id')
    channel.messages.fetch('the message id').then(msg => msg.edit({components: []}));
    console.log(msg)
    }
}

当我尝试这样做时,出现以下控制台错误:

TypeError: Cannot read properties of undefined (reading 'messages')

当我尝试这个时,我既没有得到控制台日志,也没有机器人做任何事情...

const { Client, Message } = require("discord.js");

module.exports = {
  category: 'Utilities',
  description: 'Delete Buttons',

  permissions: ['ADMINISTRATOR'],

callback: async ({ client, message }) => {
    client.on('ready', async () => {
            const channel = client.channels.cache.get('the channel id')
                channel.messages.fetch('the message id').then(msg => {
                msg.edit({ components: [] })
            });
        },
    )}
  }

也许你们中有人知道解决方案或想法。 :) 非常感谢!

When I try this, I neither get a console log, nor does the bot do anything

第二个示例不执行任何操作,因为您正在 运行 您的命令上创建一个就绪的事件处理程序。意思是,它正在等待机器人再次“准备就绪”,即与启动时一样登录到 API 的状态。但是您的机器人已经准备就绪,并且在下次重新启动之前不会再次准备就绪,因此什么也不会发生。

对于第一个示例,您得到的错误表明 channelundefined,意思是:

A)您的频道 ID 不正确
- 或者 -
B)指定的频道已不在频道缓存中

如果您 100% 确定 ID 正确,我们可以假设您遇到的问题是后者(频道不在缓存中)。有很多方法可以解决这个问题,但一种简单的方法是简单地获取通道,类似于您尝试获取消息的方式。这是一个例子:

const channel = await client.channels.fetch('the channel id');
const msg = await channel.messages.fetch('the message id');
msg.edit({components: []});

这应该可以解决问题。如果没有,那么问题就复杂得多,并且没有提供足够的信息。另请注意,在上面的示例中,我将 Promise 语法替换为 async/await,因为无论如何您都在使用 async 函数;我这样做只是为了让这个答案更具可读性,你可以选择你喜欢的格式。