discord.js - 通过 id discord.js 缓存公会用户
问题描述
我正在和我的朋友一起制作一个审核机器人,并且我正在尝试制作它,因此如果在机器人重新启动或崩溃时用户被静音,则在启动时它会循环每个公会数据库中的所有用户并检查他们是否仍有静音时间服务,然后使用 asetTimeout()
等待多久,直到他们的muted
角色被删除,但是机器人没有缓存用户,所以我得到一个用户未定义的错误。如果有人知道如何通过 id 缓存用户或以其他方式执行此操作,我们将不胜感激。
我的代码:
client.on("ready", () => {
client.user.setActivity(process.env.STATUS);
console.log(`Logged in as ${client.user.tag}`);
console.log(`Guilds: ${client.guilds.cache.size}`);
client.guilds.cache.forEach(function (guild) {
console.log(guild.name, ":", guild.id);
for (user in db.get(`${guild.id}.users`)) {
if (
ms(db.get(`${guild.id}.users.${moderation.mute.time}`)) +
Date.now(db.get(`${guild.id}.users.${moderation.mute.date}`)) >=
Date.now()
) {
let mutedRole = message.guild.roles.cache.find(
(mR) => mR.name === "Muted"
);
if (!mutedRole)
mutedRole = await message.guild.roles.create({
data: { name: "Muted", color: "#000000", permissions: [] },
});
client.guild.channels.cache.forEach(async (channel) => {
await channel.updateOverwrite(mutedRole, {
SEND_MESSAGES: false,
SPEAK: false,
VIDEO: false,
ADD_REACTIONS: false,
SEND_TTS_MESSAGES: false,
ATTACH_FILES: false,
});
});
let user = client.users.cache.get(user);
user.roles.remove(mutedRole);
}
}
});
});
解决方案
您可以缓存甚至保存用户的,并通过此方法id
取回分配的内容:GuildMember
// 'user' will become the GuildMember of your cached id
let user = null;
// 'cachedId' is the id of the cached user
let cachedId = yourCachedId;
client.users.fetch(cachedId).then(usr => {user = usr})
推荐阅读
- reactjs - Material-UI 应用 backgroundColor 不起作用
- alloy - 如何在启动合金时删除警告,我的合金 GUI 也有一些看起来像问题的条纹
- css - 定位第二个元素和之后的第三个兄弟元素
- r - 如何在 R 中的函数中使用不同的列名
- firebase - Firstore 数据库规则“request.auth.uid”不起作用
- javascript - blob 图像始终大小相同且不显示完整图像
- python-3.x - 如何用while循环构造一个python程序
- java - JAVA maven全新安装测试未完成迭代器
- python - Python - Selenium 有旧数据
- swift - 更改选项卡时表格滚动