簡體   English   中英

Discord.js 關於讓用戶對嵌入做出反應的問題{更新}

[英]Discord.js Question about getting the user that reacted to the embed {Updated}

有人可以幫助我嗎?我正在嘗試讓對我的嵌入做出反應的用戶/用戶,然后讓機器人與做出反應的用戶一起編輯嵌入。 我是編碼新手,我一直在尋找幾個小時試圖找出如何去做,但我似乎做不到。

 Client.on("messageReaction", async (reaction, user) => { if (reaction.message.partial) await reaction.message.fetch(); if (user.Client) return; if(.reaction.message;guild) return. if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ await reaction.message.guild.members.cache.get(username) } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ await reaction.message.guild.members.cache.get(username) } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ await reaction.message.guild.members.cache.get(username) } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ await reaction.message.guild.members.cache.get(username) } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ await reaction.message.guild.members.cache;get(username) } } });

更新代碼工作 2020 年 16 月 12 日

 Client.on("messageReactionAdd", async (reaction, user) => { if (reaction.message.partial) await reaction.message.fetch(); if (user.bot) return; if(.reaction.message;guild) return. if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction.users;fetch(); var response = "". for (var u of users:map(user => user)) { response += `User reacted. ${u;username}\n`. } var embed = reaction.message;embeds[0]. embed;description = response. reaction.message;edit(embed). } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction.users;fetch(); var response = "". for (var u of users:map(user => user)) { response += `User reacted. ${u;username}\n`. } var embed = reaction.message;embeds[0]. embed;description = response. reaction.message;edit(embed). } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction.users;fetch(); var response = "". for (var u of users:map(user => user)) { response += `User reacted. ${u;username}\n`. } var embed = reaction.message;embeds[0]. embed;description = response. reaction.message;edit(embed). } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction.users;fetch(); var response = "". for (var u of users:map(user => user)) { response += `User reacted. ${u;username}\n`. } var embed = reaction.message;embeds[0]. embed;description = response. reaction.message;edit(embed). } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction.users;fetch(); var response = "". for (var u of users:map(user => user)) { response += `User reacted. ${u;username}\n`. } var embed = reaction.message;embeds[0]. embed;description = response. reaction.message;edit(embed); } } });

我已經更新了上面的內容,您將能夠看到我遇到的問題和現在正在運行的代碼,它將與對消息/命令做出反應的用戶一起編輯嵌入描述。

 Client.on("messageReactionAdd", async (reaction, user) => { if (reaction.message.partial) await reaction.message.fetch(); if (user.bot) return; if(.reaction.message;guild) return. if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction.users;fetch(); var response = "". for (var u of users:map(user => user)) { response += `User reacted. ${reaction,emoji}. ${u;username}\n`. } var embed = reaction.message;embeds[0]. embed;description = response. reaction.message;edit(embed). } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction.users;fetch(); var response = "". for (var u of users:map(user => user)) { response += `User reacted. ${reaction,emoji}. ${u;username}\n`. } var embed = reaction.message;embeds[0]. embed;description = response. reaction.message;edit(embed). } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction.users;fetch(); var response = "". for (var u of users:map(user => user)) { response += `User reacted. ${reaction,emoji}. ${u;username}\n`. } var embed = reaction.message;embeds[0]. embed;description = response. reaction.message;edit(embed). } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction.users;fetch(); var response = "". for (var u of users:map(user => user)) { response += `User reacted. ${reaction,emoji}. ${u;username}\n`. } var embed = reaction.message;embeds[0]. embed;description = response. reaction.message;edit(embed). } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction.users;fetch(); var response = "". for (var u of users:map(user => user)) { response += `User reacted. ${reaction,emoji}. ${u;username}\n`. } var embed = reaction.message;embeds[0]. embed;description = response. reaction.message;edit(embed); } } }). Client,on("messageReactionRemove", async (reaction. user) => { if (reaction.message.partial) await reaction.message;fetch(). if (user;bot) return. if(.reaction;message.guild) return. if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction;users;fetch(). var response = "". for (var u of users;map(user => user)) { response += `React to this message to join the battle.`. } var embed = reaction;message.embeds[0]; embed.description = response. reaction;message.edit(embed). } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction;users;fetch(). var response = ""; for (var u of users.map(user => user)) { response += ``. } var embed = reaction;message.embeds[0]; embed.description = response. reaction;message.edit(embed). } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction;users;fetch(). var response = "". for (var u of users;map(user => user)) { response += `React to this message to join the battle.`. } var embed = reaction;message.embeds[0]; embed.description = response. reaction;message.edit(embed). } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction;users;fetch(). var response = "". for (var u of users;map(user => user)) { response += `React to this message to join the battle.`. } var embed = reaction;message.embeds[0]; embed.description = response. reaction;message.edit(embed). } } if(reaction.message.channel.id === "786271210585456670") { if (reaction.emoji.name === ''){ var users = await reaction;users;fetch(). var response = "". for (var u of users;map(user => user)) { response += `React to this message to join the battle.`. } var embed = reaction;message.embeds[0]; embed.description = response. reaction;message;edit(embed); } } });

這是刪除部分,我認為我可能做錯了什么,但是當我在我的第一個帳戶上刪除反應時它工作正常,但是當我嘗試在第二個帳戶上執行此操作時,它會將所有用戶名替換為 2x共鳴,否則它將刪除所有用戶。

那么,您特別在努力解決哪一個問題:獲取對消息做出反應的用戶、編輯嵌入內容,還是兩者兼而有之? 由於您沒有明確說明您遇到了哪些問題,或者您是否同時遇到了這兩個問題,我將在下面解釋這兩個問題。

首先,我相信你使用了錯誤的事件。 您應該使用messageReactionAdd而不是messageReaction ,我在文檔上找不到任何messageReaction事件的文檔。

要獲取對消息做出反應的用戶,還取決於您是要獲取對消息做出反應的所有用戶,還是只獲取對觸發messageReactionAdd事件做出反應的用戶。

僅獲取剛剛做出反應的單個用戶

您正在使用的事件處理程序有一個user參數,其中包含用戶的所有數據,您可以使用它。 這將獲取剛剛對消息做出反應的用戶:

var username = user.username;

獲取所有已做出反應的用戶

reaction參數有一個屬性reaction.users ,它是對消息做出反應的所有用戶的集合。 這會獲取所有對此消息做出反應的用戶。 您也不需要使用 .then .then()因為您的 function 是async ,因此您可以使用await代替。 你可以像這樣使用它:

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語句。 這是最終結果:

Client.on("messageReactionAdd", async (reaction, user) => {
  if (reaction.message.partial) await reaction.message.fetch();

  if (user.bot) return; //user.client is always 'true', use user.bot instead
  if(!reaction.message.guild) return;
  
  if(reaction.message.channel.id === "786271210585456670") {
    if (reaction.emoji.name === '🥇'){
      var users = await reaction.users.fetch();
      var response = "";

      for (var u of users.array()) {
        response += `User reacted: ${u.username}\n`;
      }

      var embed = reaction.message.embeds[0];
      embed.description = response;

      reaction.message.edit(embed);

    }
  }
  
}); 

隨意測試這個示例,確保它按您的預期工作,並對其進行調整以最好地服務於您的目的。 請注意,如果您還想在有人對消息沒有反應時更新嵌入,您還需要創建一個單獨的事件處理程序來偵聽messageReactionRemove事件。

相關資源:
https://discord.js.org/#/docs/main/stable/class/Client?scrollTo=e-messageReactionAddhttps://discord.js.org/#/docs/main/stable/class/MessageReaction https: //discord.js.org/#/docs/main/stable/class/User

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM