TypeError:无法读取未定义的discord js的属性“ first”

时间:2020-09-25 13:29:17

标签: javascript discord discord.js

我知道我并不是最擅长的东西,并且我仍在学习,但是任何人都可以帮助我解决我的错误,我知道这与我的“ let role =”有关,并且与“ { {1}}'标志,我不确定将其更改为什么。

=

当前错误是

if (!message.member.hasPermission('MANAGE_CHANNELS')) return message.reply(Embed3)
        if (!args[0]) return message.reply(Embed2)
        if (!message.mentions.channels.first()) return message.reply(Embed1)
        let role = message.guild.roles.cache.find(r => r.name = args[1]); //const role = message.mentions.roles.first
        if (!role) return message.reply(Embed4);

我正在关注this guide,但仍然不确定该怎么做。

我们非常感谢您的帮助,谢谢,祝您生活愉快! :)

TypeError: Cannot read property 'first' of undefined

在我的index.js中,我有这个

-

EDIT 1

client.on('message', message => { if (!message.content.startsWith(prefix) || message.author.bot) return; let args = message.content.substring(prefix.length).split(" "); const command = args.shift().toLowerCase(); if (command === 'lock') { client.commands.get('lock').execute(message, args) } else if (command === 'unlock') { client.commands.get('unlock').execute(message, args) } })

在此行之后停止打印

EDIT 2

2 个答案:

答案 0 :(得分:0)

因此,根据我在不和谐文档中的阅读内容

https://discord.js.org/#/docs/main/stable/class/Message?scrollTo=mentions https://discord.js.org/#/docs/main/stable/class/MessageMentions?scrollTo=channels

以及我在您的代码中看到的内容:

如果在不同渠道中没有提及,则提及可能没有设置channels属性。因此,您可能需要检查以下内容:

if (message.mentions.channels || !message.mentions.channels.first()) return message.reply(Embed1)

您使用的发现也很奇怪:

let role = message.guild.roles.cache.find(r => r.name = args[1]);

filter方法中的此语句将始终将高速缓存的名称设置为args [1]并返回该值。如果args [1]是真实的,则它将返回第一个缓存对象。 您需要在这里进行比较

let role = message.guild.roles.cache.find(r => r.name == args[1]); // does not check type
or
let role = message.guild.roles.cache.find(r => r.name === args[1]); // checks type

编辑2:

您可能还需要检查访问channel.first()道具的方式。 channel.first()是一种方法。如果您希望此方法的结果一定要调用它。

并使用then方法正确处理承诺。由于setName会发出承诺,因此您需要接受它! https://discord.js.org/#/docs/main/stable/class/GuildChannel?scrollTo=setName

message.mentions.channels.first().setName(`?${channel.name}`).then((result) => { // If channel name is not changed it's being rate limited.
    try {
        await channel.updateOverwrite(role, {
            SEND_MESSAGES: false
        }); 
        message.channel.send(Embed6);
    } catch (err) {
        console.log(err);
        message.channel.send(Embed7); 
    }
});

还应确保完全内联代码并检查控件结构。如果您使用的是VScode,请使用格式方法:How do you format code in Visual Studio Code (VSCode)

请尝试阅读现代JS中的async / await语句。 https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/async_function

如果要在此处使用await语句,请将其包装在异步函数中,或使用then方法在处理后继续执行。

答案 1 :(得分:-1)

我相信您的错误可能是试图在频道中找到第一个提到的用户。您可能需要为此使用<div class="ansicht"> <div class="b_dotted" group="1" id="argumente1" draggable="true" ondragstart="drag(event)">Was ist mit</div> <div class="b_dotted" group="2" id="argumente2" draggable="true" ondragstart="drag(event)">Individualismus</div> <div class="b_dotted" group="3" id="argumente3" draggable="true" ondragstart="drag(event)">Der Trittbettfahrer-Vorwand</div> <div class="b_dotted" group="4" id="argumente4" draggable="true" ondragstart="drag(event)">Technologischer Optimismus </div> <div class="b_dotted" group="1" id="argumente5" draggable="true" ondragstart="drag(event)">Alles Gerede, wenig Handlung</div> <div class="b_dotted" group="2" id="argumente6" draggable="true" ondragstart="drag(event)">Lösungskonzept Fossile Energieträger</div> <div class="b_dotted" group="3" id="argumente7" draggable="true" ondragstart="drag(event)">Keine Peitsche, nur Zuckerbrot </div> <div class="b_dotted" group="4" id="argumente8" draggable="true" ondragstart="drag(event)">Berufung auf Soziale Gerechtigkeit </div> <div class="b_dotted" group="1" id="argumente9" draggable="true" ondragstart="drag(event)">Perfektionismus</div> <div class="b_dotted" group="2" id="argumente10" draggable="true" ondragstart="drag(event)">Berufung auf Wohlstand </div> <div class="b_dotted" group="3" id="argumente11" draggable="true" ondragstart="drag(event)">Der Untergang</div> <div class="b_dotted" group="4" id="argumente12" draggable="true" ondragstart="drag(event)">Veränderung ist unmöglich</div> </div> <div id="grenze"> <img class="dropzone" group="1" id="wolke1" ondrop="drop(event)" ondragover="allowDrop(event)" src="img/wolke1.png"> <img class="dropzone" group="2" id="wolke2" ondrop="drop(event)" ondragover="allowDrop(event)" src="img/wolke2.png"> <img class="dropzone" group="3" id="wolke3" ondrop="drop(event)" ondragover="allowDrop(event)" src="img/wolke3.png"> <img class="dropzone" group="4" id="wolke4" ondrop="drop(event)" ondragover="allowDrop(event)" src="img/wolke4.png"> </div>。如果您使用异步,请确保遵守诺言!

如果这不是您想要的,而您只是想找到运行该命令的消息中提到的第一个用户,则需要使用:

.fetch()