首页 > 解决方案 > 当有人开始直播时添加角色

问题描述

所以我找到了一些代码来帮助我在某人开始流式传输时赋予他们特定的角色,并在他们停止流式传输时删除该角色。

client.on('presenceUpdate', (oldMember, newMember) => {
    const guild = newMember.guild;
    const streamingRole = guild.roles.find(role => role.id === 'streaming role');

    if (newMember.user.bot || newMember.presence.clientStatus === 'mobile' || oldMember.presence.status !== newMember.presence.status) return;

    const oldGame = oldMember.presence.game ? oldMember.presence.game.streaming: false;
    const newGame = newMember.presence.game ? newMember.presence.game.streaming: false;

    if (!oldGame && newGame) {         // Started playing.
      newMember.addRole(streamingRole)
        .then(() => console.log(`${streamingRole.name} added to ${newMember.user.tag}.`))
        .catch(console.error);
    } 

    else if (oldGame && !newGame) {  // Stopped playing.
      newMember.removeRole(streamingRole)
        .then(() => console.log(`${streamingRole.name} removed from ${newMember.user.tag}.`))
        .catch(console.error);
    }
});

在大多数情况下,此代码有效,但由于某种原因,有些人没有改变他们的角色。他们在服务器中没有任何角色,并且机器人在列表中的位置比其他成员更高。

我还手动添加了该角色,一段时间后该角色被自动删除,即使该人仍在流式传输。

标签: javascriptnode.jsdiscorddiscord.js

解决方案


我认为您应该从第三行中删除这部分:

oldMember.presence.status !== newMember.presence.status

因为旧的状态和新的状态永远不会一样。

如果您想确保用户正在流式传输,您可能需要检查这个:

newMember.presence.status?.activities[0].type !== 'STREAMING'

推荐阅读