为什么我得到:TypeError:Channel。updateOverwrite不是一个函数 [英] Why am I getting: TypeError: channel.updateOverwrite is not a function

查看:14
本文介绍了为什么我得到:TypeError:Channel。updateOverwrite不是一个函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在discord.js上关注tutorial,制作了一个票务机器人。我已重新检查,但仍然收到相同的错误:

TypeError:Channel.updateOverwrite不是函数

我已经检查了我能找到的所有StackOverflow问题,但没有一个对我有效。我也在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;
            }
        });
    }
}

推荐答案

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

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

这篇关于为什么我得到:TypeError:Channel。updateOverwrite不是一个函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆