if (message.content.startsWith("_mute")) {
if (!message.member.hasPermission("ADMINISTRATOR")) {
return message.reply("You don't have permission to do this.");
}
if (message.mentions.users.size === 0) {
return message.reply("Usage: `_mute [mention]`");
}
var muteRole = message.guild.roles.cache.find(r => r.name === "mute");
if (typeof muteRole === "undefined") {
return message.reply("Your server doesn't have `mute` role!");
}
message.mentions.members.forEach((member) => {
member.roles.add(muteRole).then((value) => {
message.reply("Succeed to mute " + member.nickname + ".");
}).catch((error) => {
message.reply("Internal bot error");
console.error(error);
});
});
}
I got this error when I tried to assign role to user.
I set up bot's permission number to '1409286326'
Is there anything else I need to do?
Permission
Try using this permission number: 1475677686
It's probably because you were missing some important permissions such as READ_MESSAGES, SEND_MESSAGES and others. Also, your code might need a little revision, undefined is not a string. Try the code below and the suggested permission number:
if (message.content.startsWith("_mute")) {
if (!message.member.hasPermission("ADMINISTRATOR")) {
return message.reply("You don't have permission to do this.");
}
if (!message.mentions.users.array().length) {
return message.reply("Usage: `_mute [mention]`");
}
var muteRole = message.guild.roles.cache.find(r => r.name === "mute");
if (!muteRole) {
return message.reply("Your server doesn't have `mute` role!");
}
message.mentions.members.forEach((member) => {
member.roles.add(muteRole).then((value) => {
message.reply("Succeed to mute " + member.nickname + ".");
}).catch((error) => {
message.reply("Internal bot error");
console.error(error);
});
});
}
Related
I'm having problems making my mute command. I tested it but it doesn't create the Muted role. Maybe I made some mystakes in the over-writing section. I wish someone could help me. Anyway, here's my code:
if (message.content.startsWith(config.prefix + "mute")) {
let toMute = message.mentions.users.first();
if (!message.guild.member(message.author).hasPermission("MANAGE_MESSAGES")) {
return message.channel.send('You do not have the permission for mute users!');
}
if (!message.guild.member(client.user).hasPermission("MANAGE_MESSAGES")) {
return message.channel.send("I don’t have the permission for mute users!");
}
if (!toMute) {
return message.channel.send("You need to ping a user or the user can't be found!");
}
let mutedRole = message.guild.roles.cache.find(mR => mR.name === "Muted");
if (!mutedRole) {
try {
mutedRole = await message.guild.createRole({
name: "Muted",
color: "#000000",
permissions: []
});
message.guild.channels.forEach(async (channel, id) => {
await channel.overwritePermissions(mutedRole, {
SEND_MESSAGES: false,
ADD_REACTIONS: false
})
});
} catch (err) {
console.log(err.stack);
}
}
if (message.guild.member(toMute).roles.cache.has(mutedRole.id)) return message.channel.send("This user is already muted!");
await message.guild.member(toMute).roles.add(mutedRole);
message.channel.send(`${toMute} got muted by <#${message.author.id}> 🔇`)
let {guild} = message;
toMute.send(`You got muted in **${guild.name}** by ${message.author}`)
}
and I'm getting this error.
Can someone help me fixing please? Thanks in advance!
The code:
client.on("message", message => {
if (message.author.id !== "my id") || message.author.id !== "my friend id") return message.delete();
Firstly, you should format your code, secondly, here is the code you should use:
client.on('message', msg => {
if(msg.author.id === 'id' || msg.author.id === 'id') {
//code to run
} else {
return msg.delete();
}
})
Use array:
let users = ['your id', 'your friend's id'];
if(users.includes(message.author.id)){
// your code goes here
}
else {
return msg.delete();
}
A moderator who has manage_roles permissions can even give the owner role to anyone. Is there a way that it can give out no higher role than to his own role?
So if he is admin, he can give at most admin, so not everyone can give random roles to anyone.
const { MessageEmbed } = require('discord.js');
const config = require('../../configs/config.json');
module.exports = {
config: {
name: "give-roles",
},
run: async (client, message, args) => {
message.delete();
if (!message.member.hasPermission('MANAGE_ROLES')) return message.channel.send({
embed: {
title: `You dont have permission to use this command`
}
})
if (!args[0] || !args[1]) return message.channel.send({
embed: {
title: "Incorrect usage, It's `<username || user id> <role name || id>"
}
})
try {
const member = message.mentions.members.first() || message.guild.members.cache.get(args[0]);
const roleName = message.guild.roles.cache.find(r => (r.name === args[1].toString()) || (r.id === args[1].toString().replace(/[^\w\s]/gi, '')));
const alreadyHasRole = member._roles.includes(roleName.id);
if (alreadyHasRole) return message.channel.send({
embed: {
title: "User already has the role defined"
}
})
const embed = new MessageEmbed()
.setTitle(`Role Name: ${roleName.name}`)
.setDescription(`${message.author} has successfully given the role ${roleName} to ${member.user}`)
.setColor('f3f3f3')
.setThumbnail(member.user.displayAvatarURL({ dynamic: true }))
.setFooter(new Date().toLocaleString())
return member.roles.add(roleName).then(() => message.channel.send(embed));
} catch (e) {
return message.channel.send({
embed: {
title: "Try to give a role that exists next time"
}
})
}
}
}
You're able to use roles.highest.position:
let taggedMember = ... //(guildMember)
if (message.member.roles.highest.position < taggedMember.roles.highest.position) {
//code...
}
Docs: https://discord.js.org/#/docs/main/stable/class/RoleManager?scrollTo=highest
I'm trying to create a DM verification system where if a member sends DM to the bot, he gets accepted.
....
const respectrumServer = client.guilds.cache.get('782347082362912768');
client.on('message', message => {
if (message.author.equals(client.user)) return;
var authorid = message.author.id;
if (message.toString().toLowerCase() === "lonely guy is the best") {
if (message.channel.type == "dm") {
if(respectrumServer.members.cache.has(authorid)){
//error is here ^
var verifiedrole = member.respectrumServer.roles.cache.find(role => role.id === '782348009362161714');
var notverifiedrole = member.respectrumServer.roles.cache.find(role => role.id === '797218539563122688');
member.roles.add(verifiedrole);
member.roles.remove(notverifiedrole);
authorid.send('You have been verified');
}
else{
authorid.send('You are not a member of Respectrum');
}
}
else{
message.channel.send('I know, right?');
}
}
else{
return;
}
});
I changed many things like message.author to message.author.id and members.cache.find(authorid) to members.cache.has(authorid)
I don't know what the problem is.
This is because you're trying to get the respectrumServer server before the bot is ready.
Use the following code instead to define it when you receive a new message:
client.on('message', async message => {
if (message.author.equals(client.user)) return;
const respectrumServer = client.guilds.cache.get('782347082362912768');
var authorid = message.author.id;
if (message.toString().toLowerCase() === "lonely guy is the best") {
if (message.channel.type == "dm") {
const member = await respectrumServer.members.fetch(authorid).catch(() => {});
if(member){
//error is here ^
var verifiedrole = member.respectrumServer.roles.cache.find(role => role.id === '782348009362161714');
var notverifiedrole = member.respectrumServer.roles.cache.find(role => role.id === '797218539563122688');
member.roles.add(verifiedrole);
member.roles.remove(notverifiedrole);
authorid.send('You have been verified');
}
else{
authorid.send('You are not a member of Respectrum');
}
}
else{
message.channel.send('I know, right?');
}
}
else{
return;
}
});
I am making a discord bot for a friend and everything worked until i tried to make an unban command. when i tried to unban someone it did not work. then i looked at the error. it displayed:
TypeError: Cannot read property 'displayName' of undefined
at C:\Users\user\folder_name\commands\unban.js:37:67
at processTicksAndRejections (internal/process/task_queues.js:97:5)
Unhandled promise rejection: TypeError: Cannot read property 'displayName' of undefined
at C:\Users\user\folder_name\commands\unban.js:37:67
at processTicksAndRejections (internal/process/task_queues.js:97:5)
this is my code
const Discord = require('discord.js');
module.exports = {
name: 'unban',
description: 'unban user',
aliases: [],
cooldown: 0,
args: true,
usage: '<mention> [reason]',
guildOnly: true,
execute(message, args, client) {
console.log(message.content);
const embedMsg = new Discord.RichEmbed()
.setColor('#0000ff')
.setAuthor(message.author.username, message.author.displayAvatarURL)
.setThumbnail(message.author.displayAvatarURL)
.setTimestamp()
.setFooter('botname', client.user.displayAvatarURL);
let member = message.mentions.members.first();
if (!message.member.hasPermission('BAN_MEMBERS')) {
embedMsg.setDescription(`You don't have permission to unban!`);
return message.channel.send(embedMsg);
}
if (!args.length >= 1) {
embedMsg.setDescription('^unban takes at least one argument! the proper usage is ^unban <mention> [reason]');
message.channel.send(embedMsg);
}
if (args.length < 2) {
message.guild.unban(member).then(() => {
embedMsg.setDescription(`${member.displayName} has been succesfully unbanned`);
return message.channel.send(embedMsg);
}).catch((err) => {
embedMsg.setDescription(`Could not unban ${member.displayName}`);
console.log(err);
return message.channel.send(embedMsg);
});
return;
}
newargs = "";
for (var i = 1; i < args.length; i++) {
newargs += (args[i] + " ");
}
message.guild.unban(member).then(() => {
embedMsg.setDescription(`${member.displayName} has been succesfully unbanned for reason ${newargs}`);
return message.channel.send(embedMsg);
}).catch((err) => {
embedMsg.setDescription(`Could not unban ${member.displayName}`);
console.log(err);
return message.channel.send(embedMsg);
});
return;
}
}
does anyone know what i am doing wrong?
It says in the discord.js's official docs that the unban method returns a member object https://discord.js.org/#/docs/main/stable/class/Guild?scrollTo=unban
The reason why it says 'undefined' is because the member object you are trying to access is not in the server/guild. So, therefore you need add a reference to the member object that the method returns:
message.guild.unban('some user ID').then((member) => {
embedMsg.setDescription(`${member.username} has been succesfully unbanned for reason ${newargs}`);
return message.channel.send(embedMsg);
}
Unbun method return a user promise, so user dont have property displayName, you need use .username
And you can use user.id for unban, so right way will be let member = message.mentions.members.first() || args[0]
This check doing wrong, because its not stop code execute
if (!args.length < 2) {
embedMsg.setDescription('^unban takes at least one argument! the proper usage is ^unban <mention> [reason]');
return message.channel.send(embedMsg);
}
Amm and whats this part code doing? Why its duplicate?
if (args.length < 2) {
message.guild.unban(member)
.then(() => {
embedMsg.setDescription(`${member.username} has been succesfully unbanned`);
return message.channel.send(embedMsg);
})
.catch((err) => {
embedMsg.setDescription(`Could not unban ${member.username}`);
console.log(err);
return message.channel.send(embedMsg);
});
return;
}
The edited code
const Discord = require('discord.js');
module.exports = {
name: 'unban',
description: 'unban user',
aliases: [],
cooldown: 0,
args: true,
usage: '<mention> [reason]',
guildOnly: true,
execute(message, args, client) {
const embedMsg = new Discord.RichEmbed()
.setColor('#0000ff')
.setAuthor(message.author.username, message.author.displayAvatarURL)
.setThumbnail(message.author.displayAvatarURL)
.setTimestamp()
.setFooter('botname', client.user.displayAvatarURL);
let member = message.mentions.members.first() || args[0]
if (!message.member.hasPermission('BAN_MEMBERS')) {
embedMsg.setDescription(`You don't have permission to unban!`);
return message.channel.send(embedMsg);
}
if (!args.length < 2) {
embedMsg.setDescription('^unban takes at least one argument! the proper usage is ^unban <mention> [reason]');
return message.channel.send(embedMsg);
}
let newargs = args.splice(1,args.length).join(' ')
message.guild.unban(member)
.then(() => {
embedMsg.setDescription(`${member.username} has been succesfully unbanned for reason ${newargs}`);
return message.channel.send(embedMsg);
})
.catch((err) => {
embedMsg.setDescription(`Could not unban ${member.username}`);
console.log(err);
return message.channel.send(embedMsg);
});
}
}