有人在玩时扮演自动角色?

时间:2019-06-24 09:49:31

标签: 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"')
   }
  }
 }

});

我希望我的机器人添加所有扮演角色的人,并在他们玩完游戏后将其删除

我没有错误消息,只是我的机器人没有完全按照我的意愿做,我也没有解释

1 个答案:

答案 0 :(得分:0)

  
if (newMember.presence.clientStatus = 'desktop') {console.log("my code here")}
     
if (newMember.presence.ActivityType = 'PLAYING') {

这些代码段不起作用的原因是因为您使用的是assignment operator =而不是comparison operator之类的===== 。本质上,代码是设置属性,而不是比较

使用比较运算符检查属性值,而不是赋值运算符。


Presence.ActivityType不是Presence的有效属性。

检查用户的游戏(Presence.game),以查看他们是否在玩游戏。


  

其他一些机器人更改活动,但我不希望我的服务器中的其他机器人以该角色添加...

检查User是否是具有User.bot属性的漫游器。


如果用户更改了状态(即在线-> DND)或开始听音乐,观看视频流等,即使他们的游戏没有改变,您的代码也会被执行。

您需要检查旧的状态并将其与新的状态进行比较,以确保用户开始或停止玩游戏。


您不会发现任何被拒绝的Promises

使用try...catch语句或将catch()方法附加到Promises。


代码

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);
  }
});