我正在发布一条消息,允许用户通过与我制作的与Discord兼容的游戏的Discord反应将另一个用户作为目标。我正在尝试使此游戏适用于任何数量的玩家,而不指定每个可能的玩家数量。我一直在使用循环来尝试使这项工作。我只想让机器人添加1、2和3的反应作为具有3个玩家(或用户)的游戏的选项,并显示我在下面的react_numbers中指定的正确的1、2或3表情符号。 (那些表情符号只是蓝色方块,其中的数字我知道可以与Discord反应配合使用)
我得到一个错误(node:10988) UnhandledPromiseRejectionWarning: TypeError: Emoji must be a string or Emoji/ReactionEmoji
var reaction_numbers = ["\u0030\u20E3","\u0031\u20E3","\u0032\u20E3","\u0033\u20E3","\u0034\u20E3","\u0035\u20E3", "\u0036\u20E3","\u0037\u20E3","\u0038\u20E3","\u0039\u20E3"]
var PlayerListMessage = [] <<< Gets list of players and arranges them
for (let i = 0; i < playerUserArray.length; i++) {
PlayerListMessage.push(`${i+1}: ${playerUserArray[i]}\n`)
}
async function QuestionPlayerToTarget(){
let msg = await message.author.send(`Which player activated the card you would like to negate?\n${PlayerListMessage.join("")}\nPlease select only one player.`)
for (var i of playerUserArray){
await msg.react(reaction_numbers[i+(1)]) <<< Error happens here.
}
const filter = (reaction, user) => {
return [reaction_numbers[1], reaction_numbers[2], reaction_numbers[3], reaction_numbers[4], reaction_numbers[5], reaction_numbers[6]].includes(reaction.emoji.name) && user.id === message.author.id;
};
const reply = await msg.awaitReactions(filter, { max: 1 })
.catch(console.error);
const targetPlayer = reply.first()
return targetPlayer
}
var targetPlayer = await QuestionPlayerToTarget()
console.log(targetPlayer)
关于如何进行此循环的任何想法都会增加对游戏中确切玩家数量的反应?预先感谢您的帮助!
答案 0 :(得分:0)
下次请用#
而不是<<<
进行评论
错误提示:Emoji must be a string or Emoji/ReactionEmoji
>字符串或表情符号。
msg.react()
因此您可以使用msg.react("emoji")
或msg.react(msg.guild.emojis.get("emojiid"))
。
第一个选项适用于已经存在的表情符号,例如蓝色正方形中的数字。
因此,在Discord中,您可以在发布表情符号之前放入\
,然后将其作为字符串获取。
第二个选项适用于公会表情符号,即表情符号,仅在该公会中可用。
使用http://getemoji.com/并搜索“一个”,您将得到1️⃣
。您可以将此符号用于msg.react("1️⃣")
。
因此,只需将其放在列表reaction_numbers
中,依此类推...
答案 1 :(得分:0)
我的尝试并不太远。我最终将循环类型从“ for”循环更改为标准的for循环,并且按预期工作。代码更改如下。
link
我还采用了react_numbers的第一个值并将其放在列表的末尾,以使索引值0 =数字1的表情符号带有蓝色正方形。