User/Debug/Profile: Add primary and secondary currency

This commit is contained in:
2022-09-26 13:15:40 +02:00
parent d8905a279a
commit bbbcaaaf29
5 changed files with 90 additions and 1 deletions

View File

@@ -21,6 +21,8 @@ module.exports = {
{ name: 'bot', value: 'bot' }, { name: 'bot', value: 'bot' },
{ name: 'reset_cd', value: 'reset_cd' }, { name: 'reset_cd', value: 'reset_cd' },
{ name: 'add_xp', value: 'add_xp' }, { name: 'add_xp', value: 'add_xp' },
{ name: 'add_primary', value: 'add_primary' },
{ name: 'add_secondary', value: 'add_secondary' },
{ name: 'toggle_maintenance', value: 'toggle_maintenance' }, { name: 'toggle_maintenance', value: 'toggle_maintenance' },
) )
) )
@@ -120,6 +122,20 @@ module.exports = {
ephemeral: false ephemeral: false
}); });
break; break;
case "add_primary":
await extUser.addPrimaryCurrency(interaction.options.getString("value"), `Debug command ran by ${interaction.member.displayName}`);
interaction.editReply({
content: `Added ${interaction.options.getString("value")} Primary to <@${extUser.discordId}>`,
ephemeral: false
});
break;
case "add_secondary":
await extUser.addSecondaryCurrency(interaction.options.getString("value"), `Debug command ran by ${interaction.member.displayName}`);
interaction.editReply({
content: `Added ${interaction.options.getString("value")} Secondary to <@${extUser.discordId}>`,
ephemeral: false
});
break;
case "toggle_maintenance": case "toggle_maintenance":
let maintenance = await GeneralUtils.getBotProperty("maintenance"); let maintenance = await GeneralUtils.getBotProperty("maintenance");
await GeneralUtils.setBotProperty("maintenance", !maintenance); await GeneralUtils.setBotProperty("maintenance", !maintenance);

View File

@@ -3,6 +3,7 @@ const { Card, User, Character } = require("../models");
const { UserUtils, Compositing, Rendering } = require("../util"); const { UserUtils, Compositing, Rendering } = require("../util");
const axios = require("axios"); const axios = require("axios");
const sharp = require("sharp"); const sharp = require("sharp");
const { CURRENCY_NAMES } = require("../config/constants");
const fs = require('fs'); const fs = require('fs');
const pageSize = 8; const pageSize = 8;
@@ -34,6 +35,8 @@ module.exports = {
profileTemplate = profileTemplate.replace(/{{HEADER_COLOR}}/g, '190,31,97'); profileTemplate = profileTemplate.replace(/{{HEADER_COLOR}}/g, '190,31,97');
profileTemplate = profileTemplate.replace(/{{CC}}/g, await Card.count({where: {userId: user.id}})); profileTemplate = profileTemplate.replace(/{{CC}}/g, await Card.count({where: {userId: user.id}}));
profileTemplate = profileTemplate.replace(/{{LVL}}/g, await user.level().currentLevel); profileTemplate = profileTemplate.replace(/{{LVL}}/g, await user.level().currentLevel);
profileTemplate = profileTemplate.replace(/{{CUR_1}}/g, `${await user.primaryCurrency} ${CURRENCY_NAMES[1]}`);
profileTemplate = profileTemplate.replace(/{{CUR_2}}/g, `${await user.secondaryCurrency} ${CURRENCY_NAMES[2]}`);
let userImageBuffer = await axios.get(discordUser.displayAvatarURL({format: 'png', size: 128}), { responseType: 'arraybuffer' }); let userImageBuffer = await axios.get(discordUser.displayAvatarURL({format: 'png', size: 128}), { responseType: 'arraybuffer' });
userImage = await sharp(userImageBuffer.data); userImage = await sharp(userImageBuffer.data);

View File

@@ -16,5 +16,17 @@ const QUALITY_NAMES = {
6 : "Shiny" 6 : "Shiny"
} }
const CURRENCY_SYMBOLS = {
1 : "🎶",
2 : "💎"
}
const CURRENCY_NAMES = {
1 : "Notes",
2 : "Gems"
}
exports.QUALITY = QUALITY; exports.QUALITY = QUALITY;
exports.QUALITY_NAMES = QUALITY_NAMES; exports.QUALITY_NAMES = QUALITY_NAMES;
exports.CURRENCY_SYMBOLS = CURRENCY_SYMBOLS;
exports.CURRENCY_NAMES = CURRENCY_NAMES;

View File

@@ -0,0 +1,31 @@
'use strict';
module.exports = {
async up (queryInterface, Sequelize) {
/**
* Add altering commands here.
*
* Example:
* await queryInterface.createTable('users', { id: Sequelize.INTEGER });
*/
await queryInterface.addColumn('Users', 'primaryCurrency', {
type: Sequelize.INTEGER,
defaultValue: 0
});
await queryInterface.addColumn('Users', 'secondaryCurrency', {
type: Sequelize.INTEGER,
defaultValue: 0
});
},
async down (queryInterface, Sequelize) {
/**
* Add reverting commands here.
*
* Example:
* await queryInterface.dropTable('users');
*/
await queryInterface.removeColumn('Users', 'primaryCurrency');
await queryInterface.removeColumn('Users', 'secondaryCurrency');
}
};

View File

@@ -31,6 +31,31 @@ module.exports = (sequelize, DataTypes) => {
experience: this.experience + parseInt(amount) experience: this.experience + parseInt(amount)
}); });
} }
async addCurrency(amount, type, source='unknown') {
let typeStr = '';
if (type == 1) {
typeStr = `primaryCurrency`;
}
if (type == 2) {
typeStr = `secondaryCurrency`;
}
console.log(`Adding ${amount} ${typeStr} to user ${this.id}`);
await sequelize.models.CurrencyHistory.create({
userId: this.id,
currency: type,
delta: amount,
previous: this[typeStr],
source: source
});
this[typeStr] += parseInt(amount);
await this.save();
}
async addPrimaryCurrency(amount, source='unknown') {
return await this.addCurrency(amount, 1, source);
}
async addSecondaryCurrency(amount, source='unknown') {
return await this.addCurrency(amount, 2, source);
}
level() { level() {
let currentLevel = Math.floor(levelModifier * Math.sqrt(this.experience)); let currentLevel = Math.floor(levelModifier * Math.sqrt(this.experience));
let nextLevelExperience = Math.pow((currentLevel + 1) / levelModifier, 2); let nextLevelExperience = Math.pow((currentLevel + 1) / levelModifier, 2);
@@ -74,6 +99,8 @@ module.exports = (sequelize, DataTypes) => {
active: DataTypes.INTEGER, active: DataTypes.INTEGER,
privacy: DataTypes.INTEGER, privacy: DataTypes.INTEGER,
experience: DataTypes.INTEGER, experience: DataTypes.INTEGER,
primaryCurrency: DataTypes.INTEGER,
secondaryCurrency: DataTypes.INTEGER,
nextDrop: DataTypes.DATE, nextDrop: DataTypes.DATE,
nextPull: DataTypes.DATE, nextPull: DataTypes.DATE,
nextDaily: DataTypes.DATE nextDaily: DataTypes.DATE