'Random Meme Command (discord.js v12)

I'm trying to make a 'random meme' command for my Discord Bot. I'm new to working with APIs, but I've tried my best.

The problem is, when I type the command, nothing happens. There are no errors, but the bot doesn't send anything in discord.

This is my code:

if (command === "meme")
async (client, message, args) => {
const subReddits = ["dankmeme", "meme", "me_irl"];
const random = subReddits[Math.floor(Math.random() * subReddits.length)];

const img = await randomPuppy(random);
const embed = new Discord.MessageEmbed()
.setColor(16776960)
.setFooter("test")
.setImage(img)
.setTitle(`Random Meme requested by <@${message.author.tag}>`)
.setURL(`https://reddit.com/r/${random}`)
message.channel.send(embed);
}


Solution 1:[1]

Here Is One That Will Show Info About The Meme

if(command === "meme") {
const subReddits = ["dankmeme", "meme", "me_irl"];
const random = subReddits[Math.floor(Math.random() * subReddits.length)];
try {
const { body } = await snekfetch
                .get('https://www.reddit.com/r/${random}.json?sort=top&t=week')
                .query({ limit: 800 });
const allowed = message.channel.nsfw ? body.data.children : body.data.children.filter(post => !post.data.over_18);
if (!allowed.length) return message.channel.send('It seems we are out of memes');
const randomnumber = Math.floor(Math.random() * allowed.length)
const embed = new Discord.RichEmbed()
            .setColor(0x00A2E8)
            .setTitle(allowed[randomnumber].data.title)
            .setDescription("Posted by: " + allowed[randomnumber].data.author)
            .setImage(allowed[randomnumber].data.url)
            .addField("Other info:", "Up votes: " + allowed[randomnumber].data.ups + " / Comments: " + allowed[randomnumber].data.num_comments)
            .setFooter("r/" + random)
message.channel.send(embed)
        } catch (err) {
return console.log(err);
        }
    }

Let Me Know If It Don't Work, But I Should

Solution 2:[2]

client.on('message', message => {

    if (!message.content.startsWith(prefix) || message.author.bot) return;  
    const args = message.content.slice(prefix.length).trim().split(/ +/);
    const command = args.shift().toLowerCase();
    
    if (command === "meme") {
        async (client, message, args) => 
        const subReddits = ["dankmeme", "meme", "me_irl"];
        const random = subReddits[Math.floor(Math.random() * subReddits.length)];

        const img = await randomPuppy(random);
        const embed = new Discord.MessageEmbed()
        .setColor(16776960)
        .setFooter("test")
        .setImage(img)
        .setTitle(`Random Meme requested by <@${message.author.tag}>`)
        .setURL(`https://reddit.com/r/${random}`)
        message.channel.send(embed);
    }
}); 

This should work, not quite sure, haven't tested it. (You can put in a command handler your self)

Solution 3:[3]

if (command === "meme")
async (client, message, args) => {

const fetch = require('node-fetch');
let userAvatar = message.author.avatarURL({ format: "png", dynamic: true, size: 2048 }); // this is just the users icon, u can remove it if you want.

        fetch(`https://meme-api.herokuapp.com/gimme`)
        .then(res => res.json())
        .then(async json => {
            const embed = new MessageEmbed()
             .setAuthor(`${json.title}`, `${userAvatar + "?size=2048"}`, `${json.postLink}`)
              .setImage(`${json.url}`)
               .setFooter(`?${json.ups} | ${json.subreddit}`)
                .setColor("RANDOM")

          message.channel.send(embed).catch((error) => {
                console.log("An error has occured on the \"meme\" command\n", error)
          })
}

Here you go! I've tested this on my own command handler.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 shawn
Solution 2 Ayfri
Solution 3 Nemz