Discord bot比较joinedTimestamp判断入群满14天移除角色报错求解
错误原因
member.joinedTimestamp返回的是用户加入服务器时的Unix毫秒级时间戳(即距离1970年1月1日0点的总毫秒数),数值本身远大于14天对应的1209600000毫秒,你的逻辑没有计算加入时长的差值,判断条件完全错误,所以永远返回false。
修正后的代码
const guild = await client.guilds.fetch(ID); const newbieRole = guild.roles.cache.find(r => r.name === "Newbies"); const TWO_WEEKS_MS = 1209600000; // 遍历持有Newbies身份组的所有成员 newbieRole.members.forEach(async (member) => { // 计算用户已加入的总毫秒数 const joinDurationMs = Date.now() - member.joinedTimestamp; if (joinDurationMs >= TWO_WEEKS_MS) { try { // 加入满14天,移除身份组 await member.roles.remove(newbieRole); console.log(`已为用户${member.user.tag}移除Newbies身份组`); } catch (err) { console.error(`移除用户${member.user.tag}的身份组失败:`, err); } } else { console.log(`用户${member.user.tag}加入时长不足14天,暂不处理`); } });
额外注意事项
- 你需要在Discord开发者后台开启Bot的服务端成员意图(Server Members Intent),否则无法正常拉取身份组下的成员列表
- 移除身份组的操作是异步请求,建议添加
await和错误捕获逻辑,避免Bot权限不足、用户身份组已被移除等异常情况导致程序崩溃 - 请确认你要匹配的身份组名称和代码中的
Newbies完全一致,大小写、空格都不能有差异
内容的提问来源于stack exchange,提问作者troxie
相关产品推荐
相关产品推荐

