javascript - 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);
解决方案
可悲的是,我认为你还不能对互动做出反应。我检查了文档,但找不到该方法。
推荐阅读
- php - 从 Kartik ExportMenu 小部件导出到 Excel 时,只有在双击它时才会显示换行符
- javascript - 每次登录时如何将url与变量连接起来
- java - 无法使用 Selenium Webdriver 在 Twitter 上的撰写新推文框中输入文本
- django - django 模型 - 避免数据库设计中可能的循环引用
- c - 为什么在这种情况下需要取消对 char 的引用?
- mongodb - 为什么它为0时不显示值?
- java - 数组子集不等和
- c# - 如何修复“System.Data.OleDb.OleDbException:'UPDATE 语句中的语法错误。'”?
- c# - 无法将 DataTemplateColumn 元素绑定到另一个 DataTemplateColumn
- php - 当我尝试在 Symfony 中放置带有 URL 的图像时出现状态 403