我试图让我的机器人在某人开始游戏时自动将其添加到角色中,并在他们离开游戏时将其从该角色中删除。
我已经尝试了几件事,但没有成功:
其他一些机器人更改事件,但我不希望将我的服务器的其他机器人添加到该角色中,所以我这样做了(并且它似乎有效):
let roleid = "ROLE BOT ID"
if (newMember.roles.has(roleid)) {}
else {console.log("my code here")}
我的印象是,discord.js“聚集”了玩游戏(在桌面上)的人和连接到移动设备的人。所以我尝试像这样将它们分开,但“!=”似乎不起作用:
if (newMember.presence.clientStatus = 'desktop') {console.log("my code here")}
然后我还有最后一个问题是,当我离开游戏时,我的机器人将我添加到该角色
这是我的完整代码
client.on('presenceUpdate', (oldMember, newMember) => {
let guildChannels = newMember.guild;
let roleid = "ROLE BOT ID"
if (newMember.roles.has(roleid)) {}
else {
if (newMember.presence.clientStatus = 'desktop') {
if (newMember.presence.ActivityType = 'PLAYING') {
newMember.addRole(newMember.guild.roles.find (x => x.id == 'PLAYING ROLE ID'))
console.log(newMember.user.tag + ' -> "ROLE PLAYING NAME"')
}
else {newMember.removeRole(newMember.guild.roles.find (x => x.id == 'PLAYING ROLE ID'))
console.log(newMember.user.tag + ' / "ROLE PLAYING NAME"')
}
}
}
});
我希望我的机器人添加所有扮演某个角色的人,并在他们玩完后将其删除
我没有收到错误消息,只是我的机器人没有完全按照我想要的方式执行操作,而且我没有解释
最佳答案
if (newMember.presence.clientStatus = 'desktop') {console.log("my code here")}
if (newMember.presence.ActivityType = 'PLAYING') {
这些代码不起作用的原因是您正在使用 assignment operator =
而不是 comparison operator例如 ===
或 ==
。本质上,代码是设置属性而不是比较它们。
使用比较运算符来检查属性的值,而不是赋值运算符。
Presence.ActivityType
不是 Presence 的有效属性.
检查用户的游戏 ( Presence.game
),看看他们是否正在玩某些东西。
Some other bot change activity but I do not want the other bots of my server to be added in the role...
检查是否有 User是一个带有 User.bot
的机器人属性(property)。
如果用户更改其状态(即在线 --> DND)或开始听音乐、观看流媒体等,即使他们的游戏没有更改,您的代码也会被执行。
您需要检查旧的状态并将其与新的状态进行比较,以确保用户开始或停止玩游戏。
您没有捕获任何被拒绝的 Promises .
使用try...catch
声明或附上catch()
Promise 的方法。
代码
client.on('presenceUpdate', (oldMember, newMember) => {
const guild = newMember.guild;
const playingRole = guild.roles.find(role => role.id === 'PLAYING ROLE ID');
if (newMember.user.bot || newMember.presence.clientStatus === 'mobile' || oldMember.presence.status !== newMember.presence.status) return;
const oldGame = oldMember.presence.game && [0, 1].includes(oldMember.presence.game.type) ? true : false;
const newGame = newMember.presence.game && [0, 1].includes(newMember.presence.game.type) ? true : false;
if (!oldGame && newGame) { // Started playing.
newMember.addRole(playingRole)
.then(() => console.log(`${playingRole.name} added to ${newMember.user.tag}.`))
.catch(console.error);
} else if (oldGame && !newGame) { // Stopped playing.
newMember.removeRole(playingRole)
.then(() => console.log(`${playingRole.name} removed from ${newMember.user.tag}.`))
.catch(console.error);
}
});
关于javascript - 当有人玩时自动角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56733995/