History: Add currency and XP tracking

This commit is contained in:
2022-09-21 17:16:10 +02:00
parent dcd05322ca
commit a49a478972
5 changed files with 79 additions and 4 deletions

View File

@@ -114,7 +114,7 @@ module.exports = {
}); });
break; break;
case "add_xp": case "add_xp":
await extUser.addExperience(interaction.options.getString("value")) await extUser.addExperience(interaction.options.getString("value"), `Debug command ran by ${interaction.member.displayName}`);
interaction.editReply({ interaction.editReply({
content: `Added ${interaction.options.getString("value")} XP to <@${extUser.discordId}>`, content: `Added ${interaction.options.getString("value")} XP to <@${extUser.discordId}>`,
ephemeral: false ephemeral: false

View File

@@ -86,7 +86,7 @@ module.exports = {
); );
} }
//add 10 experience to the user //add 10 experience to the user
await user.addExperience(10); await user.addExperience(10, 'drop');
const file = new AttachmentBuilder(deckImage); const file = new AttachmentBuilder(deckImage);
@@ -147,7 +147,7 @@ module.exports = {
dropData: JSON.stringify(historyEntry), dropData: JSON.stringify(historyEntry),
type: 1 type: 1
}); });
await claimUser.addExperience(5); await claimUser.addExperience(5, "claim");
//fetch character name from database given the character id //fetch character name from database given the character id
let character = await Character.findOne({ let character = await Character.findOne({
attributes: ["name"], attributes: ["name"],

View File

@@ -0,0 +1,39 @@
'use strict';
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.createTable('CurrencyHistories', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
userId: {
type: Sequelize.INTEGER
},
currency: {
type: Sequelize.INTEGER
},
delta: {
type: Sequelize.INTEGER
},
previous: {
type: Sequelize.INTEGER
},
source: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
async down(queryInterface, Sequelize) {
await queryInterface.dropTable('CurrencyHistories');
}
};

28
models/currencyhistory.js Normal file
View File

@@ -0,0 +1,28 @@
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class CurrencyHistory extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
CurrencyHistory.belongsTo(models.User, { foreignKey: 'userId' });
}
}
CurrencyHistory.init({
userId: DataTypes.INTEGER,
currency: DataTypes.INTEGER,
delta: DataTypes.INTEGER,
previous: DataTypes.INTEGER,
source: DataTypes.STRING
}, {
sequelize,
modelName: 'CurrencyHistory',
});
return CurrencyHistory;
};

View File

@@ -15,10 +15,18 @@ module.exports = (sequelize, DataTypes) => {
static associate(models) { static associate(models) {
// define association here // define association here
User.hasMany(models.Card); User.hasMany(models.Card);
User.hasMany(models.CurrencyHistory);
User.hasOne(models.Profile); User.hasOne(models.Profile);
} }
async addExperience(amount) { async addExperience(amount, source='unknown') {
console.log(`Adding ${amount} experience to user ${this.id}`); console.log(`Adding ${amount} experience to user ${this.id}`);
await sequelize.models.CurrencyHistory.create({
userId: this.id,
currency: 0,
delta: amount,
previous: this.experience,
source: source
});
await this.update({ await this.update({
experience: this.experience + parseInt(amount) experience: this.experience + parseInt(amount)
}); });