small changes to UI/UX
This commit is contained in:
@@ -7,7 +7,11 @@ const {
|
||||
const {
|
||||
reconcileUserAchievements,
|
||||
reconcileAllAchievements,
|
||||
auditProfileData
|
||||
grantMaintenanceReward,
|
||||
getMaintenanceRewardStatus,
|
||||
auditProfileData,
|
||||
DEFAULT_MAINTENANCE_REWARD_ID,
|
||||
DEFAULT_MAINTENANCE_REWARD_AMOUNT
|
||||
} = require(
|
||||
"../../utils/profileMaintenance"
|
||||
);
|
||||
@@ -67,6 +71,69 @@ module.exports = {
|
||||
.setDescription(
|
||||
"Audit stored profile statistics for inconsistencies"
|
||||
)
|
||||
)
|
||||
.addSubcommand(
|
||||
subcommand =>
|
||||
subcommand
|
||||
.setName(
|
||||
"maintenance-reward"
|
||||
)
|
||||
.setDescription(
|
||||
"Grant an idempotent maintenance reward to stored profile users"
|
||||
)
|
||||
.addStringOption(
|
||||
option =>
|
||||
option
|
||||
.setName(
|
||||
"reward-id"
|
||||
)
|
||||
.setDescription(
|
||||
`Unique reward ID; defaults to ${DEFAULT_MAINTENANCE_REWARD_ID}`
|
||||
)
|
||||
)
|
||||
.addIntegerOption(
|
||||
option =>
|
||||
option
|
||||
.setName(
|
||||
"amount"
|
||||
)
|
||||
.setDescription(
|
||||
`Cookies per player; defaults to ${DEFAULT_MAINTENANCE_REWARD_AMOUNT}`
|
||||
)
|
||||
.setMinValue(
|
||||
1
|
||||
)
|
||||
)
|
||||
.addBooleanOption(
|
||||
option =>
|
||||
option
|
||||
.setName(
|
||||
"dry-run"
|
||||
)
|
||||
.setDescription(
|
||||
"Preview recipients without granting Cookies"
|
||||
)
|
||||
)
|
||||
)
|
||||
.addSubcommand(
|
||||
subcommand =>
|
||||
subcommand
|
||||
.setName(
|
||||
"maintenance-status"
|
||||
)
|
||||
.setDescription(
|
||||
"Show maintenance reward claim status"
|
||||
)
|
||||
.addStringOption(
|
||||
option =>
|
||||
option
|
||||
.setName(
|
||||
"reward-id"
|
||||
)
|
||||
.setDescription(
|
||||
`Reward ID; defaults to ${DEFAULT_MAINTENANCE_REWARD_ID}`
|
||||
)
|
||||
)
|
||||
),
|
||||
|
||||
async execute(
|
||||
@@ -98,6 +165,7 @@ module.exports = {
|
||||
});
|
||||
|
||||
|
||||
try {
|
||||
if (
|
||||
subcommand ===
|
||||
"reconcile"
|
||||
@@ -228,6 +296,222 @@ module.exports = {
|
||||
}
|
||||
|
||||
|
||||
if (
|
||||
subcommand ===
|
||||
"maintenance-reward"
|
||||
) {
|
||||
const rewardId =
|
||||
interaction.options.getString(
|
||||
"reward-id"
|
||||
)
|
||||
??
|
||||
DEFAULT_MAINTENANCE_REWARD_ID;
|
||||
|
||||
|
||||
const amount =
|
||||
interaction.options.getInteger(
|
||||
"amount"
|
||||
)
|
||||
??
|
||||
DEFAULT_MAINTENANCE_REWARD_AMOUNT;
|
||||
|
||||
|
||||
/*
|
||||
* Safer admin default:
|
||||
*
|
||||
* If omitted, maintenance-reward previews
|
||||
* instead of paying immediately.
|
||||
*
|
||||
* Pass dry-run:false explicitly to execute.
|
||||
*/
|
||||
|
||||
const dryRun =
|
||||
interaction.options.getBoolean(
|
||||
"dry-run"
|
||||
)
|
||||
??
|
||||
true;
|
||||
|
||||
|
||||
const summary =
|
||||
await grantMaintenanceReward({
|
||||
guildId:
|
||||
interaction.guildId,
|
||||
|
||||
rewardId,
|
||||
|
||||
amount,
|
||||
|
||||
dryRun
|
||||
});
|
||||
|
||||
|
||||
return interaction.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle(
|
||||
dryRun
|
||||
? "🧪 Maintenance Reward Dry Run"
|
||||
: "🎁 Maintenance Reward"
|
||||
)
|
||||
.setDescription(
|
||||
dryRun
|
||||
? "No Cookies were granted. Run again with `dry-run:false` to execute this reward."
|
||||
: `Maintenance compensation **${rewardId}** has been processed.`
|
||||
)
|
||||
.addFields(
|
||||
{
|
||||
name:
|
||||
"Reward ID",
|
||||
|
||||
value:
|
||||
`\`${summary.rewardId}\``,
|
||||
|
||||
inline:
|
||||
false
|
||||
},
|
||||
{
|
||||
name:
|
||||
"Per player",
|
||||
|
||||
value:
|
||||
`**${summary.amount.toLocaleString()} 🍪**`,
|
||||
|
||||
inline:
|
||||
true
|
||||
},
|
||||
{
|
||||
name:
|
||||
"Stored profiles",
|
||||
|
||||
value:
|
||||
`**${summary.users}**`,
|
||||
|
||||
inline:
|
||||
true
|
||||
},
|
||||
{
|
||||
name:
|
||||
dryRun
|
||||
? "Would receive"
|
||||
: "Granted",
|
||||
|
||||
value:
|
||||
`**${dryRun ? summary.eligible : summary.granted}**`,
|
||||
|
||||
inline:
|
||||
true
|
||||
},
|
||||
{
|
||||
name:
|
||||
"Already claimed",
|
||||
|
||||
value:
|
||||
`**${summary.alreadyClaimed}**`,
|
||||
|
||||
inline:
|
||||
true
|
||||
},
|
||||
{
|
||||
name:
|
||||
"Failed",
|
||||
|
||||
value:
|
||||
`**${summary.failed}**`,
|
||||
|
||||
inline:
|
||||
true
|
||||
}
|
||||
)
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
if (
|
||||
subcommand ===
|
||||
"maintenance-status"
|
||||
) {
|
||||
const rewardId =
|
||||
interaction.options.getString(
|
||||
"reward-id"
|
||||
)
|
||||
??
|
||||
DEFAULT_MAINTENANCE_REWARD_ID;
|
||||
|
||||
|
||||
const status =
|
||||
await getMaintenanceRewardStatus({
|
||||
guildId:
|
||||
interaction.guildId,
|
||||
|
||||
rewardId
|
||||
});
|
||||
|
||||
|
||||
return interaction.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle(
|
||||
"🎁 Maintenance Reward Status"
|
||||
)
|
||||
.addFields(
|
||||
{
|
||||
name:
|
||||
"Reward ID",
|
||||
|
||||
value:
|
||||
`\`${status.rewardId}\``,
|
||||
|
||||
inline:
|
||||
false
|
||||
},
|
||||
{
|
||||
name:
|
||||
"Default amount",
|
||||
|
||||
value:
|
||||
`**${status.amount.toLocaleString()} 🍪**`,
|
||||
|
||||
inline:
|
||||
true
|
||||
},
|
||||
{
|
||||
name:
|
||||
"Stored profiles",
|
||||
|
||||
value:
|
||||
`**${status.users}**`,
|
||||
|
||||
inline:
|
||||
true
|
||||
},
|
||||
{
|
||||
name:
|
||||
"Claimed",
|
||||
|
||||
value:
|
||||
`**${status.claimed}**`,
|
||||
|
||||
inline:
|
||||
true
|
||||
},
|
||||
{
|
||||
name:
|
||||
"Remaining",
|
||||
|
||||
value:
|
||||
`**${status.remaining}**`,
|
||||
|
||||
inline:
|
||||
true
|
||||
}
|
||||
)
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
const audit =
|
||||
await auditProfileData(
|
||||
interaction.guildId
|
||||
@@ -321,4 +605,25 @@ module.exports = {
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
catch (error) {
|
||||
console.error(
|
||||
`[ProfileAdmin] ${subcommand} failed:`,
|
||||
error
|
||||
);
|
||||
|
||||
|
||||
return interaction.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle(
|
||||
"❌ Profile Admin Error"
|
||||
)
|
||||
.setDescription(
|
||||
"The maintenance action failed. Check the bot logs for details."
|
||||
)
|
||||
]
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -2929,6 +2929,10 @@ function formatCategoryName(
|
||||
"🏅 Other",
|
||||
activity:
|
||||
"📅 Activity",
|
||||
vault:
|
||||
"🏦 Vault",
|
||||
victim:
|
||||
"🎯 Victim",
|
||||
};
|
||||
|
||||
return labels[category] ??
|
||||
|
||||
Reference in New Issue
Block a user