Home > Net >  How to have a Discord bot repeat message?
How to have a Discord bot repeat message?

Time:10-09

I am new to discord.js and making a bot, and I want to make a simple magic 8-ball style command where you ask the bot a question and it responds with a random answer.

const commands = [
new SlashCommandBuilder().setName('ask').setDescription('Ask MUDBot a yes or no question')

I have this in my deploy-commands.js and

client.on('interactionCreate', async interaction => {
if (!interaction.isChatInputCommand()) return;
const { commandName } = interaction;

if (commandName === 'ping') {
    await interaction.reply('Pong!');
} else if (commandName === 'ask') {
    switch (getRandomInt(10)) {
        case 0:
            //interaction.reply(client.message.content);
            //interaction.reply('You asked, I reply: ')
            
            await interaction.reply('It is certain!');
            break;
        case 1:
            //interaction.reply('You asked, I reply: ')
            await interaction.reply('Without a doubt.');
            break;

etc in my bot.js.

currently the output doesn't repeat the question you asked so if you say: /ask are you a good bot?

the output is just:

... used /ask

MUDbot: (response)

How can I have the question you ask with the slash command be repeated by the bot? Thank you.

CodePudding user response:

This is what fetches the text the user sent to the bot

const message = await interaction.fetchReply();
//message.content is the user command

Then you can send the bot's answer in the following way:

const commandUser = message.content;

switch (getRandomInt(10)) {
    case 0:
        //interaction.reply(client.message.content);
        //interaction.reply('You asked, I reply: ')
        
        await interaction.reply(`commandUser: ${commandUser}, It is certain!`);
        break;
    case 1:
        //interaction.reply('You asked, I reply: ')
        await interaction.reply('Without a doubt.');
        break;

CodePudding user response:

I am not seeing a way the user can actually ask the question itself, so a way of doing that is to add an option.

const commands = [
new SlashCommandBuilder().setName('ask').setDescription('Ask MUDBot a yes or no question').addStringOption(option =>
    option.setName('question')
        .setDescription('The question that you want answered')
        .setRequired(true));

Then once you have the option on the slash command, get that when the command is ran and make a response string for it.

if (commandName === 'ask') {
    const question = interaction.options.getString('question');
    let response = `You asked "${question}", `;
    switch (getRandomInt(10)) {
        case 0:
            response  = 'It is certain!';
            break;
        case 1:
            response  = 'Without a doubt.';
            break;
    }
    // continue with other statements and then after switch reply
    interaction.reply(response);
}
  • Related