TypeError when trying to create a discord bot - discord

I'm trying to build a discord bot that sends data to an airtable. This one sends user info when they join my server. I have the following code, but every time I try to run it, I get the following error:
TypeError: Cannot read properties of undefined (reading 'GUILDS')at Object.
This is the code:
const { Intents } = require('discord.js');
const Discord = require('discord.js');
const Airtable = require('airtable');
const client = new Discord.Client({
token: 'TOKEN_ID',
intents: [Intents.GUILDS, Intents.GUILD_MEMBERS]
});
Airtable.configure({ apiKey: 'API_KEY' });
const base = Airtable.base('BASE_ID');
client.on('guildMemberAdd', member => {
base('New Members').create({
'Username': member.user.username,
'Time Joined': new Date().toISOString()
}, function(err, record) {
if (err) {
console.error(err);
return;
}
console.log(`Added new record with ID ${record.getId()}`);
});
});
client.login();

Using Discord.js v14, the way to declare intents is as follows:
import { Client, GatewayIntentBits } from "discord.js";
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMembers
]
});
and your token should be put in client.login
client.login("your-bot-token");

Related

Why isn't my slash command working? discord.js

I was trying to create a bot that with a slash command can create a azure ad account and message it to the user. However when I run the code it doesn't create a slash command. How would I fix this.
Code:
// import dependencies
const Discord = require('discord.js');
const axios = require('axios');
// create a new Discord client
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
],
});
// listen for the ready event
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
// listen for the interactionCreate event
client.on('interactionCreate', async interaction => {
if (!interaction.isCommand()) return;
if (interaction.commandName === 'create-account') {
// retrieve user input from slash command
const displayName = interaction.options.getString('displayname');
const password = interaction.options.getString('password');
// retrieve sensitive information from Replit secrets
const tenantId = process.env.AZURE_TENANT_ID;
const clientId = process.env.AZURE_CLIENT_ID;
const clientSecret = process.env.AZURE_CLIENT_SECRET;
try {
// create Azure AD account using Microsoft Graph API
const response = await axios.post(`https://graph.microsoft.com/v1.0/${tenantId}/users`, {
displayName: displayName,
passwordProfile: {
password: password
},
accountEnabled: true
}, {
headers: {
'Authorization': `Bearer ${await getAccessToken(clientId, clientSecret, tenantId)}`
}
});
// send success message to Discord
await interaction.reply(`Account with display name "${displayName}" created on Azure AD.`);
// log created account to Discord webhook
const webhook = new Discord.WebhookClient({
id: process.env.DISCORD_WEBHOOK_ID,
token: process.env.DISCORD_WEBHOOK_TOKEN
});
await webhook.send(`Account created on Azure AD:\nDisplay name: ${displayName}\nObject ID: ${response.data.id}`);
} catch (error) {
console.error(error);
// send error message to Discord
await interaction.reply('An error occurred while creating the account. Please try again later.');
}
}
});
// start the Discord client
client.login(process.env.DISCORD_TOKEN);
// helper function to get access token for Microsoft Graph API
async function getAccessToken(clientId, clientSecret, tenantId) {
const response = await axios.post(`https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`, {
grant_type: 'client_credentials',
client_id: clientId,
client_secret: clientSecret,
scope: 'https://graph.microsoft.com/.default'
});
return response.data.access_token;
}
I want it to create a slash command which I can run that'll let me create an azure ad account but the slash command does not show up when I try using it.

How to send a direct message to a user using Discord.js? [duplicate]

I am trying to code a Discord bot for my personal server. I am using Discord.js and I have been following the discord.js guide.
I have now an event handler but when I add a file for another event, the code of this module is not executing. The event I am trying to trigger is the join of a new member in my server.
I have 2 important files : index.js which runs the corpse of my code and guildMemberAdd.js which is my event module for when a new member joins the server.
index.js:
// Require the necessary discord.js classes
const fs = require('node:fs');
const path = require('node:path');
const { Client, Collection, GatewayIntentBits } = require('discord.js');
const { token } = require('./config.json');
// Create a new client instance
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
const eventsPath = path.join(__dirname, 'events');
const eventFiles = fs.readdirSync(eventsPath).filter(file => file.endsWith('.js'));
for (const file of eventFiles) {
const filePath = path.join(eventsPath, file);
const event = require(filePath);
if (event.once) {
client.once(event.name, (...args) => event.execute(...args));
} else {
client.on(event.name, (...args) => event.execute(...args));
}
}
// Log in to Discord with your client's token
client.login(token);
guildMemberAdd.js:
const { Events } = require('discord.js');
module.exports = {
name: Events.GuildMemberAdd,
async execute(member) {
console.log(member);
},
};
If you only have the GatewayIntentBits.Guilds intent enabled, the GuildMemberAdd event won't fire. You'll need to add the GatewayIntentBits.GuildMembers (and probably GatewayIntentBits.GuildPresences) too:
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMembers,
GatewayIntentBits.GuildPresences,
],
});
In discord.js v13, it should be:
const { Client, Intents } = require('discord.js');
const client = new Client({
intents: [
Intents.FLAGS.GUILDS,
Intents.FLAGS.GUILD_MEMBERS,
Intents.FLAGS.GUILD_PRESENCES,
],
});

Permission Error Nickname Change Command discord js

There is no permission error when using code a, but there is a permission error whenever using code b. Is there a solution?
module.exports = {
name: "NICK",
async execute(message, args, client) {
//A: const member = message.mentions.members.first();
//B: const member = await message.guild.members.cache.get(message.author.id)
console.log(message.author.id)
if (!member) return message.reply("target error");
const arguments = args.shift(1)
if (!arguments) return message.reply("name error");
try {
const arguments = args.shift(1)
member.setNickname(arguments);
}catch (error) {
console.error(error);
}
},
};
I currently have these intents
const { Client, GatewayIntentBits, Collection, MembershipScreeningFieldType, ClientUser, User, time, GuildChannel, GuildManager, MessageManager, GuildMemberManager, GuildBanManager, GuildBan, GuildStickerManager, PermissionsBitField, PermissionOverwriteManager, MessageFlagsBitField, GuildMemberRoleManager, gu } = require('discord.js');
const { record } = require('../config.json');
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.GuildMessageReactions, GatewayIntentBits.GuildVoiceStates, GatewayIntentBits.DirectMessages, GatewayIntentBits.MessageContent, GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers, GatewayIntentBits.GuildBans] });
Checking code B I could say a few things:
You don't need to await a cache.get() call;
If you are the owner of the guild, then the bot needs to have a role above your highest role to change your nickname.

My discord bot is not responding even though there is no error

const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });
const config = require('./config.json');
client.once('ready', () => {
console.log("go");
})
client.on('message', (message) => {
if(message.content == "ping"){
message.channel.send("pong");
}
})
client.login(config.token);
There is no error in the code, but when I type ping, the bot does not respond, does anyone know why?
It's because you don't have the GUILD_MESSAGES intent enabled !
Replace that line :
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });
with
const client = new Client({ intents: [Intents.FLAGS.GUILDS,Intents.FLAGS.GUILD_MESSAGES] });
As you can see from the official documentation :
GUILD_MESSAGES intent let us have events and one of them is MESSAGE_CREATE (emits when a message is created (sent))
Since after the new update of discord.js, providing intents is an integral part of Disocrd bots.
const {Client, Intents, Collection} = require('discord.js')
const client = new Client({intents:[Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES]})

How to fix 'CLIENT_MISSING_INTENTS' error in discord.js?

const Discord = require('discord.js');
const client = new Discord.Client();
client.once('ready', () => {
console.log('Meep is online!');
});
client.login('my token was here');
When I run code, I get 'CLIENT_MISSING_INTENTS' error, how to fix it?
I was not getting this error in older discord.js versions, I started getting this error when I updated to the new discord.js version.
You can use any intents you want
with this intents you just can see guilds and messages in guilds
const Discord = require('discord.js');
const client = new Discord.Client({intents : [
Discord.Intents.FLAGS.GUILDS,
Discord.Intents.FLAGS.GUILD_MESSAGES
]})
client.once('ready', () => {
console.log('Meep is online!');
});
client.login('my token was here');
const client = new Client({
intents: [
Intents.FLAGS.GUILDS,
Intents.FLAGS.GUILD_MEMBERS,
Intents.FLAGS.GUILD_BANS,
Intents.FLAGS.GUILD_EMOJIS_AND_STICKERS,
Intents.FLAGS.GUILD_INTEGRATIONS,
Intents.FLAGS.GUILD_WEBHOOKS,
Intents.FLAGS.GUILD_INVITES,
Intents.FLAGS.GUILD_VOICE_STATES,
Intents.FLAGS.GUILD_PRESENCES,
Intents.FLAGS.GUILD_MESSAGES,
Intents.FLAGS.GUILD_MESSAGE_REACTIONS,
Intents.FLAGS.GUILD_MESSAGE_TYPING,
Intents.FLAGS.DIRECT_MESSAGES,
Intents.FLAGS.DIRECT_MESSAGE_REACTIONS,
Intents.FLAGS.DIRECT_MESSAGE_TYPING
]
});

Resources