统计成员Discord JS的语音通道时间



我希望它计算每个用户在语音通道上的时间,并将其发送到数据库。

在浏览了一段时间的文档后,我没有找到一种方法来查看它们在通道中存在了多长时间。我的解决方法是存储它们加入通道的时间,然后从它们离开的时间中减去它们加入通道的时间。怎么做呢?

想继续我的代码,我使用mongo db.

client.on('voiceStateUpdate', (oldState, newState) => {
let newUserChannel = newMember.voiceChannel;
let oldUserChannel = oldMember.voiceChannel;
...
});

要获得用户在语音通道中停留的总时间,您必须保存用户加入语音通道和离开语音通道的时间戳,然后从用户离开语音通道的时间戳中减去保存的时间戳。例如,您可以使用Map保存时间戳,但也可以使用数据库。在下面的示例中,我使用了Map,因为它是一种使用键保存值的简单方法。

const users = new Map();
...
client.on('voiceStateUpdate', (oldState, newState) => {
const member = oldState.member || newState.member;
if(!member) return;

if(!newState.channel && oldState.channel){
// User left the voice channel
const joinedTimestamp = users.get(member.id); // Get the saved timestamp of when the user joined the voice channel
if(!joinedTimestamp) return; // In case the bot restarted and the user left the voice channel after the restart (the Map will reset after a restart)
const totalTime = new Date().getTime() - joinedTimestamp; // The total time the user has been i the voice channel in ms
// Do what you want with the time
} else if(oldState.channel && !newState.channel){
// User joined the voice channel
users.set(member.id, new Date().getTime()); // Save the timestamp of when the user joined the voice channel
}
});

相关内容

  • 没有找到相关文章

最新更新