fetch undefined in guild.roles - discord.js

Hello I am trying to write a discordbot that syncs a role A on members in guild A to guildB
those Roles are defined by ID
the problem i have is that var users1 = guild1.roles.fetch(args[2]).members; //guild1role throws
(node:54852) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'fetch' of undefined
at SyncRole.run (D:\git\purgebot\Commands\General\syncrole.js:49:37)
at Message.run (D:\git\purgebot\Events\message.js:49:13)
at Luna.<anonymous> (D:\git\purgebot\Luna.js:92:83)
at Luna.emit (events.js:314:20)
at MessageCreateAction.handle (D:\git\purgebot\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (D:\git\purgebot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (D:\git\purgebot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
at WebSocketShard.onPacket (D:\git\purgebot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
at WebSocketShard.onMessage (D:\git\purgebot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
at WebSocket.onMessage (D:\git\purgebot\node_modules\ws\lib\event-target.js:132:16)
Here is the source code of the part that syncs the roles (line 1 = line 37)
const client = this.client;
if(message.member.guild.me.hasPermission('ADMINISTRATOR')) {
var guild1 = client.guilds.fetch(args[0]); //guildid1
var guild2 = client.guilds.fetch(args[1]); //guildid1
var users1 = guild1.roles.fetch(args[2]).members; //guild1role
var users2 = guild2.roles.fetch(args[3]).members; //guild2role
users2.members.forEach(user => {
user.remove(args[3]).catch(console.error);
message.channel.send("removed role " + args[3] + " for " + user.id);
})
users1.members.forEach(user =>{
guild2.members.forEach(user2 => {
if(user.id == user2.id) {
user2.addRole(args[3]);
message.channel.send("added role " + args[3] + " for " + user.id);
}
})
})
message.channel.send("roles synced");
} else {
message.channel.send("https://i.imgur.com/6cpffM4.jpg");
}

GuildManager.fetch() returns a Promise, which must be resolved before you can use the Guild object. So does RoleManager.fetch()
// using `Promise.prototype.then()`
client.guilds.fetch(args[0]).then((guildid1) => {
client.guilds.fetch(args[1]).then((guildid2) => {
let users1, users2;
guild1.roles.fetch(args[2]).then((role) => (users1 = role.members));
guild2.roles.fetch(args[3]).then((role) => (users2 = role.members));
// code...
});
});
// using `async/await`
// **make sure your function is `async`**
const guild1 = await client.guilds.fetch(args[0]);
const guild2 = await client.guilds.fetch(args[1]);
const users1 = (await guild1.roles.fetch(args[2])).members;
const users2 = (await guild2.roles.fetch(args[3])).members;

Related

TypeError: Cannot read property 'user' of undefined. I dont know what to do

static description = 'Get information on a mentioned user.';
static usage = '<#user|id>';
static names = ['userinfo', 'ui'];
static userPerms = [];
static botPerms = [];
async execute(client, message) {
var permissions = [];
var acknowledgements = 'None';
const args = this.message.content.trim().split(/ +/g);
var user = this.message.mentions.users.first() || this.message.author;
const member = this.message.mentions.members.first() || this.message.guild.members.cache.get(args[0]) || this.message.member;
const randomColor = "#000000".replace(/0/g, function () { return (~~(Math.random() * 16)).toString(16); });
if(this.message.member.hasPermission("KICK_MEMBERS")){
permissions.push("Kick Members");
}
if(this.message.member.hasPermission("BAN_MEMBERS")){
permissions.push("Ban Members");
}
if(this.message.member.hasPermission("ADMINISTRATOR")){
permissions.push("Administrator");
}
if(this.message.member.hasPermission("MANAGE_MESSAGES")){
permissions.push("Manage Messages");
}
if(this.message.member.hasPermission("MANAGE_CHANNELS")){
permissions.push("Manage Channels");
}
if(this.message.member.hasPermission("MENTION_EVERYONE")){
permissions.push("Mention Everyone");
}
if(this.message.member.hasPermission("MANAGE_NICKNAMES")){
permissions.push("Manage Nicknames");
}
if(this.message.member.hasPermission("MANAGE_ROLES")){
permissions.push("Manage Roles");
}
if(this.message.member.hasPermission("MANAGE_WEBHOOKS")){
permissions.push("Manage Webhooks");
}
if(this.message.member.hasPermission("MANAGE_EMOJIS")){
permissions.push("Manage Emojis");
}
if(!permissions.length == 0){
permissions.push("No Key Permissions Found");
}
if(this.member.user.id == message.guild.ownerID){
acknowledgements = 'Server Owner';
}
const embed = new Discord.MessageEmbed()
.setDescription(`<#${member.user.id}>`)
.setAuthor(`${member.user.tag}`, member.user.displayAvatarURL)
.setColor(randomColor)
.setFooter(`ID: ${message.author.id}`)
.setThumbnail(member.user.displayAvatarURL)
.setTimestamp()
.addField("Status",`${status[member.user.presence.status]}`, true)
.addField('Joined at: ',`${moment(member.joinedAt).format("dddd, MMMM Do YYYY, HH:mm:ss")}`, true)
.addField("Created at: ",`${moment(message.author.createdAt).format("dddd, MMMM Do YYYY, HH:mm:ss")}`, true)
.addField("Permissions: ", `${permissions.join(', ')}`, true)
.addField(`Roles [${member.roles.cache.filter(r => r.id !== message.guild.id).map(roles => `\`${roles.name}\``).length}]`,`${member.roles.cache.filter(r => r.id !== message.guild.id).map(roles => `<#&${roles.id }>`).join(" **|** ") || "No Roles"}`, true)
.addField("Acknowledgements: ", `${acknowledgements}`, true);
this.message.channel.send({embed});
}
}
**I have tried to define user but it's not working. error:
TypeError: Cannot read property 'user' of undefined.
Whenever i used ,userinfo it's not responding anything. I don't know why this happend, but if you find any other error in the code, can you help me fix it too? Thank you.
but that didn't do anything to help.
What am i missing here?**
this.member.user.id
Should be
member.user.id
Look for “something”.user for errors like that. Then figure out why the something is undefined.

How to stop commands when breaking when :"overloaded"

I have a few commands that follow this same code, just some things changed, the code is for -dog command, which works fine within moderation (not spamming the command, maybe running it every 5 seconds) but when it does get spammed it will often spit a odd error into the terminal, I was wondering if there is anyway to fix this or improve it. Thanks!
Language: Discord.js V12
const Discord = require('discord.js');
const url = 'https://www.reddit.com/r/lookatmydog/hot/.json?limit=100'
module.exports = {
name: 'dog',
description: 'sends a dog!',
execute(message, args) {
https.get(url, (result) => {
var body = ''
result.on('data', (chunk) => {
body += chunk
})
result.on('end', () => {
var response = JSON.parse(body)
var index = response.data.children[Math.floor(Math.random() * 99) + 1].data
if (index.post_hint !== 'image') {
var text = index.selftext
const textembed = new Discord.MessageEmbed()
.setTitle(subRedditName)
.setColor('RANDOM')
.setDescription(`[${title}](${link})\n\n${text}`)
.setURL(`https://reddit.com/${subRedditName}`)
message.channel.send(textembed)
}
var image = index.preview.images[0].source.url.replace('&', '&')
var link = 'https://reddit.com' + index.permalink
var subRedditName = index.subreddit_name_prefixed
if (index.post_hint !== 'image') {
const textembed = new Discord.RichEmbed()
.setTitle(subRedditName)
.setColor('RANDOM')
.setDescription(`[${title}](${link})\n\n${text}`)
.setURL(`https://reddit.com/${subRedditName}`)
message.channel.send(textembed)
}
console.log(image);
const imageembed = new Discord.MessageEmbed()
.setTitle('Here is a dog, how nice!')
.setImage(image)
.setColor('RANDOM')
message.channel.send(imageembed)
}).on('error', function (e) {
console.log('Got an error: ', e)
})
})
},
}```
The error I got writing this was:
```C:\Users\-\Desktop\Corn Flakes\commands\Fun\dog.js:26
.setDescription(`[${title}](${link})\n\n${text}`)
^
ReferenceError: title is not defined
at IncomingMessage.<anonymous> (C:\Users\manof\Desktop\Corn Flakes\commands\Fun\dog.js:26:45)
at IncomingMessage.emit (events.js:327:22)
at endReadableNT (internal/streams/readable.js:1327:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21)```

My discord music bot will play music, but when I try to stop it it doesn't work

When I do my play command, my bot works, but when I do my stop command, it gives me a bunch of errors. I am using FFmpeg and discord.js. My code is:
const Discord = require('discord.js');
const bot = new Discord.Client
const ytdl = require("ytdl-core")
const token = 'MY API TOKEN'
const PREFIX = '?';
var version = '1.2';
var servers = {};
bot.on('ready', () => {
console.log('This bot is online!' + version);
})
bot.on('message', message => {
let args = message.content.substring(PREFIX.length).split(" ");
switch (args[0]) {
case 'play':
function play(connection, message) {
var server = servers[message.guild.id];
server.dispatcher = connection.play(ytdl(server.queue[0], { filter: "audioonly" }))
server.queue.shift();
server.dispatcher.on("end", function () {
if (server.queue[0]) {
play(connection, message);
} else {
connection.disconnect();
}
});
}
if (!args[1]) {
message.channel.send("You need to provide a link!")
return;
}
if (!message.member.voice.channel) {
message.channel.send("You must be in a Voice Channel to play the bot!")
return;
}
if (!servers[message.guild.id]) servers[message.guild.id] = {
queue: []
}
var server = servers[message.guild.id];
server.queue.push(args[1]);
if (!message.guild.voice) message.member.voice.channel.join().then(function (connection) {
play(connection, message);
})
break;
case 'skip':
var server = servers[message.guild.id]
if (servers.dispatcher) server.dispatcher.end()
message.channel.send("Skipping the song...")
break;
case 'stop':
if (message.guild.voice.connection) {
for (var i = server.queue.length - 1; i >= 0; i--) {
server.queue.splice(i, 1);
}
server.dispatcher.end();
message.channel.send("Ending the queue leaving the voice channel!")
console.log('stopped the queue')
}
if (message.guild.connection) message.guild.connection.voice.disconnect();
break;
}
});
bot.login(token);
When I play, it works just fine. But when I stop the music, I get this error:
TypeError: Cannot read property 'queue' of undefined
at Client.<anonymous> (C:\Users\picar\Desktop\DiscordMusicBot\index.js:79:36)
at Client.emit (events.js:315:20)
at MessageCreateAction.handle (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:386:31)
at WebSocketShard.onPacket (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:436:22)
at WebSocketShard.onMessage (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:293:10)
at WebSocket.onMessage (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\ws\lib\event-target.js:125:16)
at WebSocket.emit (events.js:315:20)
at Receiver.receiverOnMessage (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\ws\lib\websocket.js:800:20)
case 'stop':
if (message.guild.voice.connection) {
var server = servers[message.guild.id]; // I think this could be useful
for (var i = server.queue.length - 1; i >= 0; i--) {
server.queue.splice(i, 1);
}
server.dispatcher.end();
message.channel.send("Ending the queue leaving the voice channel!")
console.log('stopped the queue')
}
if (message.guild.connection) message.guild.connection.voice.disconnect();
break;

TypeError: Cannot read property 'roles' of undefined at Object.module.exports.run

I am trying to make a tempmute command which saves data to JSON then reads it every 3 seconds to see is the time experied. I made the mute command but I recive an error TypeError: Cannot read property 'roles' of undefined. I delete the if(!message.member.roles.has("675376537272582154")) return message.channel.send('Bu komutu kullanabilmek için「🔪」Mute Premission rolüne sahip olmasınız.') but this time it said TypeError: Cannot read property 'members' of undefined. Can someone help me?
Information
Discord.js Version: v11.6.1
Node.js Version: 12.0.0
Code
const { RichEmbed } = require('discord.js');
const fs = require('fs');
module.exports.run = async (message, args, bot) => {
if(!message.member.roles.has("675376537272582154")) return message.channel.send(`Bu komutu kullanabilmek için \`「🔪」Mute Premission\` rolüne sahip olmasınız.`);
let toMute = message.mentions.member.first() || message.guild.members.get(args[0])
if(!toMute) return message.channel.send(`:x: Susturulacak kullanıcıyı etiketlemelisin!`)
let timeMute = args[1]
if(!timeMute) return message.channel.send(':x: Susturma süresini dakika cinsinden yazmalısın!')
if(isNaN(args[1])) return message.channel.send(':x: Senin de bildiğin gibi süre sadece sayı olabilir!')
let reason = args.slice(2).join(" ")
if(!reason) return message.channel.send(':x: Susturma sebebini yazmalısın!')
if(toMute.id === message.author.id) return message.channel.send(`:x: Kendini susturamazsın bea!`)
if(toMute.roles.has('675376537272582154')) return message.channel.send(`:x: \`「🔪」Mute Premission\` rolüne sahip olan birini susturamazsın!`)
let role = message.guild.roles.find(x => x.name === '「🔇」Muted')
if(!role) return message.channel.send(':x: `「🔇」Muted` adlı rolü bulamıyorum!')
if(toMute.roles.has(role.id)) return message.channel.send(':x: Bu kullanıcı zaten susturulmuş!')
let modlog = message.guild.channels.find(c => c.name === '『🔰』punishment')
if(!modlog) return message.channel.send(':x: Mod-Log kanalını bulamıyorum!')
const embed = new RichEmbed()
.setTitle('Susturma')
//.setThumbnail(`${toMute.avatarURL}`)
.setDescription(`**Susturlan Kişi: \`${toMute.tag}\`** \n **ID Numarası: \`${toMute.id}\`**\n **Susturan Yetkili: \`${message.author.tag}\`**\n **Süre: \`${timeMute}\`** **Sebep: \`${reason}\`** `)
.setColor("#ff0000")
.setFooter('Kurallara Uymayanın Sonu')
.setTimestamp();
bot.mutes[toMute.id] = {
guild: message.guild.id,
time: Date.now() + parseInt(args[1]) * 10000
}
await toMute.addRole(role)
fs.writeFile("./mutes.json", JSON.stringify(bot.mutes, null, 4), err => {
if(err) throw err;
modlog.send(embed)
})
}
module.exports.conf = {
enabled: true,
guildOnly: true,
aliases: ['sustur'],
permLevel: 0
};
module.exports.help = {
name: 'mute',
description: 'Sustur gitsin',
usage: '!sustur #kullanıcı süre sebep'
}
member and guild are most likely undefined because your bot is receiving a DM message. Check if the message is from a guild before continuing with your code:
module.exports.run = async (message, args, bot) => {
if(!message.guild) return
// rest of code
}

Discord.Js: Cannot read table issue

I'm trying to make a little Discord bot with Discord.js, but in my admin command, it throws this error when trying to add a player to a table:
C:\Users\Mark\Desktop\DiscCentral\bot.js:49
if(ServerAdmins[1]) {
^
TypeError: Cannot read property '1' of undefined
at Client.client.on (C:\Users\Mark\Desktop\DiscCentral\bot.js:49:20)
at emitOne (events.js:116:13)
at Client.emit (events.js:211:7)
at MessageCreateHandler.handle (C:\Users\Mark\Desktop\DiscCentral\node_modules\discord.js\src\client\websocket\packets\handlers\MessageCreate.js:9:34)
at WebSocketPacketManager.handle (C:\Users\Mark\Desktop\DiscCentral\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:103:65)
at WebSocketConnection.onPacket (C:\Users\Mark\Desktop\DiscCentral\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:333:35)
at WebSocketConnection.onMessage (C:\Users\Mark\Desktop\DiscCentral\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:296:17)
at WebSocket.onMessage (C:\Users\Mark\Desktop\DiscCentral\node_modules\discord.js\node_modules\ws\lib\event-target.js:120:16)
at emitOne (events.js:116:13)
at WebSocket.emit (events.js:211:7)
Heres my code:
if(command === 'admin') {
if(message.member.roles.find("name", "Owner")){
var ServerExists = false;
for(var ServerId; ServerId<Admins.length; ServerId++) {
if(Admins[ServerId] === message.member.server.id) {
ServerExists = true;
}
}
if(ServerExists === false) {
var NewServer = Admins[Admins.length + 1]
NewServer = {};
}
for(var ServerId; ServerId<Admins.length; ServerId++) {
if(Admins[ServerId] === message.member.server.id) {
var ServerNumber = ServerId
}
}
var ServerAdmins = Admins[ServerNumber]
if(ServerAdmins[1]) {
ServerAdmins[1] = message.member.server.id;
} else {
ServerAdmins[ServerAdmins.length + 1] = message.member.server.id;
message.reply(`${ServerAdmins[ServerAdmins.length]} was added.`)
}
}
I'm assuming the problem is that I'm using a table inside of a table, but I don't know how to assign ranks to each server any other way.
Any suggestions on what I should do?
It doesn't look like you declare the Admins variable in your code, at least the code that you presented. Show us how you define it? As right now, that would be why it's giving you errors.

Resources