从discord.js v12切换,如何将代码修改为discord.js v13语法



我正试图为我的discord服务器创建一个赠品机器人,正如标题所说,代码几乎是用djs v12和djs v13混合编写的。机器人程序目前已打开,但我收到了一堆错误,我认为它源自我的start.js文件。有人知道我该如何解决这个问题吗?

错误为:

if (message.member.permission.has('MANAGE_MESSAGES') && !message.member.roles.cache.some((r) => r.id === config["Giveaway_Options"].giveawayManagerID)) {
^
TypeError: Cannot read properties of undefined (reading 'has')

我在start.js:中的代码

const ms = require('ms');
const config = require("../../config.json")
module.exports = {
config: {
name: "start",
description: "Starts a giveaway.",
usage: "[channel] [duration] [winners] [prize]",
category: "Giveaways",
accessableby: "Admins",
aliases: [], // To add custom aliases just type ["alias1", "alias2"].
},
run: async (client, message, args) => {
if (config["Giveaway_Options"].giveawayManagerID) {
if (!message.member.permission.has('MANAGE_MESSAGES') && !message.member.roles.cache.some((r) => r.id === config["Giveaway_Options"].giveawayManagerID)) {
return message.channel.send(':boom: You need to have the `MANAGE_MESSAGES` permissions to start giveaways.');
}
} else {
if (!message.member.permission.has('MANAGE_MESSAGES') && !message.member.roles.cache.some((r) => r.name === "Giveaways")) {
return message.channel.send(':boom: You need to have the `MANAGE_MESSAGES` permissions to start giveaways.');
}
}
let giveawayChannel = message.mentions.channels.first();
if (!giveawayChannel) {
return message.channel.send(':boom: Uh oh, I couldn't find that channel! Try again!');
}
let giveawayDuration = args[1];
if (!giveawayDuration || isNaN(ms(giveawayDuration))) {
return message.channel.send(':boom: Hm. you haven't provided a duration. Can you try again?');
}
let giveawayNumberWinners = args[2];
if (isNaN(giveawayNumberWinners) || (parseInt(giveawayNumberWinners) <= 0)) {
return message.channel.send(':boom: Uh... you haven't provided the amount of winners.');
}
let giveawayPrize = args.slice(3).join(' ');
if (!giveawayPrize) {
return message.channel.send(':boom: Oh, it seems like you didn't give me a valid prize!');
}
if (!config["Giveaway_Options"].showMention && config["Giveaway_Options"].giveawayRoleID && config["Giveaway_Options"].giveawayMention) {
giveawayChannel.send(`<@&${config["Giveaway_Options"].giveawayRoleID}>`).then((msg) => msg.delete({ timeout: 1000 }))
client.giveawaysManager.start(giveawayChannel, {
time: ms(giveawayDuration),
prize: giveawayPrize,
winnerCount: parseInt(giveawayNumberWinners),
hostedBy: config["Giveaway_Options"].hostedBy ? message.author : null,
messages: {
giveaway: ":tada: **GIVEAWAY** :tada:",
giveawayEnded: ":tada: **GIVEAWAY ENDED** :tada:",
timeRemaining: "Time remaining: **{duration}**!",
inviteToParticipate: "React with 🎉 to participate!",
winMessage: "Congratulations, {winners}! You won the **{prize}**!",
embedFooter: "Giveaways",
noWinner: "Not enough entrants to determine a winner!",
hostedBy: "Hosted by: {user}",
winners: "winner(s)",
endedAt: "Ended at",
units: {
seconds: "seconds",
minutes: "minutes",
hours: "hours",
days: "days",
pluralS: false
}
}
});
} else if (config["Giveaway_Options"].showMention && config["Giveaway_Options"].giveawayRoleID && config["Giveaway_Options"].giveawayMention) {
client.giveawaysManager.start(giveawayChannel, {
time: ms(giveawayDuration),
prize: giveawayPrize,
winnerCount: parseInt(giveawayNumberWinners),
hostedBy: config["Giveaway_Options"].hostedBy ? message.author : null,
messages: {
giveaway: (config["Giveaway_Options"].showMention ? `<@&${config["Giveaway_Options"].giveawayRoleID}>nn` : "") + ":tada: **GIVEAWAY** :tada:",
giveawayEnded: (config["Giveaway_Options"].showMention ? `<@&${config["Giveaway_Options"].giveawayRoleID}>nn` : "") + ":tada: **GIVEAWAY ENDED** :tada:",
timeRemaining: "Time remaining: **{duration}**!",
inviteToParticipate: "React with 🎉 to participate!",
winMessage: "Congratulations, {winners}! You won the **{prize}**!",
embedFooter: "Giveaways",
noWinner: "Not enough entrants to determine a winner!",
hostedBy: "Hosted by: {user}",
winners: "winner(s)",
endedAt: "Ended at",
units: {
seconds: "seconds",
minutes: "minutes",
hours: "hours",
days: "days",
pluralS: false
}
}
});
} else if (!config["Giveaway_Options"].showMention && !config["Giveaway_Options"].giveawayRoleID && config["Giveaway_Options"].giveawayMention) {
giveawayChannel.send(`@everyone`).then((msg) => msg.delete({ timeout: 1000 }))
client.giveawaysManager.start(giveawayChannel, {
time: ms(giveawayDuration),
prize: giveawayPrize,
winnerCount: parseInt(giveawayNumberWinners),
hostedBy: config["Giveaway_Options"].hostedBy ? message.author : null,
messages: {
giveaway: ":tada: **GIVEAWAY** :tada:",
giveawayEnded: ":tada: **GIVEAWAY ENDED** :tada:",
timeRemaining: "Time remaining: **{duration}**!",
inviteToParticipate: "React with 🎉 to participate!",
winMessage: "Congratulations, {winners}! You won the **{prize}**!",
embedFooter: "Giveaways",
noWinner: "Not enough entrants to determine a winner!",
hostedBy: "Hosted by: {user}",
winners: "winner(s)",
endedAt: "Ended at",
units: {
seconds: "seconds",
minutes: "minutes",
hours: "hours",
days: "days",
pluralS: false
}
}
});
} else if (config["Giveaway_Options"].showMention && !config["Giveaway_Options"].giveawayRoleID && config["Giveaway_Options"].giveawayMention) {
client.giveawaysManager.start(giveawayChannel, {
time: ms(giveawayDuration),
prize: giveawayPrize,
winnerCount: parseInt(giveawayNumberWinners),
hostedBy: config["Giveaway_Options"].hostedBy ? message.author : null,
messages: {
giveaway: (config["Giveaway_Options"].showMention ? `@everyonenn` : "") + ":tada: **GIVEAWAY** :tada:",
giveawayEnded: (config["Giveaway_Options"].showMention ? `@everyonenn` : "") + ":tada: **GIVEAWAY ENDED** :tada:",
timeRemaining: "Time remaining: **{duration}**!",
inviteToParticipate: "React with 🎉 to participate!",
winMessage: "Congratulations, {winners}! You won the **{prize}**!",
embedFooter: "Giveaways",
noWinner: "Not enough entrants to determine a winner!",
hostedBy: "Hosted by: {user}",
winners: "winner(s)",
endedAt: "Ended at",
units: {
seconds: "seconds",
minutes: "minutes",
hours: "hours",
days: "days",
pluralS: false
}
}
});
} else if (!config["Giveaway_Options"].giveawayMention) {
client.giveawaysManager.start(giveawayChannel, {
time: ms(giveawayDuration),
prize: giveawayPrize,
winnerCount: parseInt(giveawayNumberWinners),
hostedBy: config["Giveaway_Options"].hostedBy ? message.author : null,
messages: {
giveaway: ":tada: **GIVEAWAY** :tada:",
giveawayEnded: ":tada: **GIVEAWAY ENDED** :tada:",
timeRemaining: "Time remaining: **{duration}**!",
inviteToParticipate: "React with 🎉 to participate!",
winMessage: "Congratulations, {winners}! You won the **{prize}**!",
embedFooter: "Giveaways",
noWinner: "Not enough entrants to determine a winner!",
hostedBy: "Hosted by: {user}",
winners: "winner(s)",
endedAt: "Ended at",
units: {
seconds: "seconds",
minutes: "minutes",
hours: "hours",
days: "days",
pluralS: false
}
}
});
}

message.channel.send(`:tada: Done! The giveaway for the `${giveawayPrize}` is starting in ${giveawayChannel}!`);
}
}

看起来你打错了,这根本不是问题。只需将其更改为。。。

if (!message.member.permissions.has('MANAGE_MESSAGES')

对于与message事件有关的错误,它在v13中已更改为messageCreate

因此,如果你有一个名为message.js或类似性质的文件,或者你的index.js/main.js中有它,你所需要做的就是这个

v12

client.on('message', () => {});

v13

client.on('messageCreate', () => {});

只要将其从CCD_ 8改变为CCD_。

最新更新