entity
entity

Reputation: 29

discord.js deleting only user messages and bot

I want to make my bot to delete only user's messages in a certain channel and not the bot's. I tried doing it using the code below but it kept on deleting the both the bot's messages and mine.

const Discord = require("discord.js");
const client = new Discord.Client();
const { MessageEmbed } = require("discord.js");
const avalibleFormats = ['png', 'gif', 'jpeg', 'jpg']
 
client.on("ready", () => {
  console.log("I am ready!");
});
 
client.on("message", message => {
    if (message.channel.id == '829616433985486848') {
        message.delete();
      }
    if (message.channel.id !== '829616433985486848') {
        return;
    }

    let image = getImage(message)
    if (!image) {
        return;
    }

    let embed = new MessageEmbed();
    embed.setImage(image.url)
    embed.setColor(`#2f3136`)
    message.channel.send(embed)

});
const getImage = (message) => message.attachments.find(attachment => checkFormat(attachment.url))
const checkFormat = (url) => avalibleFormats.some(format => url.endsWith(format))
 
client.login(token);

Upvotes: 1

Views: 449

Answers (1)

Zsolt Meszaros
Zsolt Meszaros

Reputation: 23161

Well, you only say that if the channel id is 829616433985486848, delete the message. you should also check if the author is a bot using the message.author.bot property:

const avalibleFormats = ['png', 'gif', 'jpeg', 'jpg'];

const checkFormat = (url) => avalibleFormats.some((format) => url.endsWith(format));
const getImage = (message) => message.attachments.find((attachment) => checkFormat(attachment.url));

client.on('message', (message) => {
  const certainChannelId = '829616433985486848';

  // if the channel is not 829616433985486848, return to exit
  if (message.channel.id !== certainChannelId)
    return;

  // the rest of the code only runs if the channel is 829616433985486848

  const image = getImage(message);

  // if author is not a bot, delete the message
  if (!message.author.bot)
    message.delete();

  if (!image)
    return;

  const embed = new MessageEmbed()
    .setImage(image.url)
    .setColor('#2f3136');

  message.channel.send(embed);
});

Actually, if the message is posted by a bot, you don't even need to run anything in there so you can check that right at the beginning and exit early:

client.on('message', (message) => {
  if (message.author.bot || message.channel.id !== '829616433985486848')
    return;

  const image = getImage(message);

  if (image) {
    const embed = new MessageEmbed()
      .setImage(image.url)
      .setColor('#2f3136');

    message.channel.send(embed);
  }
  message.delete();
});

If you want it to work in multiple channels, you can create an array of channel IDs and use Array#includes() to check if the current channel ID is in that array:

client.on('message', (message) => {
  const channelIDs = ['829616433985486848', '829616433985480120', '829616433985485571'];
  if (message.author.bot || !channelIDs.includes(message.channel.id))
    return;

  const image = getImage(message);

  if (image) {
    const embed = new MessageEmbed()
      .setImage(image.url)
      .setColor('#2f3136');

    message.channel.send(embed);
  }
  message.delete();
});

Upvotes: 3

Related Questions