3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-03-15 05:41:51 +00:00

Optimize isBanned() and handle errors properly

This commit is contained in:
Dragory 2021-04-28 21:23:51 +03:00
parent 4410f20562
commit d747ac3982
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1

View file

@ -1,16 +1,44 @@
import { GuildPluginData } from "knub";
import { ModActionsPluginType } from "../types";
import { isDiscordHTTPError } from "../../../utils";
import { isDiscordHTTPError, isDiscordRESTError, SECONDS, sleep } from "../../../utils";
import { LogsPlugin } from "../../Logs/LogsPlugin";
import { LogType } from "../../../data/LogType";
import { hasDiscordPermissions } from "../../../utils/hasDiscordPermissions";
import { Constants } from "eris";
export async function isBanned(
pluginData: GuildPluginData<ModActionsPluginType>,
userId: string,
timeout: number = 5 * SECONDS,
): Promise<boolean> {
const botMember = pluginData.guild.members.get(pluginData.client.user.id);
if (botMember && !hasDiscordPermissions(botMember.permissions, Constants.Permissions.banMembers)) {
pluginData.getPlugin(LogsPlugin).log(LogType.BOT_ALERT, {
body: `Missing "Ban Members" permission to check for existing bans`,
});
return false;
}
export async function isBanned(pluginData: GuildPluginData<ModActionsPluginType>, userId: string): Promise<boolean> {
try {
const bans = await pluginData.guild.getBans();
return bans.some(b => b.user.id === userId);
const potentialBan = await Promise.race([pluginData.guild.getBan(userId), sleep(timeout)]);
return potentialBan != null;
} catch (e) {
if (isDiscordHTTPError(e) && e.code === 500) {
if (isDiscordRESTError(e) && e.code === 10026) {
// [10026]: Unknown Ban
return false;
}
if (isDiscordHTTPError(e) && e.code === 500) {
// Internal server error, ignore
return false;
}
if (isDiscordRESTError(e) && e.code === 50013) {
pluginData.getPlugin(LogsPlugin).log(LogType.BOT_ALERT, {
body: `Missing "Ban Members" permission to check for existing bans`,
});
}
throw e;
}
}