首页 > 解决方案 > msg.react 不是函数

问题描述

我正在尝试创建一个机器人,允许我使用 discord.js v13 进行带有 2 个预定义反应的民意调查。我正在尝试使用 messageEmbed 来执行此操作,但问题是在我执行时msg.react它告诉我: TypeError: msg.react is not a function

我究竟做错了什么?它只向我显示嵌入!

这是代码:

const { Client, Intents } = require("discord.js");
const client = new Client({
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.GUILD_MESSAGE_REACTIONS,
  ],
});
const interactions = require("discord-slash-commands-client");
const interactionClient = new interactions.Client(token, applicationID);
interactionClient
  .createCommand({
    name: "sondage",
    description: "Création de sondage",
    options: [
      {
        // très important de mettre les arguments dans le bon ordre !!!!!
        name: "sentence",
        description: "Question du sondage",
        type: 3,
        required: true,
      },
    ],
  })
  .catch(console.error)
  .then(console.log);

client.on("interactionCreate", async (interaction) => {
  try {
    sentence = interaction.options.getString("sentence"); // Argument de la question

    let pollEmbed = new Discord.MessageEmbed()
      .setTitle("Question")
      .setDescription(
        sentence +
          "\n\nVeuillez répondre à ce sondage par le biais de ces réacations :white_check_mark:  ou :negative_squared_cross_mark: ",
      )
      .setAuthor(interaction.user.username)
      .setTimestamp()
      .setFooter("");

    const msg = await interaction.reply({ embeds: [pollEmbed], fetchReply: true });
    msg.react("✅");
  } catch (error) {
    console.log("------------------------");
    console.log("Erreur avec le sondage");
    console.log(error);
    console.log("------------------------");
  }
});

编辑:我发送全部代码:

const { Client, Intents } = require('discord.js');
const Discord = require('discord.js');
const request = require('request');

//const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });
 const client = new Client({ intents:  [Intents.FLAGS.GUILDS,
                                        Intents.FLAGS.GUILD_MESSAGES,
                                        Intents.FLAGS.GUILD_MESSAGE_REACTIONS] });
require('dotenv').config();
const token = process.env.TOKEN;
const applicationID = process.env.APPLICATION_ID ;


/* Lister les commandes discord */

const interactions = require("discord-slash-commands-client");
const interactionClient = new interactions.Client(token,applicationID);


/* TODO Ce sera pratique pour kamelott dans options pour le choix du personnage
choices: [
  {
    name: "name to display",
    value: "the actual value"
  },
  {
    name: "another option",
    value: "the other value"
  }
]
*/

interactionClient.createCommand({
    name: "kamelott",
    description: "Generation de citation kamelott aléatoire sans argument",
    options: {}
  })
  .catch(console.error)
  .then(console.log);


  interactionClient.createCommand({
      name: "sondage",
      description: "Création de sondage",
      options:[{ // très important de mettre les arguments dans le bon ordre !!!!!
            name: "sentence",
            description: "Question du sondage",
            type: 3,
            required: true

        }]

    })
    .catch(console.error)
    .then(console.log);
/**************/


/****************************/

// affichage d'un message dans la console quand le robot est démarré
client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});



client.on('interactionCreate', async interaction => {

  if(!interaction.isCommand()){
    console.log("bug with interaction")
    return ;
  }
  const { commandName, options} = interaction ;

  if (commandName === 'kamelott'){
    try {
      const axios = require('axios');
        citation =  await  axios('https://kaamelott.chaudie.re/api/random')
            .then(res => {
              const data = res.data.citation ;
              citation = data.citation +"("+data.infos.personnage+")";
              return citation ;
            })
            .catch(err => console.error(err));
     interaction.reply({
         content: citation + "("+interaction.user.username+")"
     })
} catch (error) {
    console.log('------------------------');
    console.log("Erreur avec kamelott");
    console.log(error);
    console.log('------------------------');
}

  }else if(commandName === 'sondage'){
    // https://discordjs.guide/additional-info/async-await.html#execution-with-discord-js-code
    // https://discordjs.guide/popular-topics/reactions.html#reacting-to-messages

    sentence = interaction.options.getString('sentence') ; // Argument de la question

    let pollEmbed = new Discord.MessageEmbed()
      .setTitle('Question')
      .setDescription(sentence +"\n\nVeuillez répondre à ce sondage par le biais de ces réacations :white_check_mark:  ou :negative_squared_cross_mark: ")
      .setAuthor(interaction.user.username)
      .setTimestamp()
      .setFooter("");

      try {

        const msg = await interaction.reply({ embeds: [pollEmbed] , fetchReply: true });
        await msg.react('✅');

        } catch (error) {
      console.log('------------------------');
      console.log("Erreur avec le sondage");
      console.log(error);
      console.log('------------------------');
        }
  }else{
    console.log(commandName);
      interaction.reply({
          content: "Commande Invalide ",
          ephemeral:true
      })
  }

})

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


  if (message.content === 'hello' || message.content === 'Hello') {
    message.channel.send("heloooooooooooooooooo !!!!!!");
  }

});


// Authentification du robot
client.login(token);

标签: javascriptnode.jsdiscord.js

解决方案


可悲的是,我认为你还不能对互动做出反应。我检查了文档,但找不到该方法。


推荐阅读