【问题标题】:Trying to make a Ticket Bot but gets TypeError: channel.updateOverwrite is not a function尝试制作 Ticket Bot 但得到 TypeError: channel.updateOverwrite 不是函数
【发布时间】:2021-07-29 22:03:55
【问题描述】:

我想制作一个票务系统,并在您对 ✅ 做出反应时在票证中仅从管理员那里查看频道。 (关闭工单。)

代码:

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 只是message 对象,而不是实际的channel 对象。我认为您只需将let channel = reaction.message 切换为let channel = reaction.message.channel

标签: javascript discord discord.js ticket-system


【解决方案1】:

首先,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() 接受RoleResolvableUserResolvable 作为它的第一个参数。传入用户的 id 是正确的,因为它属于 UserResolvable。您可能不小心在user.id 周围添加了引号。它是一个变量,如果您希望它被视为删除引号,否则它将被视为仅是一个包含文本的字符串。并且不会起作用,因为文本“user.id”不是有效的 Twitter Snowflake。

channel.updateOverwrite(user.id, { VIEW_CHANNEL: false });

【讨论】:

  • 另一种方法是这样做:let { channel } = reaction.message
  • @MrMythical 是的,取决于您使用的语法偏好。
猜你喜欢
  • 2021-10-01
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多