因此,我找到了一些代码来帮助我在某人开始流式传输时赋予其特定角色,并在他们停止流式传输时删除该角色。
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);
}
});
在大多数情况下,此代码有效,但是由于某些原因,某些人并没有改变其角色。首先,他们在服务器中没有任何角色,并且该机器人在列表上的位置比其他成员更高。
我还手动添加了角色,过了一段时间,即使此人仍在流式传输中,该角色也被自动删除。
答案 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'