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