changed achievment to work without followup

This commit is contained in:
DeSqBlocki
2026-08-23 01:19:22 +02:00
parent 338b32430d
commit 6a519f3a2d
+48 -8
View File
@@ -738,6 +738,7 @@ async function unlockAchievement(
await sendAchievementNotification(
interaction,
userId,
definition
);
@@ -775,24 +776,63 @@ function readStatValue(
async function sendAchievementNotification(
interaction,
userId,
achievement
) {
try {
await interaction.followUp({
embeds: [
const embed =
new EmbedBuilder()
.setTitle("🏆 Achievement Unlocked!")
.setTitle(
"🏆 Achievement Unlocked!"
)
.setDescription(
[
`<@${userId}> earned an achievement!`,
"",
`**${achievement.name}**`,
achievement.description
`${achievement.emoji ?? "🏆"} **${achievement.name}**`,
"",
achievement.description ??
achievement.requirement ??
"Achievement unlocked."
].join("\n")
)
]
.setTimestamp();
try {
/*
* If the interaction has already been acknowledged,
* followUp is safe.
*/
if (
interaction.replied ||
interaction.deferred
) {
return await interaction.followUp({
embeds: [embed]
});
} catch { }
}
/*
* Otherwise don't consume the interaction's primary
* reply. The game/button handler still needs it.
*
* Send the public achievement announcement directly
* to the channel instead.
*/
if (interaction.channel) {
return await interaction.channel.send({
embeds: [embed]
});
}
}
catch (error) {
console.error(
`[Achievement] Failed to announce ${achievement.achievementId} for ${userId}:`,
error
);
}
return null;
}
async function evaluateBadges(