Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Discord.js关于获取对嵌入{Updated}做出反应的用户的问题_Javascript_Discord_Discord.js_Bots - Fatal编程技术网

Javascript Discord.js关于获取对嵌入{Updated}做出反应的用户的问题

Javascript Discord.js关于获取对嵌入{Updated}做出反应的用户的问题,javascript,discord,discord.js,bots,Javascript,Discord,Discord.js,Bots,有人能帮我吗?我正在尝试获取对我的嵌入有反应的用户,然后让机器人与有反应的用户一起编辑嵌入。我对编码还不熟悉,我已经搜索了好几个小时试图找出如何去做,但我似乎做不到 Client.on(“messageReaction”,异步(反应,用户)=>{ if(reaction.message.partial)等待reaction.message.fetch(); if(user.Client)返回; 如果(!reaction.message.guild)返回; 如果(reaction.message

有人能帮我吗?我正在尝试获取对我的嵌入有反应的用户,然后让机器人与有反应的用户一起编辑嵌入。我对编码还不熟悉,我已经搜索了好几个小时试图找出如何去做,但我似乎做不到

Client.on(“messageReaction”,异步(反应,用户)=>{
if(reaction.message.partial)等待reaction.message.fetch();
if(user.Client)返回;
如果(!reaction.message.guild)返回;
如果(reaction.message.channel.id==“786271210585456670”){

如果(reaction.emoji.name===”那么,您特别要解决的是哪一个问题:获取对消息做出反应的用户、编辑嵌入,还是两者都有?因为您没有澄清其中哪些问题,或者如果两者都有问题,我将在下面解释这两个问题

首先,我认为您使用了错误的事件。您应该使用
messageReaction
而不是
messageReaction
,并且我在文档中找不到任何有关
messageReaction
事件的文档

要获取对消息做出反应的用户,还取决于您是要获取对消息做出反应的所有用户,还是仅获取触发
messageReactionAdd
事件的用户

仅获取刚刚做出反应的单个用户

您正在使用的事件处理程序有一个
user
参数,其中包含用户的所有数据,您可以直接使用该参数。这将获取刚刚对消息做出反应的用户:

var username = user.username;
获取所有做出反应的用户

reaction
参数有一个属性
reaction.users
,它是对消息做出反应的所有用户的集合。这将获取对此消息做出反应的所有用户。您也不需要使用
。然后()
由于您的函数是
异步的
,因此允许您使用
等待
。您可以这样使用它:

var users = await reaction.users.fetch();

var response = "";

//users is a Collection of all of the users who reacted. You can loop through it.
for (var u of users) {
    response += `User reacted: ${u.username}\n`;
}

//'response' is now a String with all of the usernames listed
获取和编辑嵌入文件

通过
reaction.message.embeds
,我们可以在消息上获得嵌入内容,对其进行修改,然后使用修改后的嵌入内容编辑消息。以下是一种方法:

//Gets the embed in the message
var embed = reaction.message.embeds[0];

//Sets the embed's description to the list of users we made in the previous example
//You can change whatever you need to change: the fields, the title, etc.
embed.description = response;

//Updates/edits the message with our new, modified embed
reaction.message.edit(embed);
将所有内容放在一起

现在,我将利用前两个示例向您展示代码的一部分可能是什么样子。为了简单起见,我假设您希望得到所有做出反应的用户,而不仅仅是一个用户。为了简单起见,我还将只使用一个
if
语句t:

Client.on(“messageReactionAdd”,异步(反应,用户)=>{
if(reaction.message.partial)等待reaction.message.fetch();
如果(user.bot)返回;//user.client始终为“true”,请改用user.bot
如果(!reaction.message.guild)返回;
如果(reaction.message.channel.id==“786271210585456670”){

如果(reaction.emoji.name==='非常感谢您的帮助,这很有效,但我必须更改一些内容,我将在下面发布它们。Client.on(“messageReaction”更改为Client.on(“messageReaction”“for(var u of users.map(user=>user))”)更改为“for(var u of users.map(user=>user)),但是当我尝试添加客户端时,上面的内容对我有效。on(“messageReactionRemove”由于某种未知原因,当多个用户删除该反应时,我会得到双倍的响应。很抱歉,我忘记将
messageReactionAdd
添加到最终代码中。此外,您可以只执行
users.map(user=>user)
,而不是执行
users.array()
的结果相同。我已经更新了我的答案以包含这些,谢谢你指出这些。我不确定为什么
messageReactionRemove
会触发两次响应,但这可能是一个单独的问题。谢谢你,我现在唯一的问题是删除部分。我似乎有它将删除成员,并用相同的响应x2替换它,或者它将删除所有用户,而不仅仅是删除该响应的一个用户。嗯,我不确定为什么会发生这种情况。删除处理程序的工作方式应该与添加处理程序完全相同。您的代码中可能还有我需要的其他内容是的,这就是我当时的想法,或者是因为我太蠢了,做错了什么。