![](/img/trans.png)
[英]this script, it's a code that I'm updating from V12 of discord.js to v13
[英]Switching from discord.js v12, how do I modify my code to Discord.js v13 syntax?
我正在嘗試為我的 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}>\n\n` : "") + ":tada: **GIVEAWAY** :tada:",
giveawayEnded: (config["Giveaway_Options"].showMention ? `<@&${config["Giveaway_Options"].giveawayRoleID}>\n\n` : "") + ":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 ? `@everyone\n\n` : "") + ":tada: **GIVEAWAY** :tada:",
giveawayEnded: (config["Giveaway_Options"].showMention ? `@everyone\n\n` : "") + ":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', () => {});
只需將其從message
更改為messageCreate
,如上所示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.