/* eslint-disable @typescript-eslint/no-unused-vars */
import {
formatError,
Moderation,
ModLogType,
TanzaniteClient,
Time,
type BotClientEvents,
type PunishmentTypeDM,
type ValueOf
} from '#lib';
import {
ChannelType,
GuildMember,
PermissionFlagsBits,
type GuildChannelResolvable,
type GuildTextBasedChannel,
type Role
} from 'discord.js';
import { TanzaniteEvent } from './BotClientEvents.js';
/* eslint-enable @typescript-eslint/no-unused-vars */
declare module 'discord.js' {
export interface GuildMember {
client: TanzaniteClient;
/**
* Send a punishment dm to the user.
* @param punishment The punishment that the user has received.
* @param reason The reason for the user's punishment.
* @param duration The duration of the punishment.
* @param modlog The modlog case id so the user can make an appeal.
* @param sendFooter Whether or not to send the guild's punishment footer with the dm.
* @returns Whether or not the dm was sent successfully.
*/
customPunishDM(
punishment: PunishmentTypeDM,
reason?: string | null,
duration?: number,
modlog?: string,
sendFooter?: boolean
): Promise<boolean>;
/**
* Warn the user, create a modlog entry, and send a dm to the user.
* @param options Options for warning the user.
* @returns An object with the result of the warning, and the case number of the warn.
* @emits {@link BotClientEvents.warnMember}
*/
customWarn(options: CustomPunishmentOptions): Promise<{ result: WarnResponse; caseNum: number | null }>;
/**
* Add a role to the user, if it is a punishment create a modlog entry, and create a punishment entry if it is temporary or a punishment.
* @param options Options for adding a role to the user.
* @returns A status message for adding the add.
* @emits {@link BotClientEvents.punishRole}
*/
customAddRole(options: AddRoleOptions): Promise<AddRoleResponse>;
/**
* Remove a role from the user, if it is a punishment create a modlog entry, and destroy a punishment entry if it was temporary or a punishment.
* @param options Options for removing a role from the user.
* @returns A status message for removing the role.
* @emits {@link BotClientEvents.punishRoleRemove}
*/
customRemoveRole(options: RemoveRoleOptions): Promise<RemoveRoleResponse>;
/**
* Mute the user, create a modlog entry, creates a punishment entry, and dms the user.
* @param options Options for muting the user.
* @returns A status message for muting the user.
* @emits {@link BotClientEvents.customMute}
*/
customMute(options: CustomTimedPunishmentOptions): Promise<MuteResponse>;
/**
* Unmute the user, create a modlog entry, remove the punishment entry, and dm the user.
* @param options Options for unmuting the user.
* @returns A status message for unmuting the user.
* @emits {@link BotClientEvents.customUnmute}
*/
customUnmute(options: CustomPunishmentOptions): Promise<UnmuteResponse>;
/**
* Kick the user, create a modlog entry, and dm the user.
* @param options Options for kicking the user.
* @returns A status message for kicking the user.
* @emits {@link BotClientEvents.customKick}
*/
customKick(options: CustomPunishmentOptions): Promise<KickResponse>;
/**
* Ban the user, create a modlog entry, create a punishment entry, and dm the user.
* @param options Options for banning the user.
* @returns A status message for banning the user.
* @emits {@link BotClientEvents.customBan}
*/
customBan(options: CustomBanOptions): Promise<Exclude<BanResponse, typeof banResponse['ALREADY_BANNED']>>;
/**
* Prevents a user from speaking in a channel.
* @param options Options for blocking the user.
*/
customBlock(options: BlockOptions): Promise<BlockResponse>;
/**
* Allows a user to speak in a channel.
* @param option