aboutsummaryrefslogtreecommitdiff
path: root/src/lib/extensions/discord.js/BushGuildMember.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/extensions/discord.js/BushGuildMember.ts')
-rw-r--r--src/lib/extensions/discord.js/BushGuildMember.ts454
1 files changed, 276 insertions, 178 deletions
diff --git a/src/lib/extensions/discord.js/BushGuildMember.ts b/src/lib/extensions/discord.js/BushGuildMember.ts
index ab4eee4..4dd1a5d 100644
--- a/src/lib/extensions/discord.js/BushGuildMember.ts
+++ b/src/lib/extensions/discord.js/BushGuildMember.ts
@@ -105,96 +105,140 @@ export class BushGuildMember extends GuildMember {
}
public async warn(options: BushPunishmentOptions): Promise<{ result: WarnResponse | null; caseNum: number | null }> {
+ let caseID: string | undefined = undefined;
+ let dmSuccessEvent: boolean | undefined = undefined;
const moderator = (await util.resolveNonCachedUser(options.moderator ?? this.guild.me))!;
- // add modlog entry
- const result = await util.createModLogEntry(
- {
- type: ModLogType.WARN,
- user: this,
- moderator: moderator.id,
- reason: options.reason,
- guild: this.guild
- },
- true
- );
- if (!result || !result.log) return { result: 'error creating modlog entry', caseNum: null };
-
- // dm user
- const dmSuccess = await this.punishDM('warned', options.reason);
- if (!dmSuccess) return { result: 'failed to dm', caseNum: result.caseNum };
-
- return { result: 'success', caseNum: result.caseNum };
+ const ret = await (async () => {
+ // add modlog entry
+ const result = await util.createModLogEntry(
+ {
+ type: ModLogType.WARN,
+ user: this,
+ moderator: moderator.id,
+ reason: options.reason,
+ guild: this.guild
+ },
+ true
+ );
+ caseID = result.log?.id;
+ if (!result || !result.log) return { result: 'error creating modlog entry', caseNum: null };
+
+ // dm user
+ const dmSuccess = await this.punishDM('warned', options.reason);
+ dmSuccessEvent = dmSuccess;
+ if (!dmSuccess) return { result: 'failed to dm', caseNum: result.caseNum };
+
+ return { result: 'success', caseNum: result.caseNum };
+ })();
+ if (!['error creating modlog entry'].includes(ret.result))
+ client.emit('bushWarn', this, moderator, this.guild, options.reason ?? undefined, caseID!, dmSuccessEvent!);
+ return ret as { result: WarnResponse | null; caseNum: number | null };
}
public async addRole(options: AddRoleOptions): Promise<AddRoleResponse> {
const ifShouldAddRole = this.#checkIfShouldAddRole(options.role);
if (ifShouldAddRole !== true) return ifShouldAddRole;
+ let caseID: string | undefined = undefined;
const moderator = (await util.resolveNonCachedUser(options.moderator ?? this.guild.me))!;
- if (options.addToModlog || options.duration) {
- const { log: modlog } = options.addToModlog
- ? await util.createModLogEntry({
- type: options.duration ? ModLogType.TEMP_PUNISHMENT_ROLE : ModLogType.PERM_PUNISHMENT_ROLE,
- guild: this.guild,
- moderator: moderator.id,
- user: this,
- reason: 'N/A'
- })
- : { log: null };
-
- if (!modlog && options.addToModlog) return 'error creating modlog entry';
-
+ const ret = await (async () => {
if (options.addToModlog || options.duration) {
- const punishmentEntrySuccess = await util.createPunishmentEntry({
- type: 'role',
- user: this,
- guild: this.guild,
- modlog: modlog?.id ?? undefined,
- duration: options.duration,
- extraInfo: options.role.id
- });
- if (!punishmentEntrySuccess) return 'error creating role entry';
+ const { log: modlog } = options.addToModlog
+ ? await util.createModLogEntry({
+ type: options.duration ? ModLogType.TEMP_PUNISHMENT_ROLE : ModLogType.PERM_PUNISHMENT_ROLE,
+ guild: this.guild,
+ moderator: moderator.id,
+ user: this,
+ reason: 'N/A'
+ })
+ : { log: null };
+ caseID = modlog?.id;
+
+ if (!modlog && options.addToModlog) return 'error creating modlog entry';
+
+ if (options.addToModlog || options.duration) {
+ const punishmentEntrySuccess = await util.createPunishmentEntry({
+ type: 'role',
+ user: this,
+ guild: this.guild,
+ modlog: modlog?.id ?? undefined,
+ duration: options.duration,
+ extraInfo: options.role.id
+ });
+ if (!punishmentEntrySuccess) return 'error creating role entry';
+ }
}
- }
-
- const removeRoleSuccess = await this.roles.add(options.role, `${moderator.tag}`);
- if (!removeRoleSuccess) return 'error adding role';
- return 'success';
+ const removeRoleSuccess = await this.roles.add(options.role, `${moderator.tag}`);
+ if (!removeRoleSuccess) return 'error adding role';
+
+ return 'success';
+ })();
+ if (!['error adding role', 'error creating modlog entry', 'error creating role entry'].includes(ret) && options.addToModlog)
+ client.emit(
+ 'bushPunishRole',
+ this,
+ moderator,
+ this.guild,
+ options.reason ?? undefined,
+ caseID!,
+ options.duration ?? 0,
+ options.role as BushRole
+ );
+ return ret;
}
public async removeRole(options: RemoveRoleOptions): Promise<RemoveRoleResponse> {
const ifShouldAddRole = this.#checkIfShouldAddRole(options.role);
if (ifShouldAddRole !== true) return ifShouldAddRole;
+ let caseID: string | undefined = undefined;
const moderator = (await util.resolveNonCachedUser(options.moderator ?? this.guild.me))!;
- if (options.addToModlog) {
- const { log: modlog } = await util.createModLogEntry({
- type: ModLogType.PERM_PUNISHMENT_ROLE,
- guild: this.guild,
- moderator: moderator.id,
- user: this,
- reason: 'N/A'
- });
-
- if (!modlog) return 'error creating modlog entry';
+ const ret = await (async () => {
+ if (options.addToModlog) {
+ const { log: modlog } = await util.createModLogEntry({
+ type: ModLogType.PERM_PUNISHMENT_ROLE,
+ guild: this.guild,
+ moderator: moderator.id,
+ user: this,
+ reason: 'N/A'
+ });
- const punishmentEntrySuccess = await util.removePunishmentEntry({
- type: 'role',
- user: this,
- guild: this.guild
- });
+ if (!modlog) return 'error creating modlog entry';
+ caseID = modlog.id;
- if (!punishmentEntrySuccess) return 'error removing role entry';
- }
+ const punishmentEntrySuccess = await util.removePunishmentEntry({
+ type: 'role',
+ user: this,
+ guild: this.guild
+ });
- const removeRoleSuccess = await this.roles.remove(options.role, `${moderator.tag}`);
- if (!removeRoleSuccess) return 'error removing role';
+ if (!punishmentEntrySuccess) return 'error removing role entry';
+ }
- return 'success';
+ const removeRoleSuccess = await this.roles.remove(options.role, `${moderator.tag}`);
+ if (!removeRoleSuccess) return 'error removing role';
+
+ return 'success';
+ })();
+
+ if (
+ !['error removing role', 'error creating modlog entry', 'error removing role entry'].includes(ret) &&
+ options.addToModlog
+ )
+ client.emit(
+ 'bushPunishRoleRemove',
+ this,
+ moderator,
+ this.guild,
+ caseID!,
+ options.reason ?? undefined,
+ options.role as BushRole
+ );
+ return ret;
}
#checkIfShouldAddRole(role: BushRole | Role): true | 'user hierarchy' | 'role managed' | 'client hierarchy' {
@@ -217,47 +261,66 @@ export class BushGuildMember extends GuildMember {
if (!muteRole) return 'invalid mute role';
if (muteRole.position >= this.guild.me!.roles.highest.position || muteRole.managed) return 'mute role not manageable';
+ let caseID: string | undefined = undefined;
+ let dmSuccessEvent: boolean | undefined = undefined;
const moderator = (await util.resolveNonCachedUser(options.moderator ?? this.guild.me))!;
- // add role
- const muteSuccess = await this.roles
- .add(muteRole, `[Mute] ${moderator.tag} | ${options.reason ?? 'No reason provided.'}`)
- .catch(async (e) => {
- await client.console.warn('muteRoleAddError', e);
- client.console.debug(e);
- return false;
- });
- if (!muteSuccess) return 'error giving mute role';
-
- // add modlog entry
- const { log: modlog } = await util.createModLogEntry({
- type: options.duration ? ModLogType.TEMP_MUTE : ModLogType.PERM_MUTE,
- user: this,
- moderator: moderator.id,
- reason: options.reason,
- duration: options.duration,
- guild: this.guild
- });
-
- if (!modlog) return 'error creating modlog entry';
-
- // add punishment entry so they can be unmuted later
- const punishmentEntrySuccess = await util.createPunishmentEntry({
- type: 'mute',
- user: this,
- guild: this.guild,
- duration: options.duration,
- modlog: modlog.id
- });
+ const ret = await (async () => {
+ // add role
+ const muteSuccess = await this.roles
+ .add(muteRole, `[Mute] ${moderator.tag} | ${options.reason ?? 'No reason provided.'}`)
+ .catch(async (e) => {
+ await client.console.warn('muteRoleAddError', e);
+ client.console.debug(e);
+ return false;
+ });
+ if (!muteSuccess) return 'error giving mute role';
- if (!punishmentEntrySuccess) return 'error creating mute entry';
+ // add modlog entry
+ const { log: modlog } = await util.createModLogEntry({
+ type: options.duration ? ModLogType.TEMP_MUTE : ModLogType.PERM_MUTE,
+ user: this,
+ moderator: moderator.id,
+ reason: options.reason,
+ duration: options.duration,
+ guild: this.guild
+ });
- // dm user
- const dmSuccess = await this.punishDM('muted', options.reason, options.duration ?? 0);
+ if (!modlog) return 'error creating modlog entry';
+ caseID = modlog.id;
- if (!dmSuccess) return 'failed to dm';
+ // add punishment entry so they can be unmuted later
+ const punishmentEntrySuccess = await util.createPunishmentEntry({
+ type: 'mute',
+ user: this,
+ guild: this.guild,
+ duration: options.duration,
+ modlog: modlog.id
+ });
- return 'success';
+ if (!punishmentEntrySuccess) return 'error creating mute entry';
+
+ // dm user
+ const dmSuccess = await this.punishDM('muted', options.reason, options.duration ?? 0);
+ dmSuccessEvent = dmSuccess;
+
+ if (!dmSuccess) return 'failed to dm';
+
+ return 'success';
+ })();
+
+ if (!['error giving mute role', 'error creating modlog entry', 'error creating mute entry'].includes(ret))
+ client.emit(
+ 'bushMute',
+ this,
+ moderator,
+ this.guild,
+ options.reason ?? undefined,
+ caseID!,
+ options.duration ?? 0,
+ dmSuccessEvent!
+ );
+ return ret;
}
public async unmute(options: BushPunishmentOptions): Promise<UnmuteResponse> {
@@ -269,110 +332,145 @@ export class BushGuildMember extends GuildMember {
if (!muteRole) return 'invalid mute role';
if (muteRole.position >= this.guild.me!.roles.highest.position || muteRole.managed) return 'mute role not manageable';
+ let caseID: string | undefined = undefined;
+ let dmSuccessEvent: boolean | undefined = undefined;
const moderator = (await util.resolveNonCachedUser(options.moderator ?? this.guild.me))!;
- //remove role
- const muteSuccess = await this.roles
- .remove(muteRole, `[Unmute] ${moderator.tag} | ${options.reason ?? 'No reason provided.'}`)
- .catch(async (e) => {
- await client.console.warn('muteRoleAddError', e?.stack || e);
- return false;
+ const ret = await (async () => {
+ //remove role
+ const muteSuccess = await this.roles
+ .remove(muteRole, `[Unmute] ${moderator.tag} | ${options.reason ?? 'No reason provided.'}`)
+ .catch(async (e) => {
+ await client.console.warn('muteRoleAddError', e?.stack || e);
+ return false;
+ });
+ if (!muteSuccess) return 'error removing mute role';
+
+ //remove modlog entry
+ const { log: modlog } = await util.createModLogEntry({
+ type: ModLogType.UNMUTE,
+ user: this,
+ moderator: moderator.id,
+ reason: options.reason,
+ guild: this.guild
});
- if (!muteSuccess) return 'error removing mute role';
- //remove modlog entry
- const { log: modlog } = await util.createModLogEntry({
- type: ModLogType.UNMUTE,
- user: this,
- moderator: moderator.id,
- reason: options.reason,
- guild: this.guild
- });
+ if (!modlog) return 'error creating modlog entry';
+ caseID = modlog.id;
- if (!modlog) return 'error creating modlog entry';
+ // remove mute entry
+ const removePunishmentEntrySuccess = await util.removePunishmentEntry({
+ type: 'mute',
+ user: this,
+ guild: this.guild
+ });
- // remove mute entry
- const removePunishmentEntrySuccess = await util.removePunishmentEntry({
- type: 'mute',
- user: this,
- guild: this.guild
- });
+ if (!removePunishmentEntrySuccess) return 'error removing mute entry';
- if (!removePunishmentEntrySuccess) return 'error removing mute entry';
+ //dm user
+ const dmSuccess = await this.punishDM('unmuted', options.reason, undefined, false);
+ dmSuccessEvent = dmSuccess;
- //dm user
- const dmSuccess = await this.punishDM('unmuted', options.reason, undefined, false);
+ if (!dmSuccess) return 'failed to dm';
- if (!dmSuccess) return 'failed to dm';
+ return 'success';
+ })();
- return 'success';
+ if (!['error removing mute role', 'error creating modlog entry', 'error removing mute entry'].includes(ret))
+ client.emit('bushUnmute', this, moderator, this.guild, options.reason ?? undefined, caseID!, dmSuccessEvent!);
+ return ret;
}
public async bushKick(options: BushPunishmentOptions): Promise<KickResponse> {
// checks
if (!this.guild.me?.permissions.has('KICK_MEMBERS') || !this.kickable) return 'missing permissions';
+ let caseID: string | undefined = undefined;
+ let dmSuccessEvent: boolean | undefined = undefined;
const moderator = (await util.resolveNonCachedUser(options.moderator ?? this.guild.me))!;
+ const ret = await (async () => {
+ // dm user
+ const dmSuccess = await this.punishDM('kicked', options.reason);
+ dmSuccessEvent = dmSuccess;
- // dm user
- const dmSuccess = await this.punishDM('kicked', options.reason);
-
- // kick
- const kickSuccess = await this.kick(`${moderator?.tag} | ${options.reason ?? 'No reason provided.'}`).catch(() => false);
- if (!kickSuccess) return 'error kicking';
-
- // add modlog entry
- const { log: modlog } = await util.createModLogEntry({
- type: ModLogType.KICK,
- user: this,
- moderator: moderator.id,
- reason: options.reason,
- guild: this.guild
- });
- if (!modlog) return 'error creating modlog entry';
- if (!dmSuccess) return 'failed to dm';
- return 'success';
+ // kick
+ const kickSuccess = await this.kick(`${moderator?.tag} | ${options.reason ?? 'No reason provided.'}`).catch(() => false);
+ if (!kickSuccess) return 'error kicking';
+
+ // add modlog entry
+ const { log: modlog } = await util.createModLogEntry({
+ type: ModLogType.KICK,
+ user: this,
+ moderator: moderator.id,
+ reason: options.reason,
+ guild: this.guild
+ });
+ if (!modlog) return 'error creating modlog entry';
+ caseID = modlog.id;
+ if (!dmSuccess) return 'failed to dm';
+ return 'success';
+ })();
+ if (!['error kicking', 'error creating modlog entry'].includes(ret))
+ client.emit('bushKick', this, moderator, this.guild, options.reason ?? undefined, caseID!, dmSuccessEvent!);
+ return ret;
}
public async bushBan(options: BushBanOptions): Promise<BanResponse> {
// checks
if (!this.guild.me!.permissions.has('BAN_MEMBERS') || !this.bannable) return 'missing permissions';
+ let caseID: string | undefined = undefined;
+ let dmSuccessEvent: boolean | undefined = undefined;
const moderator = (await util.resolveNonCachedUser(options.moderator ?? this.guild.me))!;
+ const ret = await (async () => {
+ // dm user
+ const dmSuccess = await this.punishDM('banned', options.reason, options.duration ?? 0);
+ dmSuccessEvent = dmSuccess;
+
+ // ban
+ const banSuccess = await this.ban({
+ reason: `${moderator.tag} | ${options.reason ?? 'No reason provided.'}`,
+ days: options.deleteDays
+ }).catch(() => false);
+ if (!banSuccess) return 'error banning';
+
+ // add modlog entry
+ const { log: modlog } = await util.createModLogEntry({
+ type: options.duration ? ModLogType.TEMP_BAN : ModLogType.PERM_BAN,
+ user: this,
+ moderator: moderator.id,
+ reason: options.reason,
+ duration: options.duration,
+ guild: this.guild
+ });
+ if (!modlog) return 'error creating modlog entry';
+ caseID = modlog.id;
- // dm user
- const dmSuccess = await this.punishDM('banned', options.reason, options.duration ?? 0);
-
- // ban
- const banSuccess = await this.ban({
- reason: `${moderator.tag} | ${options.reason ?? 'No reason provided.'}`,
- days: options.deleteDays
- }).catch(() => false);
- if (!banSuccess) return 'error banning';
-
- // add modlog entry
- const { log: modlog } = await util.createModLogEntry({
- type: options.duration ? ModLogType.TEMP_BAN : ModLogType.PERM_BAN,
- user: this,
- moderator: moderator.id,
- reason: options.reason,
- duration: options.duration,
- guild: this.guild
- });
- if (!modlog) return 'error creating modlog entry';
-
- // add punishment entry so they can be unbanned later
- const punishmentEntrySuccess = await util.createPunishmentEntry({
- type: 'ban',
- user: this,
- guild: this.guild,
- duration: options.duration,
- modlog: modlog.id
- });
- if (!punishmentEntrySuccess) return 'error creating ban entry';
-
- if (!dmSuccess) return 'failed to dm';
- return 'success';
+ // add punishment entry so they can be unbanned later
+ const punishmentEntrySuccess = await util.createPunishmentEntry({
+ type: 'ban',
+ user: this,
+ guild: this.guild,
+ duration: options.duration,
+ modlog: modlog.id
+ });
+ if (!punishmentEntrySuccess) return 'error creating ban entry';
+
+ if (!dmSuccess) return 'failed to dm';
+ return 'success';
+ })();
+ if (!['error banning', 'error creating modlog entry', 'error creating ban entry'].includes(ret))
+ client.emit(
+ 'bushBan',
+ this,
+ moderator,
+ this.guild,
+ options.reason ?? undefined,
+ caseID!,
+ options.duration ?? 0,
+ dmSuccessEvent!
+ );
+ return ret;
}
public get isOwner(): boolean {