【发布时间】:2021-11-29 22:03:35
【问题描述】:
终于开始将我的机器人从 v12 更新到 v13,并且遇到了一个我似乎无法解决的问题。我有一个在 v12 上完美运行但在 v13 上无法运行的邀请跟踪器。我已经包含了下面的代码,注释行是我知道需要为 v13 更改的 v12 代码。
// const Discord = require('discord.js')
const {
Client,
Intents
} = require('discord.js')
// const client = new Discord.Client({
// partials: ['MESSAGE', 'CHANNEL', 'REACTION']
// })
const client = new Client({
intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MEMBERS, Intents.FLAGS.GUILD_BANS, Intents.FLAGS.GUILD_EMOJIS_AND_STICKERS, Intents.FLAGS.GUILD_INTEGRATIONS, Intents.FLAGS.GUILD_WEBHOOKS, Intents.FLAGS.GUILD_INVITES, Intents.FLAGS.GUILD_VOICE_STATES, Intents.FLAGS.GUILD_PRESENCES, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS, Intents.FLAGS.GUILD_MESSAGE_TYPING, Intents.FLAGS.DIRECT_MESSAGES, Intents.FLAGS.DIRECT_MESSAGE_REACTIONS, Intents.FLAGS.DIRECT_MESSAGE_TYPING],
partials: ['MESSAGE', 'CHANNEL', 'REACTION']
})
const guildInvites = new Map()
// client.on('inviteCreate', async invite => guildInvites.set(invite.guild.id, await invite.guild.fetchInvites()))
client.on('inviteCreate', async invite => guildInvites.set(invite.guild.id, await invite.guild.invites.fetch()))
client.once('ready', () => {
client.guilds.cache.forEach(guild => {
//guild.fetchInvites()
guild.invites.fetch()
.then(invites => guildInvites.set(guild.id, invites))
.catch(err => {
console.log(err)
console.log(guildInvites)
client.channels.cache.get('channelId').send({
content: `${err}`
})
})
})
})
client.on('guildMemberAdd', async member => {
const cachedInvites = guildInvites.get(member.guild.id)
// const newInvites = await member.guild.fetchInvites()
const newInvites = await member.guild.invites.fetch()
guildInvites.set(member.guild.id, newInvites)
try {
const usedInvite = newInvites.find(inv => cachedInvites.get(inv.code).uses < inv.uses)
console.log(cachedInvites)
console.log(newInvites)
console.log(usedInvite)
console.log(`The code ${usedInvite.code} was just used by ${member.user.username}.`)
} catch (err) {
console.log(err)
client.channels.cache.get('channelId').send({
content: `${err}`
})
}
})
这是控制台日志结果:
console.log(cachedInvites) => 在下面返回
Collection(2) [Map] {
'11111111' => Invite {
guild: Guild {
id: 'xxxx',
name: "Testing Server",
icon: null,
features: [Array],
commands: [GuildApplicationCommandManager],
members: [GuildMemberManager],
channels: [GuildChannelManager],
bans: [GuildBanManager],
roles: [RoleManager],
presences: PresenceManager {},
voiceStates: [VoiceStateManager],
stageInstances: [StageInstanceManager],
invites: [GuildInviteManager],
deleted: false,
available: true,
shardId: 0,
splash: null,
banner: null,
description: null,
verificationLevel: 'LOW',
vanityURLCode: null,
nsfwLevel: 'DEFAULT',
discoverySplash: null,
memberCount: 3,
large: false,
applicationId: null,
afkTimeout: 900,
afkChannelId: 'xxxx',
systemChannelId: 'xxxx',
premiumTier: 'NONE',
premiumSubscriptionCount: 0,
explicitContentFilter: 'ALL_MEMBERS',
mfaLevel: 'NONE',
joinedTimestamp: 1633812225872,
defaultMessageNotifications: 'ONLY_MENTIONS',
systemChannelFlags: [SystemChannelFlags],
maximumMembers: 250000,
maximumPresences: null,
approximateMemberCount: null,
approximatePresenceCount: null,
vanityURLUses: null,
rulesChannelId: 'xxxx',
publicUpdatesChannelId: 'xxxx',
preferredLocale: 'en-US',
ownerId: 'xxxx',
emojis: [GuildEmojiManager],
stickers: [GuildStickerManager]
},
code: '11111111',
presenceCount: null,
memberCount: null,
temporary: false,
maxAge: 604800,
uses: 40,
maxUses: 0,
inviter: User {
id: 'xxxx',
bot: false,
system: false,
flags: [UserFlags],
username: 'xxxx',
discriminator: 'xxxx',
avatar: 'xxxx',
banner: undefined,
accentColor: undefined
},
targetUser: null,
targetApplication: null,
targetType: null,
channel: TextChannel {
type: 'GUILD_TEXT',
deleted: false,
guild: [Guild],
guildId: 'xxxx',
parentId: 'xxxx',
permissionOverwrites: [PermissionOverwriteManager],
messages: [MessageManager],
threads: [ThreadManager],
nsfw: false,
id: 'xxxx',
name: 'welcome',
rawPosition: 3,
topic: null,
lastMessageId: 'xxxx',
rateLimitPerUser: 0
},
createdTimestamp: 1633922331801,
_expiresTimestamp: null,
stageInstance: null
},
'22222222' => Invite {
guild: Guild {
id: 'xxxx',
name: "Testing Server",
icon: null,
features: [Array],
commands: [GuildApplicationCommandManager],
members: [GuildMemberManager],
channels: [GuildChannelManager],
bans: [GuildBanManager],
roles: [RoleManager],
presences: PresenceManager {},
voiceStates: [VoiceStateManager],
stageInstances: [StageInstanceManager],
invites: [GuildInviteManager],
deleted: false,
available: true,
shardId: 0,
splash: null,
banner: null,
description: null,
verificationLevel: 'LOW',
vanityURLCode: null,
nsfwLevel: 'DEFAULT',
discoverySplash: null,
memberCount: 3,
large: false,
applicationId: null,
afkTimeout: 900,
afkChannelId: 'xxxx',
systemChannelId: 'xxxx',
premiumTier: 'NONE',
premiumSubscriptionCount: 0,
explicitContentFilter: 'ALL_MEMBERS',
mfaLevel: 'NONE',
joinedTimestamp: 1633812225872,
defaultMessageNotifications: 'ONLY_MENTIONS',
systemChannelFlags: [SystemChannelFlags],
maximumMembers: 250000,
maximumPresences: null,
approximateMemberCount: null,
approximatePresenceCount: null,
vanityURLUses: null,
rulesChannelId: 'xxxx',
publicUpdatesChannelId: 'xxxx',
preferredLocale: 'en-US',
ownerId: 'xxxx',
emojis: [GuildEmojiManager],
stickers: [GuildStickerManager]
},
code: '22222222',
presenceCount: null,
memberCount: null,
temporary: false,
maxAge: 604800,
uses: 21,
maxUses: 0,
inviter: User {
id: 'xxxx',
bot: false,
system: false,
flags: [UserFlags],
username: 'xxxx',
discriminator: 'xxxx',
avatar: 'xxx',
banner: undefined,
accentColor: undefined
},
targetUser: null,
targetApplication: null,
targetType: null,
channel: TextChannel {
type: 'GUILD_TEXT',
deleted: false,
guild: [Guild],
guildId: 'xxxxx',
parentId: 'xxxx',
permissionOverwrites: [PermissionOverwriteManager],
messages: [MessageManager],
threads: [ThreadManager],
nsfw: false,
id: 'xxxx',
name: 'guest-chat',
rawPosition: 48,
topic: 'Guest Invitation Link',
lastMessageId: null,
rateLimitPerUser: 0
},
createdTimestamp: 1633969178889,
_expiresTimestamp: null,
stageInstance: null
}
}
console.log(newInvites) => 下面返回
Collection(2) [Map] {
'11111111' => Invite {
guild: Guild {
id: 'xxxx',
name: "Testing Server",
icon: null,
features: [Array],
commands: [GuildApplicationCommandManager],
members: [GuildMemberManager],
channels: [GuildChannelManager],
bans: [GuildBanManager],
roles: [RoleManager],
presences: PresenceManager {},
voiceStates: [VoiceStateManager],
stageInstances: [StageInstanceManager],
invites: [GuildInviteManager],
deleted: false,
available: true,
shardId: 0,
splash: null,
banner: null,
description: null,
verificationLevel: 'LOW',
vanityURLCode: null,
nsfwLevel: 'DEFAULT',
discoverySplash: null,
memberCount: 3,
large: false,
applicationId: null,
afkTimeout: 900,
afkChannelId: 'xxxx',
systemChannelId: 'xxxx',
premiumTier: 'NONE',
premiumSubscriptionCount: 0,
explicitContentFilter: 'ALL_MEMBERS',
mfaLevel: 'NONE',
joinedTimestamp: 1633812225872,
defaultMessageNotifications: 'ONLY_MENTIONS',
systemChannelFlags: [SystemChannelFlags],
maximumMembers: 250000,
maximumPresences: null,
approximateMemberCount: null,
approximatePresenceCount: null,
vanityURLUses: null,
rulesChannelId: 'xxxx',
publicUpdatesChannelId: 'xxxx',
preferredLocale: 'en-US',
ownerId: 'xxxx',
emojis: [GuildEmojiManager],
stickers: [GuildStickerManager]
},
code: '11111111',
presenceCount: null,
memberCount: null,
temporary: false,
maxAge: 604800,
uses: 40,
maxUses: 0,
inviter: User {
id: 'xxxx',
bot: false,
system: false,
flags: [UserFlags],
username: 'xxxx',
discriminator: 'xxxx',
avatar: 'xxxx',
banner: undefined,
accentColor: undefined
},
targetUser: null,
targetApplication: null,
targetType: null,
channel: TextChannel {
type: 'GUILD_TEXT',
deleted: false,
guild: [Guild],
guildId: 'xxxx',
parentId: 'xxxx',
permissionOverwrites: [PermissionOverwriteManager],
messages: [MessageManager],
threads: [ThreadManager],
nsfw: false,
id: 'xxxx',
name: 'welcome',
rawPosition: 3,
topic: null,
lastMessageId: 'xxxx',
rateLimitPerUser: 0
},
createdTimestamp: 1633922331801,
_expiresTimestamp: null,
stageInstance: null
},
'22222222' => Invite {
guild: Guild {
id: '878285237082271744',
name: "Testing Server",
icon: null,
features: [Array],
commands: [GuildApplicationCommandManager],
members: [GuildMemberManager],
channels: [GuildChannelManager],
bans: [GuildBanManager],
roles: [RoleManager],
presences: PresenceManager {},
voiceStates: [VoiceStateManager],
stageInstances: [StageInstanceManager],
invites: [GuildInviteManager],
deleted: false,
available: true,
shardId: 0,
splash: null,
banner: null,
description: null,
verificationLevel: 'LOW',
vanityURLCode: null,
nsfwLevel: 'DEFAULT',
discoverySplash: null,
memberCount: 3,
large: false,
applicationId: null,
afkTimeout: 900,
afkChannelId: 'xxxx',
systemChannelId: 'xxxx',
premiumTier: 'NONE',
premiumSubscriptionCount: 0,
explicitContentFilter: 'ALL_MEMBERS',
mfaLevel: 'NONE',
joinedTimestamp: 1633812225872,
defaultMessageNotifications: 'ONLY_MENTIONS',
systemChannelFlags: [SystemChannelFlags],
maximumMembers: 250000,
maximumPresences: null,
approximateMemberCount: null,
approximatePresenceCount: null,
vanityURLUses: null,
rulesChannelId: 'xxxx',
publicUpdatesChannelId: 'xxxx',
preferredLocale: 'en-US',
ownerId: 'xxxx',
emojis: [GuildEmojiManager],
stickers: [GuildStickerManager]
},
code: '22222222',
presenceCount: null,
memberCount: null,
temporary: false,
maxAge: 604800,
uses: 22,
maxUses: 0,
inviter: User {
id: 'xxxx',
bot: false,
system: false,
flags: [UserFlags],
username: 'xxxx',
discriminator: 'xxxx',
avatar: 'xxxx',
banner: undefined,
accentColor: undefined
},
targetUser: null,
targetApplication: null,
targetType: null,
channel: TextChannel {
type: 'GUILD_TEXT',
deleted: false,
guild: [Guild],
guildId: 'xxxx',
parentId: 'xxxx',
permissionOverwrites: [PermissionOverwriteManager],
messages: [MessageManager],
threads: [ThreadManager],
nsfw: false,
id: 'xxxx',
name: 'guest-chat',
rawPosition: 48,
topic: 'Guest Invitation Link',
lastMessageId: null,
rateLimitPerUser: 0
},
createdTimestamp: 1633969178889,
_expiresTimestamp: null,
stageInstance: null
}
}
console.log(usedInvite) => 返回未定义
我得到的错误信息显然是:
TypeError: Cannot read property 'code' of undefined
【问题讨论】:
-
在实际代码中,'channelId' 是一个数字,所以我没有得到指出。
-
您能否更新您的问题以包含相关数据(例如,邀请的用途和代码——不包括实际代码,仅显示两个集合之间匹配的代码)
cachedInvites和newInvites集合? -
@Cannicide 已添加。
标签: discord.js