add error event and handling

This commit is contained in:
Skillz
2020-05-29 12:41:36 -04:00
parent 5810eab259
commit 9d0fd3ac67
6 changed files with 82 additions and 9 deletions
+16 -1
View File
@@ -16,6 +16,7 @@ import {
ChannelEditOptions,
} from "../types/channel.ts";
import { logYellow } from "../utils/logger.ts";
import { eventHandlers } from "../module/client.ts";
/** Checks if a user id or a role id has permission in this channel */
export function hasChannelPermission(
@@ -45,6 +46,7 @@ export async function getMessage(channel: Channel, id: string) {
if (
!botHasPermission(channel.guildID, [Permissions.VIEW_CHANNEL])
) {
eventHandlers.error?.(Errors.MISSING_VIEW_CHANNEL);
throw new Error(Errors.MISSING_VIEW_CHANNEL);
}
if (
@@ -53,6 +55,7 @@ export async function getMessage(channel: Channel, id: string) {
[Permissions.READ_MESSAGE_HISTORY],
)
) {
eventHandlers.error?.(Errors.MISSING_READ_MESSAGE_HISTORY);
throw new Error(Errors.MISSING_READ_MESSAGE_HISTORY);
}
}
@@ -75,6 +78,7 @@ export async function getMessages(
if (
!botHasPermission(channel.guildID, [Permissions.VIEW_CHANNEL])
) {
eventHandlers.error?.(Errors.MISSING_VIEW_CHANNEL);
throw new Error(Errors.MISSING_VIEW_CHANNEL);
}
if (
@@ -83,6 +87,7 @@ export async function getMessages(
[Permissions.READ_MESSAGE_HISTORY],
)
) {
eventHandlers.error?.(Errors.MISSING_READ_MESSAGE_HISTORY);
throw new Error(Errors.MISSING_READ_MESSAGE_HISTORY);
}
}
@@ -115,6 +120,7 @@ export async function sendMessage(
if (
!botHasPermission(channel.guildID, [Permissions.SEND_MESSAGES])
) {
eventHandlers.error?.(Errors.MISSING_SEND_MESSAGES);
throw new Error(Errors.MISSING_SEND_MESSAGES);
}
if (
@@ -124,11 +130,13 @@ export async function sendMessage(
[Permissions.SEND_TTS_MESSAGES],
)
) {
eventHandlers.error?.(Errors.MISSING_SEND_TTS_MESSAGE);
throw new Error(Errors.MISSING_SEND_TTS_MESSAGE);
}
}
if (content.content && content.content.length > 2000) {
eventHandlers.error?.(Errors.MESSAGE_MAX_LENGTH);
throw new Error(Errors.MESSAGE_MAX_LENGTH);
}
@@ -150,9 +158,13 @@ export function deleteMessages(
channel.guildID &&
!botHasPermission(channel.guildID, [Permissions.MANAGE_MESSAGES])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_MESSAGES);
throw new Error(Errors.MISSING_MANAGE_MESSAGES);
}
if (ids.length < 2) throw new Error(Errors.DELETE_MESSAGES_MIN);
if (ids.length < 2) {
eventHandlers.error?.(Errors.DELETE_MESSAGES_MIN);
throw new Error(Errors.DELETE_MESSAGES_MIN);
}
if (ids.length > 100) {
logYellow(
@@ -172,6 +184,7 @@ export function getChannelInvites(channel: Channel) {
channel.guildID &&
!botHasPermission(channel.guildID, [Permissions.MANAGE_CHANNELS])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_CHANNELS);
throw new Error(Errors.MISSING_MANAGE_CHANNELS);
}
return RequestManager.get(endpoints.CHANNEL_INVITES(channel.id));
@@ -186,6 +199,7 @@ export function createInvite(channel: Channel, options: CreateInviteOptions) {
[Permissions.CREATE_INSTANT_INVITE],
)
) {
eventHandlers.error?.(Errors.MISSING_CREATE_INSTANT_INVITE);
throw new Error(Errors.MISSING_CREATE_INSTANT_INVITE);
}
return RequestManager.post(endpoints.CHANNEL_INVITES(channel.id), options);
@@ -197,6 +211,7 @@ export function getChannelWebhooks(channel: Channel) {
channel.guildID &&
!botHasPermission(channel.guildID, [Permissions.MANAGE_WEBHOOKS])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_WEBHOOKS);
throw new Error(Errors.MISSING_MANAGE_WEBHOOKS);
}
return RequestManager.get(endpoints.CHANNEL_WEBHOOKS(channel.id));
+34 -3
View File
@@ -16,7 +16,7 @@ import { CreateEmojisOptions, PositionSwap, EditEmojisOptions, CreateRoleOptions
import { RoleData } from "../types/role.ts"
import { createRole } from "../structures/role.ts"
import { Intents } from "../types/options.ts"
import { identifyPayload } from "../module/client.ts"
import { identifyPayload, eventHandlers } from "../module/client.ts"
import { requestAllMembers } from "../module/shardingManager.ts"
/** Gets an array of all the channels ids that are the children of this category. */
@@ -64,6 +64,7 @@ export function guildBannerURL(guild: Guild, size: ImageSize = 128, format?: Ima
/** Create a channel in your server. Bot needs MANAGE_CHANNEL permissions in the server. */
export async function createGuildChannel(guild: Guild, name: string, options: CreateChannelOptions) {
if (!botHasPermission(guild.id, [Permissions.MANAGE_CHANNELS])) {
eventHandlers.error?.(Errors.MISSING_MANAGE_CHANNELS);
throw new Error(Errors.MISSING_MANAGE_CHANNELS);
}
const result =
@@ -122,6 +123,7 @@ options: CreateEmojisOptions,
if (
!botHasPermission(guildID, [Permissions.MANAGE_EMOJIS])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_EMOJIS);
throw new Error(Errors.MISSING_MANAGE_EMOJIS);
}
return RequestManager.post(endpoints.GUILD_EMOJIS(guildID), {
@@ -136,6 +138,7 @@ export function editEmoji(guildID: string, id: string, options: EditEmojisOption
if (
!botHasPermission(guildID, [Permissions.MANAGE_EMOJIS])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_EMOJIS);
throw new Error(Errors.MISSING_MANAGE_EMOJIS);
}
return RequestManager.patch(endpoints.GUILD_EMOJI(guildID, id), {
@@ -149,6 +152,7 @@ export function deleteEmoji(guildID: string, id: string, reason?: string) {
if (
!botHasPermission(guildID, [Permissions.MANAGE_EMOJIS])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_EMOJIS);
throw new Error(Errors.MISSING_MANAGE_EMOJIS);
}
return RequestManager.delete(
@@ -162,6 +166,7 @@ export async function createGuildRole(guild: Guild, options: CreateRoleOptions,
if (
!botHasPermission(guild.id, [Permissions.MANAGE_ROLES])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_ROLES);
throw new Error(Errors.MISSING_MANAGE_ROLES);
}
const role_data = await RequestManager.post(
@@ -184,6 +189,7 @@ export function editRole(guildID: string, id: string, options: CreateRoleOptions
if (
!botHasPermission(guildID, [Permissions.MANAGE_ROLES])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_ROLES);
throw new Error(Errors.MISSING_MANAGE_ROLES);
}
return RequestManager.patch(endpoints.GUILD_ROLE(guildID, id), options);
@@ -194,6 +200,7 @@ export function deleteRole(guildID: string, id: string) {
if (
!botHasPermission(guildID, [Permissions.MANAGE_ROLES])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_ROLES);
throw new Error(Errors.MISSING_MANAGE_ROLES);
}
return RequestManager.delete(endpoints.GUILD_ROLE(guildID, id));
@@ -207,6 +214,7 @@ export function getRoles(guildID: string) {
if (
!botHasPermission(guildID, [Permissions.MANAGE_ROLES])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_ROLES);
throw new Error(Errors.MISSING_MANAGE_ROLES);
}
return RequestManager.get(endpoints.GUILD_ROLES(guildID));
@@ -217,6 +225,7 @@ export function swapRoles(guildID: string, rolePositons: PositionSwap) {
if (
!botHasPermission(guildID, [Permissions.MANAGE_ROLES])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_ROLES);
throw new Error(Errors.MISSING_MANAGE_ROLES);
}
return RequestManager.patch(endpoints.GUILD_ROLES(guildID), rolePositons);
@@ -224,10 +233,14 @@ return RequestManager.patch(endpoints.GUILD_ROLES(guildID), rolePositons);
/** Check how many members would be removed from the server in a prune operation. Requires the KICK_MEMBERS permission */
export async function getPruneCount(guildID: string, days: number) {
if (days < 1) throw new Error(Errors.PRUNE_MIN_DAYS);
if (days < 1) {
eventHandlers.error?.(Errors.PRUNE_MIN_DAYS);
throw new Error(Errors.PRUNE_MIN_DAYS);
}
if (
!botHasPermission(guildID, [Permissions.KICK_MEMBERS])
) {
eventHandlers.error?.(Errors.MISSING_KICK_MEMBERS);
throw new Error(Errors.MISSING_KICK_MEMBERS);
}
const result = (await RequestManager.get(
@@ -239,10 +252,14 @@ return result.pruned;
/** Begin pruning all members in the given time period */
export function pruneMembers(guildID: string, days: number) {
if (days < 1) throw new Error(Errors.PRUNE_MIN_DAYS);
if (days < 1) {
eventHandlers.error?.(Errors.PRUNE_MIN_DAYS);
throw new Error(Errors.PRUNE_MIN_DAYS);
}
if (
!botHasPermission(guildID, [Permissions.KICK_MEMBERS])
) {
eventHandlers.error?.(Errors.MISSING_KICK_MEMBERS);
throw new Error(Errors.MISSING_KICK_MEMBERS);
}
return RequestManager.post(endpoints.GUILD_PRUNE(guildID), { days });
@@ -250,6 +267,7 @@ return RequestManager.post(endpoints.GUILD_PRUNE(guildID), { days });
export function fetchMembers(guild: Guild, options?: FetchMembersOptions) {
if (!(identifyPayload.intents & Intents.GUILD_MEMBERS)) {
eventHandlers.error?.(Errors.MISSING_INTENT_GUILD_MEMBERS);
throw new Error(Errors.MISSING_INTENT_GUILD_MEMBERS);
}
@@ -261,6 +279,7 @@ return new Promise((resolve) => {
/** Returns the audit logs for the guild. Requires VIEW AUDIT LOGS permission */
export function getAuditLogs(guildID: string, options: GetAuditLogsOptions) {
if (!botHasPermission(guildID, [Permissions.VIEW_AUDIT_LOG])) {
eventHandlers.error?.(Errors.MISSING_VIEW_AUDIT_LOG);
throw new Error(Errors.MISSING_VIEW_AUDIT_LOG);
}
@@ -277,6 +296,7 @@ export function getEmbed(guildID: string, ) {
if (
!botHasPermission(guildID, [Permissions.MANAGE_GUILD])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_GUILD);
throw new Error(Errors.MISSING_MANAGE_GUILD);
}
return RequestManager.get(endpoints.GUILD_EMBED(guildID));
@@ -287,6 +307,7 @@ export function editEmbed(guildID: string, enabled: boolean, channelID?: string
if (
!botHasPermission(guildID, [Permissions.MANAGE_GUILD])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_GUILD);
throw new Error(Errors.MISSING_MANAGE_GUILD);
}
return RequestManager.patch(
@@ -305,6 +326,7 @@ export function getIntegrations(guildID: string, ) {
if (
!botHasPermission(guildID, [Permissions.MANAGE_GUILD])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_GUILD);
throw new Error(Errors.MISSING_MANAGE_GUILD);
}
return RequestManager.get(endpoints.GUILD_INTEGRATIONS(guildID));
@@ -315,6 +337,7 @@ export function editIntegration(guildID: string, id: string, options: EditIntegr
if (
!botHasPermission(guildID, [Permissions.MANAGE_GUILD])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_GUILD);
throw new Error(Errors.MISSING_MANAGE_GUILD);
}
return RequestManager.patch(
@@ -328,6 +351,7 @@ export function deleteIntegration(guildID: string, id: string) {
if (
!botHasPermission(guildID, [Permissions.MANAGE_GUILD])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_GUILD);
throw new Error(Errors.MISSING_MANAGE_GUILD);
}
return RequestManager.delete(endpoints.GUILD_INTEGRATION(guildID, id));
@@ -338,6 +362,7 @@ export function syncIntegration(guildID: string, id: string) {
if (
!botHasPermission(guildID, [Permissions.MANAGE_GUILD])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_GUILD);
throw new Error(Errors.MISSING_MANAGE_GUILD);
}
return RequestManager.post(endpoints.GUILD_INTEGRATION_SYNC(guildID, id));
@@ -348,6 +373,7 @@ export function getBans(guildID: string) {
if (
!botHasPermission(guildID, [Permissions.BAN_MEMBERS])
) {
eventHandlers.error?.(Errors.MISSING_BAN_MEMBERS);
throw new Error(Errors.MISSING_BAN_MEMBERS);
}
return RequestManager.get(endpoints.GUILD_BANS(guildID));
@@ -358,6 +384,7 @@ export function ban(guildID: string, id: string, options: BanOptions) {
if (
!botHasPermission(guildID, [Permissions.BAN_MEMBERS])
) {
eventHandlers.error?.(Errors.MISSING_BAN_MEMBERS);
throw new Error(Errors.MISSING_BAN_MEMBERS);
}
return RequestManager.put(endpoints.GUILD_BAN(guildID, id), options);
@@ -368,6 +395,7 @@ export function unban(guildID: string, id: string) {
if (
!botHasPermission(guildID, [Permissions.BAN_MEMBERS])
) {
eventHandlers.error?.(Errors.MISSING_BAN_MEMBERS);
throw new Error(Errors.MISSING_BAN_MEMBERS);
}
return RequestManager.delete(endpoints.GUILD_BAN(guildID, id));
@@ -413,6 +441,7 @@ export function editGuild(guildID: string, options: GuildEditOptions) {
if (
!botHasPermission(guildID, [Permissions.MANAGE_GUILD])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_GUILD);
throw new Error(Errors.MISSING_MANAGE_GUILD);
}
return RequestManager.patch(endpoints.GUILD(guildID), options);
@@ -423,6 +452,7 @@ export function getInvites(guildID: string, ) {
if (
!botHasPermission(guildID, [Permissions.MANAGE_GUILD])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_GUILD);
throw new Error(Errors.MISSING_MANAGE_GUILD);
}
return RequestManager.get(endpoints.GUILD_INVITES(guildID));
@@ -441,6 +471,7 @@ return RequestManager.get(endpoints.GUILD_REGIONS(guildID));
/** Returns a list of guild webhooks objects. Requires the MANAGE_WEBHOOKs permission. */
export function getWebhooks(guildID: string, ) {
if (!botHasPermission(guildID, [Permissions.MANAGE_WEBHOOKS])) {
eventHandlers.error?.(Errors.MISSING_MANAGE_WEBHOOKS);
throw new Error(Errors.MISSING_MANAGE_WEBHOOKS);
}
+12 -1
View File
@@ -7,7 +7,7 @@ import {
higherRolePosition,
botHasPermission,
} from "../utils/permissions.ts";
import { botID } from "../module/client.ts";
import { botID, eventHandlers } from "../module/client.ts";
import { Guild } from "../structures/guild.ts";
import { Permissions } from "../types/permission.ts";
import { Errors } from "../types/errors.ts";
@@ -45,10 +45,12 @@ export function addRole(
botsHighestRole &&
!higherRolePosition(guild.id, botsHighestRole.id, roleID)
) {
eventHandlers.error?.(Errors.BOTS_HIGHEST_ROLE_TOO_LOW);
throw new Error(Errors.BOTS_HIGHEST_ROLE_TOO_LOW);
}
if (!botHasPermission(guild.id, [Permissions.MANAGE_ROLES])) {
eventHandlers.error?.(Errors.MISSING_MANAGE_ROLES);
throw new Error(Errors.MISSING_MANAGE_ROLES);
}
@@ -70,10 +72,12 @@ export function removeRole(
botsHighestRole &&
!higherRolePosition(guild.id, botsHighestRole.id, roleID)
) {
eventHandlers.error?.(Errors.BOTS_HIGHEST_ROLE_TOO_LOW);
throw new Error(Errors.BOTS_HIGHEST_ROLE_TOO_LOW);
}
if (!botHasPermission(guild.id, [Permissions.MANAGE_ROLES])) {
eventHandlers.error?.(Errors.MISSING_MANAGE_ROLES);
throw new Error(Errors.MISSING_MANAGE_ROLES);
}
return RequestManager.delete(
@@ -114,10 +118,12 @@ export function kick(guild: Guild, memberID: string, reason?: string) {
botsHighestRole && membersHighestRole &&
botsHighestRole.position <= membersHighestRole.position
) {
eventHandlers.error?.(Errors.BOTS_HIGHEST_ROLE_TOO_LOW);
throw new Error(Errors.BOTS_HIGHEST_ROLE_TOO_LOW);
}
if (!botHasPermission(guild.id, [Permissions.KICK_MEMBERS])) {
eventHandlers.error?.(Errors.MISSING_KICK_MEMBERS);
throw new Error(Errors.MISSING_KICK_MEMBERS);
}
return RequestManager.delete(
@@ -134,9 +140,11 @@ export function editMember(
) {
if (options.nick) {
if (options.nick.length > 32) {
eventHandlers.error?.(Errors.NICKNAMES_MAX_LENGTH);
throw new Error(Errors.NICKNAMES_MAX_LENGTH);
}
if (!botHasPermission(guild.id, [Permissions.MANAGE_NICKNAMES])) {
eventHandlers.error?.(Errors.MISSING_MANAGE_NICKNAMES);
throw new Error(Errors.MISSING_MANAGE_NICKNAMES);
}
}
@@ -145,6 +153,7 @@ export function editMember(
options.roles &&
!botHasPermission(guild.id, [Permissions.MANAGE_ROLES])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_ROLES);
throw new Error(Errors.MISSING_MANAGE_ROLES);
}
@@ -153,6 +162,7 @@ export function editMember(
if (
!botHasPermission(guild.id, [Permissions.MUTE_MEMBERS])
) {
eventHandlers.error?.(Errors.MISSING_MUTE_MEMBERS);
throw new Error(Errors.MISSING_MUTE_MEMBERS);
}
}
@@ -161,6 +171,7 @@ export function editMember(
options.deaf &&
!botHasPermission(guild.id, [Permissions.DEAFEN_MEMBERS])
) {
eventHandlers.error?.(Errors.MISSING_DEAFEN_MEMBERS);
throw new Error(Errors.MISSING_DEAFEN_MEMBERS);
}
+9 -1
View File
@@ -1,6 +1,6 @@
import { Message, createMessage } from "../structures/message.ts";
import { delay } from "https://deno.land/std@0.50.0/async/delay.ts";
import { botID } from "../module/client.ts";
import { botID, eventHandlers } from "../module/client.ts";
import { hasChannelPermission } from "./channel.ts";
import { Permissions } from "../types/permission.ts";
import { Errors } from "../types/errors.ts";
@@ -27,6 +27,7 @@ export async function deleteMessage(
[Permissions.MANAGE_MESSAGES],
)
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_MESSAGES);
throw new Error(Errors.MISSING_MANAGE_MESSAGES);
}
}
@@ -45,6 +46,7 @@ export function pin(message: Message) {
message.guildID &&
!botHasPermission(message.guildID, [Permissions.MANAGE_MESSAGES])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_MESSAGES);
throw new Error(Errors.MISSING_MANAGE_MESSAGES);
}
RequestManager.put(endpoints.CHANNEL_MESSAGE(message.channelID, message.id));
@@ -56,6 +58,7 @@ export function unpin(message: Message) {
message.guildID &&
!botHasPermission(message.guildID, [Permissions.MANAGE_MESSAGES])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_MESSAGES);
throw new Error(Errors.MISSING_MANAGE_MESSAGES);
}
RequestManager.delete(
@@ -91,6 +94,7 @@ export function removeAllReactions(message: Message) {
message.guildID &&
!botHasPermission(message.guildID, [Permissions.MANAGE_MESSAGES])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_MESSAGES);
throw new Error(Errors.MISSING_MANAGE_MESSAGES);
}
RequestManager.delete(
@@ -104,6 +108,7 @@ export function removeReactionEmoji(message: Message, reaction: string) {
message.guildID &&
!botHasPermission(message.guildID, [Permissions.MANAGE_MESSAGES])
) {
eventHandlers.error?.(Errors.MISSING_MANAGE_MESSAGES);
throw new Error(Errors.MISSING_MANAGE_MESSAGES);
}
RequestManager.delete(
@@ -140,6 +145,7 @@ export async function editMessage(
if (
!botHasPermission(message.guildID, [Permissions.SEND_MESSAGES])
) {
eventHandlers.error?.(Errors.MISSING_SEND_MESSAGES);
throw new Error(Errors.MISSING_SEND_MESSAGES);
}
@@ -150,11 +156,13 @@ export async function editMessage(
[Permissions.SEND_TTS_MESSAGES],
)
) {
eventHandlers.error?.(Errors.MISSING_SEND_TTS_MESSAGE);
throw new Error(Errors.MISSING_SEND_TTS_MESSAGE);
}
}
if (content.content && content.content.length > 2000) {
eventHandlers.error?.(Errors.MESSAGE_MAX_LENGTH);
throw new Error(Errors.MESSAGE_MAX_LENGTH);
}
+9 -3
View File
@@ -141,7 +141,10 @@ async function runMethod(
json.retry_after ||
json.message === "You are being rate limited."
) {
if (retryCount > 10) throw new Error(Errors.RATE_LIMIT_RETRY_MAXED);
if (retryCount > 10) {
eventHandlers.error?.(Errors.RATE_LIMIT_RETRY_MAXED);
throw new Error(Errors.RATE_LIMIT_RETRY_MAXED);
}
await delay(json.retry_after);
return runMethod(
method,
@@ -184,12 +187,15 @@ function handleStatusCode(status: number) {
case HttpResponseCode.NotFound:
case HttpResponseCode.MethodNotAllowed:
case HttpResponseCode.TooManyRequests:
throw new Error(Errors.REQUEST_CLIENT_ERROR);
eventHandlers.error?.(Errors.REQUEST_CLIENT_ERROR) ;
throw new Error(Errors.REQUEST_CLIENT_ERROR);
case HttpResponseCode.GatewayUnavailable:
throw new Error(Errors.REQUEST_SERVER_ERROR);
eventHandlers.error?.(Errors.REQUEST_SERVER_ERROR) ;
throw new Error(Errors.REQUEST_SERVER_ERROR);
}
// left are all unknown
eventHandlers.error?.(Errors.REQUEST_UNKNOWN_ERROR);
throw new Error(Errors.REQUEST_UNKNOWN_ERROR);
}
+2
View File
@@ -21,6 +21,7 @@ import { Channel } from "../structures/channel.ts";
import { Guild } from "../structures/guild.ts";
import { Member } from "../structures/member.ts";
import { UserPayload } from "./guild.ts";
import { Errors } from "./errors.ts";
export interface Fulfilled_Client_Options {
token: string;
@@ -65,6 +66,7 @@ export interface EventHandlers {
channelUpdate?: (channel: Channel, cachedChannel: Channel) => unknown;
channelDelete?: (channel: Channel) => unknown;
debug?: (args: DebugArg) => unknown;
error?: (type: Errors) => unknown;
guildBanAdd?: (guild: Guild, user: Member | UserPayload) => unknown;
guildBanRemove?: (guild: Guild, user: Member | UserPayload) => unknown;
guildCreate?: (guild: Guild) => unknown;