Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 66 additions & 16 deletions src/events/guildMemberUpdate.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,30 @@
import { EmbedBuilder, Events, GuildMember, TextChannel } from "discord.js";
import { Config } from "../libs/loadVariables.js";
import { registerBoost, removeBoost } from "../services/boosterService.js";
import { assignBoosterRole, removeBoosterRole, assignLevelRoles, removeAllLevelRoles, deleteCustomRole } from "../services/roleService.js";
import {
assignBoosterRole,
removeBoosterRole,
assignLevelRoles,
removeAllLevelRoles,
deleteCustomRole,
} from "../services/roleService.js";
import { logger } from "../libs/logger.js";

export default {
name: Events.GuildMemberUpdate,
async execute(oldMember: GuildMember, newMember: GuildMember, config: Config) {
async execute(
oldMember: GuildMember,
newMember: GuildMember,
config: Config,
) {
try {
if (oldMember.partial) oldMember = await oldMember.fetch();
if (newMember.partial) newMember = await newMember.fetch();
} catch (error) {
logger.error(
`Failed to fetch partials for user ${oldMember.user.username}`,
);
}
const wasBoostingBefore = oldMember.premiumSince !== null;
const isBoostingNow = newMember.premiumSince !== null;

Expand All @@ -14,55 +33,76 @@ export default {
} else if (wasBoostingBefore && !isBoostingNow) {
await onBoostEnd(newMember, config);
}
}
},
};

async function onBoostStart(member: GuildMember, config: Config): Promise<void> {
async function onBoostStart(
member: GuildMember,
config: Config,
): Promise<void> {
const guild = member.guild;

const record = await registerBoost(
member.id,
guild.id,
guild.name,
guild.iconURL()
guild.iconURL(),
);

if (!record) return;

await assignBoosterRole(member, config);
await assignLevelRoles(member, record.boostCounts ?? 1);

const greetChannel = guild.channels.cache.get(config.greetChannelId) as TextChannel | undefined;
const greetChannel = guild.channels.cache.get(config.greetChannelId) as
| TextChannel
| undefined;
if (greetChannel) {
const embed = new EmbedBuilder()
.setColor(0xf47fff)
.setTitle("New Server Boost! 🎉")
.setDescription(`${member} has boosted the server!`)
.addFields(
{ name: "Total Boosts", value: String(record.boostCounts ?? 1), inline: true },
{ name: "Member", value: member.user.tag, inline: true }
{
name: "Total Boosts",
value: String(record.boostCounts ?? 1),
inline: true,
},
{ name: "Member", value: member.user.tag, inline: true },
)
.setTimestamp();

await greetChannel.send({ embeds: [embed] });
}

const logChannel = guild.channels.cache.get(config.logChannelId) as TextChannel | undefined;
const logChannel = guild.channels.cache.get(config.logChannelId) as
| TextChannel
| undefined;
if (logChannel) {
const logEmbed = new EmbedBuilder()
.setColor(0x57f287)
.setTitle("Boost Started")
.addFields(
{ name: "User", value: `${member.user.tag} (${member.id})`, inline: false },
{ name: "Total Boost Count", value: String(record.boostCounts ?? 1), inline: true }
{
name: "User",
value: `${member.user.tag} (${member.id})`,
inline: false,
},
{
name: "Total Boost Count",
value: String(record.boostCounts ?? 1),
inline: true,
},
)
.setTimestamp();

await logChannel.send({ embeds: [logEmbed] });
}

try {
await member.send(`Thank you for boosting the server! You now have access to booster perks.`);
await member.send(
`Thank you for boosting the server! You now have access to booster perks.`,
);
} catch {
// DMs may be closed
}
Expand All @@ -78,17 +118,27 @@ async function onBoostEnd(member: GuildMember, config: Config): Promise<void> {
await removeAllLevelRoles(member);
await deleteCustomRole(guild, member.id);

const logChannel = guild.channels.cache.get(config.logChannelId) as TextChannel | undefined;
const logChannel = guild.channels.cache.get(config.logChannelId) as
| TextChannel
| undefined;
if (logChannel) {
const logEmbed = new EmbedBuilder()
.setColor(0xed4245)
.setTitle("Boost Ended")
.addFields(
{ name: "User", value: `${member.user.tag} (${member.id})`, inline: false },
{ name: "Historical Boost Count", value: String(result.boostCounts ?? 0), inline: true }
{
name: "User",
value: `${member.user.tag} (${member.id})`,
inline: false,
},
{
name: "Historical Boost Count",
value: String(result.boostCounts ?? 0),
inline: true,
},
)
.setTimestamp();

await logChannel.send({ embeds: [logEmbed] });
}
}
}
Loading