discord.js - 如何在提到的用户之间随机拆分消息?

Posted

技术标签:

【中文标题】discord.js - 如何在提到的用户之间随机拆分消息?【英文标题】:discord.js - How to randomly split messages between mentioned users? 【发布时间】:2021-07-06 05:55:00 【问题描述】:

我正在尝试制作系统,该系统将 dm 提到消息的用户和作者,每个消息都有一条随机消息*。但我想知道是否有更简单的方法,然后使用 if

*示例:

用户名作者​​:Test2

userNameMentioned[0]:Test4

用户名提及[1]:测试1

userNameMentioned[2]:Test3

(只是不会发生某人与其他人的信息相同)

const userNameAuthor = message.author;
const userNameMentioned = message.mentions.users.map(u => u);
    
let replies1 = [
    "Test1",
    "Test2",
    "Test3",
    "Test4",
];

let replies2 = [
    "Test1",
    "Test2",
    "Test3",
    "Test4",
];
  
let replies3 = [
    "Test1",
    "Test2",
    "Test3",
    "Test4",
];

let replies4 = [
    "Test1",
    "Test2",
    "Test3",
    "Test4",
]; 
  
let result1 = Math.floor((Math.random() * replies1.length));
let result2 = Math.floor((Math.random() * replies2.length));
let result3 = Math.floor((Math.random() * replies3.length));
let result4 = Math.floor((Math.random() * replies4.length));

userNameAuthor.send(replies1[result1])
userNameMentioned[0].send(replies2[result2])
userNameMentioned[1].send(replies3[result3])
userNameMentioned[2].send(replies4[result4])

【问题讨论】:

那是因为您对每个人使用相同的索引。要解决此问题,您需要为要发送给的每个人获取一个新索引 感谢您警告我这个错误,但例如 userNameMentioned[0] 和 userNameMentioned[2] 仍然可以收到相同的消息。 所以您希望每个用户都收到一条随机消息,但所有用户之间没有重复消息? 是的。我可以用 if 来做,但会有很多这样的 if。 【参考方案1】:

实现目标的更规范和更简单的方法是使用Array#splice() 方法,该方法删除或替换数组中预设数量的元素,并可选择用另一个元素替换它们(不是此时需要)。

在您的代码中,我们可以形成一个 forEach() 迭代器来遍历提到的成员,向他们发送随机消息,并从我们的数组中删除相同的消息。

const mentioned = message.mentions.users

let replies = [
  'test1',
  'test2',
  'test3',
  'test4'
]

mentioned.forEach(user => 
  const random = Math.floor(Math.random() * replies.length)
  user.send(replies[random])
  replies.splice(random, 1) // Removes the element from the array
)

【讨论】:

好的,有什么方法可以连接提到的用户和消息作者吗?

以上是关于discord.js - 如何在提到的用户之间随机拆分消息?的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js:机器人应该提到执行命令的用户

检查提到的用户是不是在 discord.js 中具有角色

检查用户是不是可以在提到的频道 discord.js 中发送消息

@user 的 discord.js 排名命令

Discord.js v12 角色添加到提到的用户问题

我如何在 discord.js 中获得提及用户的用户名