首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError: data.matchAll不是一个函数discord.js 13.6.0

TypeError: data.matchAll不是一个函数discord.js 13.6.0
EN

Stack Overflow用户
提问于 2022-03-13 02:55:11
回答 1查看 104关注 0票数 1

这是我的密码

代码语言:javascript
复制
            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)
                    }
                }
            }

错误是

代码语言:javascript
复制
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或发光公司Nova)。

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

我试图用fetchInvites或invites.fetch替换fetchInvites或invites.fetch,但没有起作用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-14 04:14:30

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

这个特定的错误不是djs v12与v13之间的问题。这是使用.match()时的一个问题。让我们看一看:

代码语言:javascript
复制
const inviteLink = await message.content.match(new RegExp(`discord\.(gg|io|me|li)\/.+|discordapp\.com\/invite\.+`))

注意,regex定义了一个组(组是通过括号定义的,所以您的第一个也是唯一的组是(gg|io|me|li))。当在String#match()的正则表达式中定义组时,它返回一个Array而不是单个String。返回的Array遵循以下格式:

代码语言:javascript
复制
[
    "full match",
    "group 1 match",
    "group 2 match",
    ...
]

不管您在String中定义了多少组,它都是这样做的。您只定义了一个组,因此inviteLink的长度为2。例如,对于invite discord.gg/abc123,它将如下所示:

代码语言:javascript
复制
[
    "discord.gg/abc123",
    "gg"
]

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

代码语言:javascript
复制
const inviteLink = message.content.match(/discord\.(gg|io|me|li)\/.+|discordapp\.com\/invite\.+/)?.[0];

我在这里使用了可选的链式运算符,所以只要匹配不是undefined (否则它只返回undefined),它就会得到undefined中的第一个条目。请注意,通过使用regex语法而不是RegExp对象,我还稍微简化了regex;这对于避免不双转义反斜杠的问题很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71454064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档