I'm attempting to create a giveaway bot for my discord server and as the title says, the code is pretty much written with a mix of djs v12 and djs v13. The bot currently turns on, but I'm getting a bunch of errors and I think it's originating from my start.js
file. Does anyone have any idea how do I go about rectifying this?
The error is:
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')
My code in 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}!`);
}
}
It looks like you typed it wrong, which is not a problem at all. simply change it to this...
if (!message.member.permissions.has('MANAGE_MESSAGES')
For the error relating to the message
event, it has changed to messageCreate
in v13.
So if you have a file named message.js
or something in that nature, or if you have it in your index.js
/ main.js
, all you would need to do is this
v12
client.on('message', () => {});
v13
client.on('messageCreate', () => {});
just change it from message
to messageCreate
as seen above.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.