/* eslint-disable @typescript-eslint/no-unused-vars */
import { formatError, Moderation, ModLogType, Time, type BushClientEvents, type PunishmentTypeDM, type ValueOf } from '#lib';
import {
ChannelType,
GuildMember,
PermissionFlagsBits,
type GuildChannelResolvable,
type GuildTextBasedChannel,
type Role
} from 'discord.js';
/* eslint-enable @typescript-eslint/no-unused-vars */
declare module 'discord.js' {
export interface GuildMember {
/**
* 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.
*/
bushPunishDM(
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 BushClientEvents.bushWarn}
*/
bushWarn(options: BushPunishmentOptions): 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 BushClientEvents.bushPunishRole}
*/
bushAddRole(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 BushClientEvents.bushPunishRoleRemove}
*/
bushRemoveRole(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 BushClientEvents.bushMute}
*/
bushMute(options: BushTimedPunishmentOptions): 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 BushClientEvents.bushUnmute}
*/
bushUnmute(options: BushPunishmentOptions): 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 BushClientEvents.bushKick}
*/
bushKick(options: BushPunishmentOptions): 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 BushClientEvents.bushBan}
*/
bushBan(options: BushBanOptions): Promise<Exclude<BanResponse, typeof banResponse['ALREADY_BANNED']>>;
/**
* Prevents a user from speaking in a channel.
* @param options Options for blocking the user.
*/
bushBlock(options: BlockOptions): Promise<BlockResponse>;
/**
* Allows a user to speak in a channel.
* @param options Options for unblocking the user.
*/
bushUnblock(options: UnblockOptions): Promise<UnblockResponse>;
/**
* Mutes a user using discord's timeout feature.
* @param options Options for timing out the user.
*/
bushTimeout(options: BushTimeoutOptions): Promise<TimeoutResponse