首页 > 解决方案 > 通过 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);
            }
        }
    });
});

标签: discord.js

解决方案


您可以缓存甚至保存用户的,并通过此方法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})

推荐阅读