有人开始直播时添加角色

时间:2020-06-14 04:58:44

标签: javascript node.js discord discord.js

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

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

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

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

2 个答案:

答案 0 :(得分:0)

假设您正在使用Discord.js v11,则您的代码看起来很正常,除了您要查找角色的那一行。

使用此SELECT drivers.driver_key, driver_name, driver_sitename, LastEventDate, SUM(trips.trip_distance) FROM drivers INNER JOIN trips ON drivers.driver_key = trips.driver_key WHERE trips.trip_date > ( SELECT MAX(event_date) AS LastEventDate FROM events WHERE events.driver_key = drivers.driver_key ) GROUP BY DriverKey ORDER BY DistanceSince DESC; 意味着您正在尝试查找与其名称相同的角色ID,这显然是错误的。

您可能要用以下内容替换它:

const streamingRole = guild.roles.find(role => role.id === 'streaming role');

答案 1 :(得分:0)

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

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

因为旧状态和新状态永远不会相同。

如果要确保用户正在流式传输,则可能要检查此内容:

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