【问题标题】:Need help adding a role to a user. (discord.js)需要帮助为用户添加角色。 (discord.js)
【发布时间】:2021-06-28 15:21:13
【问题描述】:

当我在线时,机器人会给我一个角色,一旦我离线,机器人就会从我身上删除该角色。

当它删除角色时,我希望机器人将角色分配给特定用户。我该怎么做?

我的当前代码如下:

client.on('presenceUpdate', (oldPresence, newPresence) => {
  const member = newPresence.member;
  if (member.id === 'user.id') {
    if (oldPresence.status !== newPresence.status) {
      var gen = client.channels.cache.get('channel.id');
      if (
        newPresence.status == 'idle' ||
        newPresence.status == 'online' ||
        newPresence.status == 'dnd'
      ) {
        gen.send('online');
        member.roles.add('role.id');
      } else if (newPresence.status === 'offline') {
        gen.send('offline');
        member.roles.remove('role.id');
      }
    }
  }
});

【问题讨论】:

  • 你好像忘了添加你的问题:)
  • 最后一句

标签: javascript node.js discord.js


【解决方案1】:

您可以通过其 ID 获取其他成员。 newPresence 具有 guild 属性,该属性具有 members 属性;通过使用其.fetch() 方法,您可以获得要为其分配角色的成员。拥有此会员后,您可以再次使用.toles.add()。检查下面的代码:

// use an async function so we don't have to deal with then() methods
client.on('presenceUpdate', async (oldPresence, newPresence) => {
  // move all the variables to the top, it's just easier to maintain
  const channelID = '81023493....0437';
  const roleID = '85193451....5834';
  const mainMemberID = '80412945....3019';
  const secondaryMemberID = '82019504....8541';
  const onlineStatuses = ['idle', 'online', 'dnd'];
  const offlineStatus = 'offline';
  const { member } = newPresence;

  if (member.id !== mainMemberID || oldPresence.status === newPresence.status)
    return;

  try {
    const channel = await client.channels.fetch(channelID);

    if (!channel) return console.log('Channel not found');

    // grab the other member
    const secondaryMember = await newPresence.guild.members.fetch(secondaryMemberID);

    if (onlineStatuses.includes(newPresence.status)) {
      member.roles.add(roleID);
      secondaryMember.roles.remove(roleID);
      channel.send('online');
    }

    if (newPresence.status === offlineStatus) {
      member.roles.remove(roleID);
      secondaryMember.roles.add(roleID);
      channel.send('offline');
    }
  } catch (error) {
    console.log(error);
  }
});

【讨论】:

  • 谢谢,这正是我想要的。给任何想要使用它的人的一个小提示,添加 const secondaryMember = await newPresence.guild.members.fetch(secondaryMemberID); secondaryMember.roles.remove(roleID);以上channel.send('online');
  • 啊,是的,我刚刚更新了我的答案并添加了它。谢谢
猜你喜欢
  • 2022-01-18
  • 2014-10-09
  • 2021-01-28
  • 2013-05-10
  • 2017-07-01
  • 1970-01-01
  • 2020-12-11
  • 2013-09-17
  • 1970-01-01
相关资源
最近更新 更多