UserUtil: Add getPatreonPerks helper

and patreon debug command.
This commit is contained in:
2023-03-12 20:35:14 +01:00
parent 25aa6b50d6
commit 397ebde3e5
3 changed files with 40 additions and 1 deletions

View File

@@ -2,6 +2,7 @@ const { SlashCommandBuilder, ComponentType, ActionRowBuilder, ButtonBuilder, But
const { customAlphabet } = require("nanoid"); const { customAlphabet } = require("nanoid");
const { Card, User } = require("../models"); const { Card, User } = require("../models");
const { UserUtils, CardUtils, GeneralUtils } = require("../util"); const { UserUtils, CardUtils, GeneralUtils } = require("../util");
const { PATREON } = require("../config/constants");
const stores = require("../stores"); const stores = require("../stores");
require('dotenv').config(); require('dotenv').config();
@@ -26,6 +27,7 @@ module.exports = {
{ name: 'add_secondary', value: 'add_secondary' }, { name: 'add_secondary', value: 'add_secondary' },
{ name: 'toggle_maintenance', value: 'toggle_maintenance' }, { name: 'toggle_maintenance', value: 'toggle_maintenance' },
{ name: 'store', value: 'store' }, { name: 'store', value: 'store' },
{ name: 'patreon', value: 'patreon' }
) )
) )
.addStringOption((option) => .addStringOption((option) =>
@@ -152,6 +154,15 @@ module.exports = {
ephemeral: false ephemeral: false
}); });
break; break;
case "patreon":
interaction.editReply({
content: `${JSON.stringify(user)}`,
ephemeral: false
});
let patreon = await UserUtils.getPatreonPerks(interaction.client, interaction.member);
interaction.channel.send(JSON.stringify(patreon));
break;
default: default:
interaction.editReply({ interaction.editReply({
content: `Your permission level is ${await UserUtils.getPermissionLevel(interaction.member)}`, content: `Your permission level is ${await UserUtils.getPermissionLevel(interaction.member)}`,

View File

@@ -63,7 +63,8 @@ const QUALITY_VALUES = {
} }
const PATREON = { const PATREON = {
tiers: { roleServer : '441300798819794944',
tiers : {
1 : { 1 : {
modifiers: { modifiers: {
drops: 1, drops: 1,

View File

@@ -1,5 +1,6 @@
const { User, Guild } = require("../models"); const { User, Guild } = require("../models");
const GeneralUtils = require("./general"); const GeneralUtils = require("./general");
const { PATREON } = require("../config/constants");
module.exports = { module.exports = {
name: "UserUtils", name: "UserUtils",
@@ -102,5 +103,31 @@ module.exports = {
//Regular User //Regular User
return 0; return 0;
},
getPatreonPerks: async function(client, member) {
/** Returns the users highest Patreon tier and its associated perks
* client: Discord client instance available via interaction.client
* member: Discord member instance
*
* returns
* tier: 0 if not subscribed
* 1-n as per role mapping in the DB (e.g. {"1083018874263453868":1,"1083018984921759744":2})
* perks: modifiers associated with the tier
*/
let patreonRoles = await GeneralUtils.getBotProperty("patreonTierRoles");
patreonRoles = JSON.parse(patreonRoles);
const guild = await client.guilds.fetch(PATREON.roleServer);
const guildMember = await guild.members.fetch(member.id);
let highestRole = 0;
for (const [role, tier] of Object.entries(patreonRoles)) {
const matchedRole = guildMember.roles.cache.get(role);
if(matchedRole) {
highestRole = Math.max(highestRole, tier);
}
}
let perks = PATREON.tiers[highestRole];
return { "tier": highestRole, "perks": perks };
} }
} }