Error using discord-buttons: "Class extends value undefined is not a constructor or null" - javascript

I tried to make a button in Discord.js. However, when I wrote the code, I found that there was an error during startup.
I don't know why this error is happening. I checked many related questions online, but none of my problems were solved, and I even became even more confused.
This is my code:
const config = require("./config.json");
const Discord = require('discord.js');
const bot = new Discord.Client();
require('discord-buttons')(client);
const fs = require("fs");
const client = new Discord.Client({disableEveryone: false});
const moment = require("moment");
const { MessageButton, MessageActionRow } = require('discord-buttons')
client.commands = new Discord.Collection();
fs.readdir("./commands/", (err, files) => {
if(err) console.log(err);
let jsfile = files.filter(f => f.split(".").pop() === "js");
if(jsfile.length <= 0){
console.log("XX");
return;
}
jsfile.forEach((f, i) =>{
let props = require(`./commands/${f}`);
client.commands.set(props.help.name, props);
});
});
client.on('message', async message => {
if(message.content === "buttonstest"){
const button = new MessageButton()
.setLabel("test")
.setStyle("green")
.setID("btn1")
var embed = new Discord.RichEmbed()
.setColor("#FFFFFF")
.setTitle("test")
message.channel.send(embed, button);
}
})
client.on("message", async message => {
if(message.author.bot) return;
if(message.channel.type === "dm") return;
let prefix = config.prefix;
let messageArray = message.content.split(" ");
let cmd = messageArray[0];
let args = messageArray.slice(1);
let commandfile = client.commands.get(cmd.slice(prefix.length));
if(commandfile) commandfile.run(client,message,args);
});
client.login(config.token)
This is the error message:
I have no name!#f7808405-1373-45ee-bac7-0059f94bd574:~$ /home/container/node_modules/discord.js-buttons/src/Classes/APIMessage.js:5
class sendAPICallback extends APIMessage {
^
TypeError: Class extends value undefined is not a constructor or null
at Object.<anonymous> (/home/container/node_modules/discord.js-buttons/src/Classes/APIMessage.js:5:31)
at Module._compile (internal/modules/cjs/loader.js:1068:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
at Module.load (internal/modules/cjs/loader.js:933:32)
at Function.Module._load (internal/modules/cjs/loader.js:774:14)
at Module.require (internal/modules/cjs/loader.js:957:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/home/container/node_modules/discord.js-buttons/src/Classes/Message.js:3:20)
at Module._compile (internal/modules/cjs/loader.js:1068:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)

In Discord.js v13, the API message class has been renamed to MessagePayload. APIMessage would therefore be undefined.
This error is occurring in the discord-buttons module. Discord.js v13 supports buttons so you do not need this module. See the Discord.js guide on buttons for more details.
To send a button, you could use this code:
client.on('message', async message => {
if(message.content === "buttonstest"){
const button = new Discord.MessageButton()
.setLabel("test")
.setStyle("SUCCESS")
.setCustomId("btn1");
// Note that RichEmbed was renamed to MessageEmbed in v12
const embed = new Discord.MessageEmbed()
.setColor("#FFFFFF")
.setTitle("test");
message.channel.send({
embeds: [embed],
components: [{components: [button]}]
// alternatively
// components: [new Discord.MessageActionRow([button])]
});
}
});
You should also take a look at the Discord.js v13 upgrade guide.

Related

I cant run js script

hello all, is my script of discord bot
It's is my script JavaScrypt
const botconfig = require("./botconfig.json");
const Discord = require("discord.js");
const fs = require("fs");
const bot = new Discord.Client({disableEveryone: true});
bot.commands = new Discord.Collection();
bot.aliases = new Discord.Collection();
fs.readdir("./commands/", (err, files) => {
if(err) console.log(err);
let jsfile = files.filter(f => f.split(".").pop() === "js");
if(jsfile.length <= 0){
console.log("Couldn't find commands.");
return;
}
jsfile.forEach((f, i) =>{
let props = require(`./commands/${f}`);
console.log(`${f} loaded!`);
bot.commands.set(props.help.name, props);
props.help.aliases.forEach(alias => {
bot.aliases.set(alias, props.help.name);
});
});
})
bot.on("ready", async () => {
console.log(`${bot.user.username} is online on ${bot.guilds.size} servers!`);
bot.user.setActivity(`In Development`);
bot.user.setStatus('online');
bot.on("message", async message => {
if(message.author.bot) return;
if(message.channel.type === "dm") return;
let prefix = botconfig.prefix
let messageArray = message.content.split(" ");
let args = message.content.slice(prefix.length).trim().split(/ +/g);
let cmd = args.shift().toLowerCase();
let commandfile;
if (bot.commands.has(cmd)) {
commandfile = bot.commands.get(cmd);
} else if (bot.aliases.has(cmd)) {
commandfile = bot.commands.get(bot.aliases.get(cmd));
}
if (!message.content.startsWith(prefix)) return;
try {
commandfile.run(bot, message, args);
} catch (e) {
}}
)})
bot.login("MTAwNzkyMDIyMDIyNjIwNzc2NQ.GldCmn.1jWZEr1ALjADcZvbAnDHkrhpy6OBlzpjcFMw8w");
my error:
throw new TypeError(ErrorCodes.ClientMissingIntents);
^
TypeError [ClientMissingIntents]: Valid intents must be provided for the Client.
at Client._validateOptions (C:\Users\4bino\node_modules\discord.js\src\client\Client.js:480:13)
at new Client (C:\Users\4bino\node_modules\discord.js\src\client\Client.js:78:10)
at Object.<anonymous> (C:\Users\4bino\OneDrive\Рабочий стол\economybot-master\index.js:4:13)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
at node:internal/main/run_main_module:17:47 {
code: 'ClientMissingIntents'
}
I do not understand what to do, please help with this problem
I'm trying to run this script for the discord bot
I tried to look for a solution to this problem in other resources, but I didn't find anything
I have already installed the discord package.js but it looks like he can't find some module
My Node version.js is v16.16.0

Cannot read property 'guild' of undefined discord.js

My code:
module.exports = async (client, message) => {
const guild = client.guilds.cache.get('815676619955503124');
setInterval(() => {
const channelgp = guild.channels.cache.get('815856763114487808');
let myRole = message.guild.roles.cache.get('815855967773786113');
console.log(`${goldpiston.size} person with this role`);
channelgp.setName(`gold piston owner: ${goldpiston.toLocal}`);
console.log('Refreshing...');
}, 5000); }
And the error:
C:\Users\user\Desktop\DiscordBot\counters\roles-counter.js:7
let goldpiston = message.guild.roles.cache.get(roleID).members;
^
TypeError: Cannot read property 'guild' of undefined
at Timeout._onTimeout (C:\Users\user\Desktop\DiscordBot\counters\roles-counter.js:7:34)
at listOnTimeout (internal/timers.js:554:17)
at processTimers (internal/timers.js:497:7)
At the begining the code was for checking who's online. I changed it to see who has the role.
No I was just calling only client.
This is main.js it is in the root folder. Previous code is in "counter" folder.
const Discord = require('discord.js');
const client = new Discord.Client();
const memberCounter = require('./counters/member-counter');
const rolesCounter = require('./counters/roles-counter');
const prefix = '$';
client.once('ready', () => {
console.log('2c5t is online!');
memberCounter(client);
rolesCounter(client);
})
client.on('message', message => {
if(!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).split(/ +/);
const command = args.shift().toLowerCase();
if(command === 'author')
{
message.channel.send('Author is onhq');
console.log('Command used!');
}
})
client.login('ODE1NjYzMDkzMTU2ODA2NjY2.YDvrcw.5XhiBf4SGFyU1hQkye152f2hmdc');

Error: Cannot find module './commands/${f}1'

I've been trying to get my bot to come online for hours but I keep getting the same error.
Here's the error:
Error: Cannot find module './commands/${f}1'
Require stack:
- C:\Users\Apskaita\Desktop\Viper bot\main.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15)
at Function.Module._load (internal/modules/cjs/loader.js:841:27)
at Module.require (internal/modules/cjs/loader.js:1025:19)
at require (internal/modules/cjs/helpers.js:72:18)
at C:\Users\Apskaita\Desktop\Viper bot\main.js:20:22
at Array.forEach (<anonymous>)
at C:\Users\Apskaita\Desktop\Viper bot\main.js:19:12
at FSReqCallback.oncomplete (fs.js:156:23) {
code: 'MODULE_NOT_FOUND',
requireStack: [ 'C:\\Users\\Apskaita\\Desktop\\Viper bot\\main.js' ]
}
Here's my code for my main.js:
const Discord = require('discord.js');
const client = new Discord.Client();
const botconfig = require('./botconfig.json');
const fs = require("fs");
client.commands = new Discord.Collection();
client.alieses = new Discord.Collection();
// READ COMMANDS FOLDER
fs.readdir("./commands/", (err, files) => {
if(err) console.log(err);
let jsfile = files.filter(f => f.split(".").pop() === "js")
if(jsfile.length <= 0) {
console.log("couldin't file any commands!");
return;
}
jsfile.forEach((f) => {
let preops = require("./commands/${f}1")
console.log('${f} loaded!');
bot.commands.set(props.help.name, props);
props.help.aliases.forEach(alias => {
bot.aliases.set(alias, props.help.name);
})
})
})
// BOT ONLINE MESSAGE AND ACTIVITY MESSAGE
client.on('ready', async () => {
console.log('${bot.user.username} is online on ${bot.guilds.size} servers!')
bot.user.setActivity('with ${bot.guilds.size} servers!');
})
client.on('message', async message => {
// CHECK CHANNEL TYPE
if(message.channel.type === "dm") return;
if(message.author.bot) return;
// SET PREFIX
let prefix = botconfig.prefix;
// CHECK PREFIX, DEFINE ARGS & COMMAND
if(message.content.startsWith(prefix)) return;
let args = message.content.slice(prefix.length).trim().split(/ +/g);
let cmd;
cmd = args.shift().toLowerCase();
let command;
let commandfile = bot.commands.get(cmd.slice(prefix.length));
if(commandfile) commandfile.run(bot, message, args);
//RUN COMMANDS
if(bot.commands.has(cmd)) {
command = bot.commands.get(cmd);
} else if (bot.aliases.has(cmd)) {
command = bot.commands.get(bot.aliases.get(cmd));
}
try {
command.run(bot, message, args);
} catch (e) {
return;
}
client.login(botconfig.token)})
My ping.js:
module.exports.run = async (bot, message, args) => {
const m = await message.channel.send("ping!");
m.edit("Pong! ${m.createTimestamp - message.createdTimestamp}ms");
}
module.exports.help = {
name: "",
aliases: ["p"]
}
These errors are very confusing and I don't really know how to fix them so please can someone fix them?
I am very new to JavaScript so I don't have a clue what I'm typing... I copied the code from a tutorial so I don't what's going on.
You're not using the correct quotes, you're using " instead of `
Replace
jsfile.forEach((f) => {
let preops = require("./commands/${f}1")
console.log('${f} loaded!');
bot.commands.set(props.help.name, props);
props.help.aliases.forEach(alias => {
bot.aliases.set(alias, props.help.name);
})
})
By
jsfile.forEach((f) => {
let preops = require(`./commands/${f}1`)
console.log(`${f} loaded!`);
bot.commands.set(props.help.name, props);
props.help.aliases.forEach(alias => {
bot.aliases.set(alias, props.help.name);
})
})
It means that the path is incorrect. First of all, be sure to use good quotes as someone said before. Then, are you sure that there is a 1 at the end of your files' names ? It is what you ask ${f}1.

guild not defined | discord.js

I have this problem that says guild not defined. I had the same problem with members but I fixed it by adding a constant. I'm pretty new to javascript and node.js. Can anybody help? I even tried looking into index.js and copying the constants above and it didn't work.
const member = guild.member.first(message.author);
^
ReferenceError: guild is not defined
at Object.<anonymous> (C:\bot1\commands\prune.js:7:16)
[90m at Module._compile (internal/modules/cjs/loader.js:1138:30)[39m
[90m at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)[39m
[90m at Module.load (internal/modules/cjs/loader.js:986:32)[39m
[90m at Function.Module._load (internal/modules/cjs/loader.js:879:14)[39m
[90m at Module.require (internal/modules/cjs/loader.js:1026:19)[39m
[90m at require (internal/modules/cjs/helpers.js:72:18)[39m
at Object.<anonymous> (C:\bot1\index.js:11:18)
[90m at Module._compile (internal/modules/cjs/loader.js:1138:30)[39m
[90m at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)[39m
const Discord = require('discord.js');
const Client = new Discord.Client();
const client = new Discord.Client();
client.commands = new Discord.Collection();
const member = guild.member.first(message.author);
const { Permissions } = require('discord.js');
const permissions = new Permissions([
'MANAGE_MESSAGES',
]);
module.exports = {
name: 'prune',
description: 'prune up to 99 messages.',
execute(message, args) {
const amount = parseInt(args[0]) + 1
if (member.hasPermission('MANAGE_MESSAGES'))
{
if (isNaN(amount)) {
return message.channel.send('That\'s not a valid number');
} else if (amount <= 1 || amount > 100) {
return message.channel.send('You need to input a number between 1 and 99.');
}
message.channel.bulkDelete(amount, true).catch(err => {
console.error(err);
message.channel.send('There was an error trying to prune messages in this channel.');
})
if (!member.hasPermission('MANAGE_MESSAGES'))
{
message.channel.send("You dont have the required permissions to execute this command")
}
};
}
};
You need to define member within the execute() function since you need to get the GuildMember object out of message
const Discord = require('discord.js');
const Client = new Discord.Client();
const client = new Discord.Client();
client.commands = new Discord.Collection();
const { Permissions } = require('discord.js');
const permissions = new Permissions([
'MANAGE_MESSAGES',
]);
module.exports = {
name: 'prune',
description: 'prune up to 99 messages.',
execute(message, args) {
const member = message.member;
const amount = parseInt(args[0]) + 1
if (member.hasPermission('MANAGE_MESSAGES'))
{
if (isNaN(amount)) {
return message.channel.send('That\'s not a valid number');
} else if (amount <= 1 || amount > 100) {
return message.channel.send('You need to input a number between 1 and 99.');
}
message.channel.bulkDelete(amount, true).catch(err => {
console.error(err);
message.channel.send('There was an error trying to prune messages in this channel.');
})
if (!member.hasPermission('MANAGE_MESSAGES'))
{
message.channel.send("You dont have the required permissions to execute this command")
}
};
}
};

I'm coding a discord bot using discord.js and I'm working on a suggestion command

I'm currently trying to get the bot to send a filler message to the channel I eventually want the suggestions to go to and have tried multiple methods to do so, but keep getting errors. I'm sure the solution is very simple, and any help is much appreciated.
suggest.js
module.exports = {
name: 'suggest',
aliases: ['suggestion'],
description: 'Sends a suggestion to the <#700591796119535657> channel.',
usage: '<your suggestion>',
cooldown: 1,
execute(message, args) {
const Discord = require('discord.js');
const client = new Discord.Client();
const channel = client.channels.cache.get('701087240729657457');
channel.send('test');
},
};
error message in console upon running .suggest
TypeError: Cannot read property 'send' of undefined
at Object.execute (/home/shares/public/RetroCraft/commands/suggest.js:11:11)
at Client.<anonymous> (/home/shares/public/RetroCraft/index.js:69:11)
at Client.emit (events.js:310:20)
at MessageCreateAction.handle (/home/shares/public/RetroCraft/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (/home/shares/public/RetroCraft/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (/home/shares/public/RetroCraft/node_modules/discord.js/src/client/websocket/WebSocketManager.js:386:31)
at WebSocketShard.onPacket (/home/shares/public/RetroCraft/node_modules/discord.js/src/client/websocket/WebSocketShard.js:436:22)
at WebSocketShard.onMessage (/home/shares/public/RetroCraft/node_modules/discord.js/src/client/websocket/WebSocketShard.js:293:10)
at WebSocket.onMessage (/home/shares/public/RetroCraft/node_modules/ws/lib/event-target.js:120:16)
at WebSocket.emit (events.js:310:20)
index.js
const fs = require('fs');
const Discord = require('discord.js');
const { prefix, token } = require('./config.json');
const cooldowns = new Discord.Collection();
const client = new Discord.Client();
client.commands = new Discord.Collection();
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
for (const file of commandFiles) {
const command = require(`./commands/${file}`);
// set a new item in the Collection
// with the key as the command name and the value as the exported module
client.commands.set(command.name, command);
}
client.once('ready', () => {
console.log('Ready!');
client.user.setActivity('RetroCraft', { type: 'WATCHING' });
});
client.on('message', message => {
if (!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).split(/ +/);
const commandName = args.shift().toLowerCase();
const command = client.commands.get(commandName)
|| client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
if (!command) return;
if (command.guildOnly && message.channel.type !== 'text') {
return message.reply('I can\'t execute that command inside DMs!');
}
if (command.args && !args.length) {
let reply = `You didn't provide any arguments, ${message.author}!`;
if (command.usage) {
reply += `\nThe proper usage would be: \`${prefix}${command.name} ${command.usage}\``;
}
return message.channel.send(reply);
}
if (!cooldowns.has(command.name)) {
cooldowns.set(command.name, new Discord.Collection());
}
const now = Date.now();
const timestamps = cooldowns.get(command.name);
const cooldownAmount = (command.cooldown || 3) * 1000;
if (timestamps.has(message.author.id)) {
const expirationTime = timestamps.get(message.author.id) + cooldownAmount;
if (now < expirationTime) {
const timeLeft = (expirationTime - now) / 1000;
return message.reply(`please wait ${timeLeft.toFixed(1)} more second(s) before reusing the \`${command.name}\` command.`);
}
}
timestamps.set(message.author.id, now);
setTimeout(() => timestamps.delete(message.author.id), cooldownAmount);
try {
command.execute(message, args);
}
catch (error) {
console.error(error);
message.reply('there was an error trying to execute that command!');
}
});
client.login(token);
This is a really easy fix. Just change the channel.send to message.channel.send and that should work. Tell me if you get any errors and I'll try to help :)

Categories