【问题标题】:discord.js V12 'filter' undefined [duplicate]discord.js V12“过滤器”未定义[重复]
【发布时间】:2020-07-27 02:46:52
【问题描述】:

所以我将我的机器人更新为 discord.js V12 命令;whois 出现错误 (node:553) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'filter' of undefined

Node.js 是 Discord.js 的当前版本,我知道它是否与代码有关

const { MessageEmbed } = require("discord.js");
const { stripIndents } = require("common-tags");
const { getMember, formatDate } = require("../../functions.js");

module.exports = {
  config:{
    name: "whois",
    aliases: ["who", "user", "info"],
   category: "info",
    description: "Returns user information",
    usage: "[username | id | mention]"
  },
    run: (client, message, args) => {
        const member = getMember(message, args.join(" "));

        // Member variables
        const joined = formatDate(member.joinedAt);
        const roles = member.roles
            .filter(r => r.id !== message.guild.id)
            .map(r => r).join(", ") || 'none';

如果我删除 .filter & .map 会弹出另一个错误 .createdAT

  // User variables
        const created = formatDate(member.user.createdAt);

        const embed = new MessageEmbed()
            .setFooter(member.displayName, member.user.displayAvatarURL({ dynamic:true }))
            .setThumbnail(member.user.displayAvatarURL({ dynamic:true }))
            .setColor(member.displayHexColor === '#000000' ? '#ffffff' : member.displayHexColor)
            .setAuthor(`${member.displayName} | WHOIS`, member.user.displayAvatarURL)

            .addField('Member information:', stripIndents`** Display name:** ${member.displayName}
            ** Joined at:** ${joined}
            ** Roles:** ${roles}`, true)

            .addField('User information:', stripIndents`** ID:** ${member.user.id}
            ** Username**: ${member.user.username}
            ** Tag**: ${member.user.tag}
            ** Created at**: ${created}`, true)

            .setTimestamp()

        if (member.user.presence.game) 
            embed.addField('Currently playing', stripIndents`** Name:** ${member.user.presence.activity.name}`);

        message.channel.send(embed);
    }
}

现在这就是整个 whois 代码,我不知道还有什么需要更新的。

【问题讨论】:

标签: javascript discord.js


【解决方案1】:

要在 v12 中访问 GuildMemberroles 集合,您需要使用 cache

const roles = member.roles.cache.filter(r => r.id !== message.guild.id).map(r => r).join(", ") || 'none';

【讨论】:

  • 好的,所以它停止了未定义的过滤器,但现在它显示了不同的错误 TypeError: Cannot read property 'cache' of undefined
  • 您能否将getMember 函数编辑到您的问题中?还有为什么你需要getMember 函数?你可以使用message.member
【解决方案2】:

Discord.js 指南:

v12 引入了管理器的概念,您将不再能够在 Client#users 等数据结构上直接使用 Collection#get 等收集方法。在尝试使用收集方法之前,您现在必须直接请求管理器上的缓存。任何直接在管理器上调用的方法都会调用 API,例如 GuildMemberManager#fetch 和 MessageManager#delete

  • 旧:client.users.get('123456789012345678');
  • 新:client.users.cache.get('123456789012345678');
  • 旧:channel.messages.get('123456789012345678');
  • 新:channel.messages.cache.get('123456789012345678');
  • 旧:guild.members.get('123456789012345678');
  • 新:guild.members.cache.get('123456789012345678');

更多信息请参考Updating from v11 to v12

【讨论】:

    猜你喜欢
    • 2021-09-21
    • 2020-08-03
    • 1970-01-01
    • 2020-10-11
    • 2021-05-10
    • 2021-02-21
    • 2020-09-02
    • 2021-04-01
    • 2021-02-22
    相关资源
    最近更新 更多