问题描述
我想制作一个票务系统,当您对 ✅ 做出反应时,在票证中只允许管理员查看频道。 (关闭票证。)
代码:
if (reaction.emoji.name === "✅") {
if(!reaction.message.channel.name.includes('ticket-')) return
reaction.users.remove(user)
reaction.message.reactions.cache.get('✅').remove()
reaction.message.reactions.cache.get('❌').remove()
let channel = reaction.message
channel.updateOverwrite("user.id",{ VIEW_CHANNEL: false });
}
错误:
TypeError: channel.updateOverwrite is not a function
解决方法
首先,channel
不是 GuildChannel
的实例,而是 Message
的实例,这可能是一个错误。要获取相应的 GuildChannel
对象,请使用以下内容:(如 PerplexingParadox 在其 comment 中所说。)
let channel = reaction.message.channel;
接下来是 Collection.get()
方法接受一个键作为其参数,在这种情况下是反应 ID(或 Twitter Snowflake)。要按名称查找反应,您可以这样做:
for (const emojiName of ["✅","❌"]) {
reaction.message.reactions.cache.find((reaction) => {
return reaction.emoji.name === emojiName;
})?.remove();
}
并在使用 optional chaining operator 找到它们时将其删除。
最后 GuildChannel.updateOverwrite()
接受 RoleResolvable
或 UserResolvable
作为它的第一个参数。传入用户 ID 是正确的,因为它属于 UserResolvable
。您可能不小心在 user.id
周围添加了引号。它是一个变量,如果您希望将其视为一个变量,请删除引号,否则它只会被视为一个带有文本的字符串。并且无法使用,因为文本“user.id”不是有效的 Twitter Snowflake。
channel.updateOverwrite(user.id,{ VIEW_CHANNEL: false });