TypeError: data.matchAll is not a function discord.js 13.6.0

TypeError: data.matchAll is not a function discord.js 13.6.0

这是我的代码

            if (data.guild.plugins.partnerCounting.enabled) {
                if (message.channel.id === data.guild.plugins.partnerCounting.channel) {
                    if (/(discord\.(gg|io|me|li)\/.+|discordapp\.com\/invite\/.+)/i.test(message.content)) {

                        const Messages = require("discord-messages"); // messagecountertest
                        const messagesSchema = require("../base/Messages")
                        let UserDataPartner = await messagesSchema.findOne({
                            userID: message.author.id,
                            guildID: message.guild.id
                        })
                        if (!UserDataPartner) {
                            Messages.createUser(message.author.id, message.guild.id) 
                        }

                        const inviteLink = await message.content.match(new RegExp(`discord\.(gg|io|me|li)\/.+|discordapp\.com\/invite\.+`))
                        setTimeout(async () => {
                         // in this 
                ---------> await client.fetchInvite(inviteLink) <---------
                                .then(async (invite) => {

                                    if (data.guild.plugins.partnerCounting.ignored.includes(invite.guild.id)) {
                                        return message.error("f. utility/partnercount:IGNORED_GUILD")

                                    } else {

                                        await Messages.appendMessage(message.author.id, message.guild.id, 1);

                                        const user = await Messages.fetch(message.author.id, message.guild.id);

                                        setTimeout(async () => {
                                            const embed = new Discord.MessageEmbed()
                                                .setAuthor({ name: `${message.author.tag} | ${message.author.id}`, iconURL: message.author.displayAvatarURL({ size: 512, dynamic: true, format: 'png' }) }).setDescription(message.translate("f. utility/partnercount:SETDESCRIPTION", {
                                                    guild: invite.guild.name,
                                                    amount: user.data.messages
                                                }))
                                                .setFooter({ text: message.translate("f. utility/partnercount:SETFOOTER") })
                                                .setColor(this.client.config.embed.color)

                                            return message.reply({ embeds: [embed] })
                                        }, 100)
                                    }
                                })
                        }, 100)
                    }
                }
            }

错误是

TypeError: data.matchAll is not a function
    at Function.resolveCode (C:\Users\ALL\Desktop\Slodziak13vNew\node_modules\discord.js\src\util\DataResolver.js:37:17)
    at Function.resolveInviteCode (C:\Users\ALL\Desktop\Slodziak13vNew\node_modules\discord.js\src\util\DataResolver.js:46:17)
    at Slodziak.fetchInvite (C:\Users\ALL\Desktop\Slodziak13vNew\node_modules\discord.js\src\client\Client.js:306:31)
    at Timeout._onTimeout (C:\Users\ALL\Desktop\Slodziak13vNew\events\messageCreate.js:196:21)
    at listOnTimeout (node:internal/timers:557:17)
    at processTimers (node:internal/timers:500:7)

代码适用于 discord.js 12(是的,在 d.js 12 中有效,但在 d.js 13 中无效)

顺便说一句,这是计数伙伴关系的代码(与 Aiyu 或 Luminous Nova 相同)

有人知道怎么解决吗?或以其他方式编写,以便机器人可以读取消息中的邀请信息,例如guild.id

我尝试用 fetchInvites 或 invites.fetch 替换 fetchInvite,但没用

您可能需要检查 inviteLink 的值是多少。 fetchInvite() 期望它是一些 String,但它不是 String,导致发生此错误(字符串上有方法 .matchAll(),所以此错误发生是因为 inviteLink 不是字符串)。将其记录到控制台并亲自查看。它可能是 undefinedArray.

此特定错误不是 djs v12 与 v13 的问题。这是您使用 .match() 的问题。一起来看看吧:

const inviteLink = await message.content.match(new RegExp(`discord\.(gg|io|me|li)\/.+|discordapp\.com\/invite\.+`))

请注意,您的正则表达式定义了一个组(组是通过括号定义的,因此您的第一个也是唯一一个组是 (gg|io|me|li))。当在 String#match() 的正则表达式中定义组时,它 return 是一个 Array 而不是单个 String。 returned Array 采用这种格式:

[
    "full match",
    "group 1 match",
    "group 2 match",
    ...
]

无论您在 String 中找到多少您定义的组,它都会执行此操作。您只定义了一个组,因此 inviteLink 的长度为 2。例如,对于 discord.gg/abc123 邀请,它将看起来像这样:

[
    "discord.gg/abc123",
    "gg"
]

如您所见,您只需要 Array 中的第一项,因为它代表完整的邀请 URL。这就是您需要传递给 fetchInvite() 而不是整个 Array 的内容。你可以这样做:

const inviteLink = message.content.match(/discord\.(gg|io|me|li)\/.+|discordapp\.com\/invite\.+/)?.[0];

我在这里使用了可选的链接运算符,所以只要匹配不是 undefined,它就会得到 Array 中的第一项(否则它只会 return undefined).请注意,我还通过使用正则表达式语法而不是 RegExp 对象稍微简化了您的正则表达式;这可能有助于避免没有 double-escaping 反斜杠的问题。