提及在机器人状态中具有特定角色的用户

Mention users with specific role in bot status

Sooo,大家好,这是我第一次在 Whosebug 上发帖。无论如何,最近我开始学习 discord.js 并且我设法在 v12 中创建了一个自动更改状态的小机器人。这是代码:

setInterval(() => {
    const statuses = [
      `user 1`,
      `user 2`,
      `user 3...`
    ]

    const status = statuses[Math.floor(Math.random() * statuses.length)]
    client.user.setActivity(status, { type: "WATCHING" })
  }, 5000)

重点是让某些成员的用户名出现在机器人状态中,如果服务器只喜欢这些“特殊”成员中的一些,这真的很好,但现在我的服务器变大了,我希望机器人可以定位一个特定角色并列出所有具有该“特殊”角色的成员 :) 请帮助我,提前谢谢你

所以在 Elitezen 试图帮助我之后,我这样做了:

我在准备就绪时在客户端中添加了异步:

client.on("ready", async () => {
  const guild = client.guilds.cache.get("SERVER_ID");

我添加了你的代码:

const role = guild.roles.cache.get('SERVER_ID');

  await guild.members.fetch();

setInterval(() => {
    const statuses = Array
       .from(role.members.cache.values())
       .map(member => member.displayName);

    const status = statuses[Math.floor(Math.random() * statuses.length)]
    client.user.setActivity(status, { type: "WATCHING" })
  }, 5000)

现在我遇到了这个错误: 类型错误:无法读取未定义的 属性 'values'

使用 RoleManager#get()RoleManager#find()

定位您想要的角色的示例
const role = <Guild>.roles.cache.find(r => r.name == 'role name');
// Or
const role = <Guild>.roles.cache.get('role id');

要获得担任此角色的所有成员,首先获取公会的所有成员,然后根据集合的值构造一个数组。

然后将成员数组映射到他们的显示名称(或用户的用户名)

如果要获取所有成员,请确保已启用公会成员的意图。

await <Guild>.members.fetch();

setInterval(() => {
    const statuses = Array
       .from(role.members.values());
       .map(member => member.displayName);

    const status = statuses[Math.floor(Math.random() * statuses.length)]
    client.user.setActivity(status, { type: "WATCHING" })
  }, 5000)

所以,感谢 Elitezen,我设法解决了我的问题。

使客户端准备好异步函数后

client.on("ready", async () => {
const guild = client.guilds.cache.get("SERVER_ID");

这是提及在机器人状态中具有特定角色的用户的最终脚本:

const role = guild.roles.cache.get('ROLE_ID');

await guild.members.fetch();

setInterval(() => {
    const statuses = Array
       .from(role.members.values())
       .map(member => member.displayName);

    const status = statuses[Math.floor(Math.random() * statuses.length)]
    client.user.setActivity(status, { type: "WATCHING" })
}, 5000)