javascript - 当有人玩时自动角色?

标签 javascript discord.js

我试图让我的机器人在某人开始游戏时自动将其添加到角色中,并在他们离开游戏时将其从该角色中删除。

我已经尝试了几件事,但没有成功:

其他一些机器人更改事件,但我不希望将我的服务器的其他机器人添加到该角色中,所以我这样做了(并且它似乎有效):

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/

相关文章:

javascript - Discord.js 消息用户对应用程序使用react

javascript - guildMemberAdd 不与 Jimp 一起工作 | JavaScript

javascript - Discord.js 如何让机器人不删除他的消息

javascript - 如何向 ng.Iscope 添加属性?

javascript - 如果对象包含带有空数组的键,如何删除该对象?

javascript - 在数组中使用字符串

javascript - 当用户对消息使用react时如何消除 react ? -Discord.js

javascript - Threejs如何使用WireframeHelper删除线框

javascript点击游戏使用较少的html

javascript - 未定义的成员.voiceChannel