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替换它,或者它将删除所有用户,而不仅仅是删除该响应的一个用户。嗯,我不确定为什么会发生这种情况。删除处理程序的工作方式应该与添加处理程序完全相同。您的代码中可能还有我需要的其他内容是的,这就是我当时的想法,或者是因为我太蠢了,做错了什么。