为啥我得到:TypeError:channel.updateOverwrite 不是函数

Posted

技术标签:

【中文标题】为啥我得到:TypeError:channel.updateOverwrite 不是函数【英文标题】:Why am I getting: TypeError: channel.updateOverwrite is not a function为什么我得到:TypeError:channel.updateOverwrite 不是函数 【发布时间】:2022-01-02 08:23:51 【问题描述】:

我在 discord.js 上关注 tutorial,制作票务机器人。我已经仔细检查过,我仍然收到同样的错误:

TypeError:channel.updateOverwrite 不是函数

我查看了我能找到的所有 *** 问题,但没有一个对我有用。我也在 SO 之外进行了更深入的探索,仍然没有帮助。这是我的代码:

module.exports = 
    name: 'ticket',
    description: 'Open a ticket!',
    async execute(client, message, args, cmd, Discord) 
        // creates tickets
        let channel = await message.guild.channels.create(
            `ticket: $message.author.tag`,
             type: 'text' 
        );
        await channel.setParent('912495738947260446');

        // updates channel perms

        channel.updateOverwrite(message.guild.id, 
            SEND_MESSAGE: false,
            VIEW_CHANNEL: false
        );

        channel.updateOverwrite(message.author, 
            SEND_MESSAGE: true,
            VIEW_CHANNEL: true
        );

        const reactionMessage = await channel.send('Thanks for opening a ticket! A staff member will be with you shortly. While you are here, please tell us why you opened this ticket.');

        try 
            await reactionMessage.react("????");
            await reactionMessage.react("????️");
         catch(err) 
            channel.send('Error sending emojis! Please tell a developer to check the console!');
            throw err;
        

        const collector = reactionMessage.createReactionCollector((reaction, user) => message.guild.members.cache.find((member) => member.id === user.id).hasPermission('ADMINISTRATOR'), dispose: true);

        collector.on('collect', (reaction, user) => 
            switch (reaction.emoji.name) 
                case "????":
                    channel.updateOverwrite(message.author,  SEND_MESSAGE: false, VIEW_CHANNEL: false);
                    channel.setname(`???? $channel.name`)
                    break;
                case "????️":
                    channel.send('Deleting Channel in 10 seconds!');
                    setTimeout(() => channel.delete(), 10000);
                    break;
            
        );
    

【问题讨论】:

尝试 channel.overwritePermissions 代替:***.com/questions/62704976/… 【参考方案1】:

您似乎正在使用 discord.js v13 并尝试一些旧代码。在 v13 中删除了 channel#updateOverwrite() 方法,而在以前的版本中 channel#permissionOverwrites 是 collection of overwrites,在 v13 中是 PermissionOverwriteManager。这意味着,您应该使用它的.edit() 方法来更新覆盖:

channel.permissionOverwrites.edit(
  message.author, 
   SEND_MESSAGES: false, VIEW_CHANNEL: false ,
)

【讨论】:

以上是关于为啥我得到:TypeError:channel.updateOverwrite 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

我得到一个“TypeError:'int'对象没有属性'_getitem',我不知道为啥

为啥我得到 Typeerror 超级表达式必须为 null 或函数?

为啥我得到一个 TypeError: PySide2.QtCore.QStringListModel.setData(): no enough arguments

我明白为啥我得到: TypeError: getsockaddrarg: AF_INET address must be tuple, not str

为啥使用默认的 React Google Maps 得到“TypeError:无法将类调用为函数”?

为啥我收到 TypeError: Failed to fetch?