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



Sooo,大家好,这是我第一次在StackOverflow上发布任何内容。无论如何,最近我开始学习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)

现在我陷入了这个错误:TypeError:无法读取未定义的属性"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)

最新更新