Discord.js Addin reaction to bot message - discord.js

I want reactions to be added to the bot in the message but not to me. Someone can help me?
client.on('message', msg => {
if (msg.content === '!event') {
if (msg.member.roles.find(r => r.name === "Event Manager")) {
msg.channel.send('Внимание вопрос!\nХотите ли вы ивент?')
.then(function (message) {
msg.react('⭕');
msg.react('❌');
}).catch(function() {
});
}
else {
msg.channel.send("У вас нету прав на выполнение данного действия.")
}
}
});

client.on('message', async msg => {
if(msg.content === '!event') {
if(msg.member.roles.find(r => r.name === "Event Manager")) {
const message = await msg.channel.send('Внимание вопрос!\nХотите ли вы ивент?');
await message.react('⭕');
await message.react('❌');
}else{
msg.channel.send("У вас нету прав на выполнение данного действия.");
}
}
});
You should use async function which makes your code a lot cleaner.

client.on('message', msg => {
if (msg.content === '!event') {
if (msg.member.roles.find(r => r.name === "Event Manager")) {
msg.channel.send('Внимание вопрос!\nХотите ли вы ивент?')
.then(function (message) {
message.react('⭕');
message.react('❌');
}).catch(function() {
});
}
else {
msg.channel.send("У вас нету прав на выполнение данного действия.")
}
}
});
Just change from msg to message because you passing the message with then

Related

Cannot read property 'members' of undefined (discord.js)

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;
}
});

Discord.js Missing permissions error when assign role

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);
});
});
}

This spams dms how do I make it stop after one message Discord.js

const Discord = require('discord.js');
const client = new Discord.Client();
client.once('ready', () => {
console.log('AC0');
client.user.setActivity('Tornaments', { type: 'WATCHING'}).catch(console.error);
});
const tornament = new Discord.MessageEmbed()
.setColor('#000ff')
.setTitle('AC0 Tornaments')
.setDescription(`1. TORNAMENT1
2. TORNAMENT2
3. TORNAMENT3
4. TORNAMENT4`)
client.on('message', message => {
if (message.author.id === '694644198531661844') {
if (message.content === '>endac0') {
process.exit();
}}
if (message.content === '>tornaments') {
message.channel.send(tornament);
}
if (message.content.startsWith('>tornamentsadd')){
client.users.fetch('694644198531661844').then(user => {
user.send(`${message.content.toString()}`)
});}
});
client.login('')
How would I make it not spam me I don't think there is a loop or anything in it also I don't know what else to add so yeah I will just keep typing
You just have to add a return function at the end.
if (message.content.startsWith('>tornamentsadd')){
client.users.fetch('694644198531661844').then(user => {
return user.send(`${message.content.toString()}`)

Voice Channel Detection Erorr

When I'm Trying To Make My Discord Music Bot I Get An Error In Discord Not The Command Line Though, It Cannot Tell If I'm In A Voice Channel Or Not
Here's My Code
if (message.author.bot) return;
if (!message.content.startsWith(prefix)) return;
const serverQueue = queue.get(message.guild.id);
if (message.content.startsWith(`${prefix}play`)) {
execute(message, serverQueue);
return;
} else if (message.content.startsWith(`${prefix}skip`)) {
skip(message, serverQueue);
return;
} else if (message.content.startsWith(`${prefix}stop`)) {
stop(message, serverQueue);
return;
} else {
message.channel.send('You need to enter a valid command!')
}
});
process.on('unhandledRejection', error => console.error('Uncaught Promise Rejection', error));
async function execute(message, serverQueue) {
const args = message.content.split(' ');
const voiceChannel = message.member.voiceChannel;
if (!voiceChannel) return message.channel.send('You need to be in a voice channel to play music!');
const permissions = voiceChannel.permissionsFor(message.bot.user);
if (!permissions.has('CONNECT') || !permissions.has('SPEAK')) {
return message.channel.send('I need the permissions to join and speak in your voice channel!');
}
const songInfo = await ytdl.getInfo(args[1]);
const song = {
title: songInfo.title,
url: songInfo.video_url,
};
if (!serverQueue) {
const queueContruct = {
textChannel: message.channel,
voiceChannel: voiceChannel,
connection: null,
songs: [],
volume: 5,
playing: true,
};
queue.set(message.guild.id, queueContruct);
queueContruct.songs.push(song);
try {
var connection = await voiceChannel.join();
queueContruct.connection = connection;
play(message.guild, queueContruct.songs[0]);
} catch (err) {
console.log(err);
queue.delete(message.guild.id);
return message.channel.send(err);
}
} else {
serverQueue.songs.push(song);
console.log(serverQueue.songs);
return message.channel.send(`${song.title} has been added to the queue!`);
}
}
function skip(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('You have to be in a voice channel to stop the music!');
if (!serverQueue) return message.channel.send('There is no song that I could skip!');
serverQueue.connection.dispatcher.end();
}
function stop(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('You have to be in a voice channel to stop the music!');
serverQueue.songs = [];
serverQueue.connection.dispatcher.end();
}
function play(guild, song) {
const serverQueue = queue.get(guild.id);
if (!song) {
serverQueue.voiceChannel.leave();
queue.delete(guild.id);
return;
}
const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
.on('end', () => {
console.log('Music ended!');
serverQueue.songs.shift();
play(guild, serverQueue.songs[0]);
})
.on('error', error => {
console.error(error);
});
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
}
I Found It On This Website https://medium.com/free-code-camp/how-to-create-a-music-bot-using-discord-js-4436f5f3f0f8
And When I Start The Code It Says I'm Not In One,
Any Type Of Feedback Would Be Greatly Appreciated!
Try this
if (!message.member.voice.channel)
return message.reply('you are not in a voice channel'),
The problem comes from the fact that you're using the GuildMember.voiceChannel property, which exists only in discord.js#v11. The v12 equivalent is GuildMember.voice.channel, you can use it like this:
// You can use this as before, since it's the same VoiceChannel element
const voiceChannel = message.member.voice.channel

How do I reset message.content in discord.js?

Basically, what I'm trying to do is detect if a message is being sent, reset the content of that message and await a new reply and then check the content of that message for something in specific. The code looks something like this:
if (message.author.id === "318414570161045505") {
message.channel.send(`${message.author}` + " silence");
if (message.content.toUpperCase().includes("no")) {
console.log(message.content)
}
}
I hope I made myself clear on my problem?
You can use message.channel.awaitmessages
if (message.author.id === "318414570161045505") {
message.channel.send(`${message.author}` + " silence");
if (message.content.toUpperCase().includes("no")) {
message.delete()
const filter = m => m.author.id === message.author.id && m.content === '??????'
message.channel
.awaitMessages(filter, {
max: 1,
time: 60000,
errors: ['time'],
})
.then(collected => {
let messageCollected = collected.first()
})
.catch(collected => {
}
}
});

Resources