Javascript Discord.js-获取用户的最后一个活动?

Javascript Discord.js-获取用户的最后一个活动?,javascript,node.js,discord,discord.js,Javascript,Node.js,Discord,Discord.js,我正在尝试使用discord.js 比如说我有 client.guilds.find('id', 'SERVER ID').fetchMembers().then(members => { const role = members.roles.find('name', 'Newbies') role.members.forEach(member => { console.log(member.user.lastMess

我正在尝试使用
discord.js

比如说我有

  client.guilds.find('id', 'SERVER ID').fetchMembers().then(members => {
        const role = members.roles.find('name', 'Newbies')

        role.members.forEach(member => {
              console.log(member.user.lastMessage) // null
        })
  })
除非成员已发布,否则由于客户端正在侦听,lastMessage始终为空

有没有办法找到最后一项活动?还是一种变通方法,比如返回所有用户消息的查询,然后我可以从中获取最新的消息

实际上,我想知道用户上次发布的日期/时间,以便我们可以监控非贡献帐户


谢谢

我认为您需要的是Discord的内置功能之一,即:修剪。此功能将抓取非活动成员并允许您踢他们。幸运的是,discord.js有一个API调用,通过将
dry
参数设置为
true
,您甚至可以先获得成员的数量,而不必实际踢他们。该功能还允许您指定用户不活动的天数

看一下文档:


希望有帮助

在查看文档后,我认为我也没有找到什么,所以我想出了一个手动搜索功能

基本上,它将扫描每个通道,直到找到来自X用户的消息,或通道中消息的结尾。然后,它比较来自每个频道的用户的最后一条消息,并打印最后一条消息

如果用户很长一段时间没有写东西,它可能会很长。当然,在尝试此操作之前,您必须检查
lastMessage

我可能会增加一个时间限制。因为如果你有上千条消息,这个函数将永远运行

如果找到的最后一条消息是在接受的时间内,您可以停止该功能,以不踢/做任何事情

如果在fetched messaged包中找到的第一条消息早于禁止限制,我会停止搜索,但是,如果第一条消息不早,请记住这意味着另一条消息,因此我们仍然需要检查它们(也可以通过检查包中的最后一条消息来避免)

异步函数fetchMessageUser(chan、id、res){ 让选项={}; if(typeof res!=“未定义”){ 选项={before:res.id}; } 返回等待chan.fetchMessages(选项) 。然后(异步msgs=>{ 如果(msgs.size==0){ 返回{continue:false,found:false}; }; 如果((Date.now()-(msgs.first().createdTimestamp))>86400000){//1天 返回{continue:false,found:false}; } 让msgbyauther=msgs.find(msg=>{ 返回msg.author.id==id; }); if(msgbyauther==null){ 返回{continue:true,id:msgs.last().id}; }否则{ 返回{continue:false,found:true,timestamp:msgbyauther.createdTimestamp}; } }) .catch(err=>console.log('err>>',err)); } client.on('message',async(msg)=>{ 让时间戳=[]; for(让msg.guild.channels的[id,chan]访问){ 如果(chan.type!=='text'){继续;} 让id='587692527826763788';//用户的id,这里是一个未验证的帐户 让我们重新来过; 做{ res=等待获取消息用户(chan、id、res); }同时(继续); 如果(已找到的资源){ 时间戳推送(res.timestamp); } } 日志(时间戳); 让first=timestamp.sort((a,b)=>(b-a))[0]; 控制台日志(新日期(第一个)); });
一个更好的变体是为一组用户运行它,检查来自每个频道的所有50条最后的消息,并将每个用户与其最近的消息关联(如果他写了一条消息),然后这样做,直到所有频道中的所有消息都太旧,无法避免kick/whatever。然后为所有没有关联消息的用户做一些事情

这对了解谢谢很有用,但是老实说,我简化了用例,因此理想情况下,我仍然希望找到一种方法来获取用户空间的最后一条消息。传统上,这似乎只针对那些没有被看到的用户,而不是那些没有贡献的用户。例如,那些每天阅读但不发帖的人会完全绕过这一功能。我明白,在这种情况下,删减功能对于你想要实现的目标来说太简单了;我担心,监听和跟踪人们发送消息的日期和时间是唯一的方法。你必须获取每个文本频道的每条消息才能获取公会的每条消息,然后过滤以从成员处获取最后一条消息,你还可以按消息的时间戳排序并获取第一条消息