删除特定消息的 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 的状态。但是您的机器人已经准备就绪,并且在下次重新启动之前不会再次准备就绪,因此什么也不会发生。
对于第一个示例,您得到的错误表明 channel
是 undefined
,意思是:
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
函数;我这样做只是为了让这个答案更具可读性,你可以选择你喜欢的格式。
我现在正在尝试从机器人消息中删除按钮,但没有成功。为此,我创建了一个命令。执行它时,它最多应该删除特定消息上的特定按钮、最后一个按钮或至少所有按钮。
我尝试了各种方法,但在所有尝试中都没有删除按钮。
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 的状态。但是您的机器人已经准备就绪,并且在下次重新启动之前不会再次准备就绪,因此什么也不会发生。
对于第一个示例,您得到的错误表明 channel
是 undefined
,意思是:
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
函数;我这样做只是为了让这个答案更具可读性,你可以选择你喜欢的格式。