blob: d170396ab0d05f6ea4de6464a2999f40433b60fc [file] [log] [blame]
import { purgeByUser } from "../actions/tickets/delete.js";
import { callback as statsChannelRemove } from "../reflex/statsChannelUpdate.js";
export const event = "guildMemberRemove";
export async function callback(client, member) {
purgeByUser(member.id, member.guild);
await statsChannelRemove(client, member);
const { getAuditLog, log, NucleusColors, entry, renderUser, renderDelta } =
member.client.logger;
const auditLog = await getAuditLog(member.guild, "MEMBER_KICK");
const audit = auditLog.entries
.filter((entry) => entry.target.id === member.id)
.first();
let type = "leave";
if (audit) {
if (audit.executor.id === client.user.id) return;
if (audit.createdAt - 100 >= new Date().getTime()) {
type = "kick";
}
}
let data;
if (type === "kick") {
await client.database.history.create(
"kick",
member.guild.id,
member.user,
audit.executor,
audit.reason
);
data = {
meta: {
type: "memberKick",
displayName: "Member Kicked",
calculateType: "guildMemberPunish",
color: NucleusColors.red,
emoji: "PUNISH.KICK.RED",
timestamp: new Date().getTime()
},
list: {
memberId: entry(member.id, `\`${member.id}\``),
name: entry(member.id, renderUser(member.user)),
joined: entry(member.joinedAt, renderDelta(member.joinedAt)),
kicked: entry(
new Date().getTime(),
renderDelta(new Date().getTime())
),
kickedBy: entry(audit.executor.id, renderUser(audit.executor)),
reason: entry(
audit.reason,
audit.reason
? `\n> ${audit.reason}`
: "*No reason provided.*"
),
accountCreated: entry(
member.user.createdAt,
renderDelta(member.user.createdAt)
),
serverMemberCount: member.guild.memberCount
},
hidden: {
guild: member.guild.id
}
};
} else {
await client.database.history.create(
"leave",
member.guild.id,
member.user,
null,
null
);
data = {
meta: {
type: "memberLeave",
displayName: "Member Left",
calculateType: "guildMemberUpdate",
color: NucleusColors.red,
emoji: "MEMBER." + (member.bot ? "BOT." : "") + "LEAVE",
timestamp: new Date().getTime()
},
list: {
memberId: entry(member.id, `\`${member.id}\``),
name: entry(member.id, renderUser(member.user)),
joined: entry(
member.joinedTimestamp,
renderDelta(member.joinedAt)
),
left: entry(
new Date().getTime(),
renderDelta(new Date().getTime())
),
accountCreated: entry(
member.user.createdAt,
renderDelta(member.user.createdAt)
),
serverMemberCount: member.guild.memberCount
},
hidden: {
guild: member.guild.id
}
};
}
log(data);
}