【发布时间】:2021-05-17 23:33:19
【问题描述】:
我正在和我的朋友一起制作一个审核机器人,我正在努力做到这一点,所以如果在机器人重新启动或崩溃时用户被静音,在启动时它会循环每个公会数据库中的所有用户并检查他们是否仍然有静音服务时间,然后使用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);
}
}
});
});
【问题讨论】:
-
你在就绪状态下使用
message,就绪状态没有消息对象。不好的方法尝试按名称查找角色,不好的方法使用client.users.fetch()获取用户,因为它是一个 chached 集合。并且您在 channel.updateOverwrite 上使用 await,因此如果它被拒绝,您的代码将停止。您需要使用try catch或.then and .catch
标签: discord.js