通过 id discord.js 缓存公会用户

时间:2021-02-15 02:10:36

标签: discord.js

我正在和我的朋友制作一个审核机器人,我正在尝试制作它,因此如果在机器人重新启动或崩溃时用户被静音,在启动时它会循环每个公会我数据库中的所有用户并检查他们是否仍然有静音时间服务,然后使用 setTimeout() 等待多长时间,直到他们的 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);
            }
        }
    });
});

1 个答案:

答案 0 :(得分:0)

您可以缓存甚至保存用户的 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})