mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 14:47:53 +01:00
Partial fixage for autocomplete @ing Don't add username to chat message if user is unverified Fix flying pets Fix console error about avatar intro
129 lines
3.9 KiB
JavaScript
129 lines
3.9 KiB
JavaScript
import mongoose from 'mongoose';
|
|
import baseModel from '../libs/baseModel';
|
|
import { v4 as uuid } from 'uuid';
|
|
import { defaults } from 'lodash';
|
|
|
|
const defaultSchema = () => ({
|
|
id: String,
|
|
timestamp: Date,
|
|
text: String,
|
|
|
|
// sender properties
|
|
user: String, // profile name (unfortunately)
|
|
username: String,
|
|
contributor: {$type: mongoose.Schema.Types.Mixed},
|
|
backer: {$type: mongoose.Schema.Types.Mixed},
|
|
uuid: String, // sender uuid
|
|
userStyles: {$type: mongoose.Schema.Types.Mixed},
|
|
|
|
flags: {$type: mongoose.Schema.Types.Mixed, default: {}},
|
|
flagCount: {$type: Number, default: 0},
|
|
likes: {$type: mongoose.Schema.Types.Mixed},
|
|
_meta: {$type: mongoose.Schema.Types.Mixed},
|
|
});
|
|
|
|
const chatSchema = new mongoose.Schema({
|
|
...defaultSchema(),
|
|
groupId: {$type: String, ref: 'Group'},
|
|
}, {
|
|
minimize: false, // Allow for empty flags to be saved
|
|
typeKey: '$type', // So that we can use fields named `type`
|
|
});
|
|
|
|
chatSchema.plugin(baseModel, {
|
|
noSet: ['_id'],
|
|
});
|
|
|
|
const inboxSchema = new mongoose.Schema({
|
|
sent: {$type: Boolean, default: false}, // if the owner sent this message
|
|
// the uuid of the user where the message is stored,
|
|
// we store two copies of each inbox messages:
|
|
// one for the sender and one for the receiver
|
|
ownerId: {$type: String, ref: 'User'},
|
|
...defaultSchema(),
|
|
}, {
|
|
minimize: false, // Allow for empty flags to be saved
|
|
typeKey: '$type', // So that we can use fields named `type`
|
|
});
|
|
|
|
inboxSchema.plugin(baseModel, {
|
|
noSet: ['_id'],
|
|
});
|
|
|
|
export const chatModel = mongoose.model('Chat', chatSchema);
|
|
export const inboxModel = mongoose.model('Inbox', inboxSchema);
|
|
|
|
export function setUserStyles (newMessage, user) {
|
|
let userStyles = {};
|
|
userStyles.items = {gear: {}};
|
|
|
|
let userCopy = user;
|
|
if (user.toObject) userCopy = user.toObject();
|
|
|
|
if (userCopy.items) {
|
|
userStyles.items.gear = {};
|
|
userStyles.items.gear.costume = Object.assign({}, userCopy.items.gear.costume);
|
|
userStyles.items.gear.equipped = Object.assign({}, userCopy.items.gear.equipped);
|
|
|
|
userStyles.items.currentMount = userCopy.items.currentMount;
|
|
userStyles.items.currentPet = userCopy.items.currentPet;
|
|
}
|
|
|
|
|
|
if (userCopy.preferences) {
|
|
userStyles.preferences = {};
|
|
if (userCopy.preferences.style) userStyles.preferences.style = userCopy.preferences.style;
|
|
userStyles.preferences.hair = userCopy.preferences.hair;
|
|
userStyles.preferences.skin = userCopy.preferences.skin;
|
|
userStyles.preferences.shirt = userCopy.preferences.shirt;
|
|
userStyles.preferences.chair = userCopy.preferences.chair;
|
|
userStyles.preferences.size = userCopy.preferences.size;
|
|
userStyles.preferences.chair = userCopy.preferences.chair;
|
|
userStyles.preferences.background = userCopy.preferences.background;
|
|
userStyles.preferences.costume = userCopy.preferences.costume;
|
|
}
|
|
|
|
if (userCopy.stats) {
|
|
userStyles.stats = {};
|
|
userStyles.stats.class = userCopy.stats.class;
|
|
if (userCopy.stats.buffs) {
|
|
userStyles.stats.buffs = {
|
|
seafoam: userCopy.stats.buffs.seafoam,
|
|
shinySeed: userCopy.stats.buffs.shinySeed,
|
|
spookySparkles: userCopy.stats.buffs.spookySparkles,
|
|
snowball: userCopy.stats.buffs.snowball,
|
|
};
|
|
}
|
|
}
|
|
|
|
newMessage.userStyles = userStyles;
|
|
newMessage.markModified('userStyles');
|
|
}
|
|
|
|
export function messageDefaults (msg, user) {
|
|
const id = uuid();
|
|
const message = {
|
|
id,
|
|
_id: id,
|
|
text: msg.substring(0, 3000),
|
|
timestamp: Number(new Date()),
|
|
likes: {},
|
|
flags: {},
|
|
flagCount: 0,
|
|
};
|
|
|
|
if (user) {
|
|
defaults(message, {
|
|
uuid: user._id,
|
|
contributor: user.contributor && user.contributor.toObject(),
|
|
backer: user.backer && user.backer.toObject(),
|
|
user: user.profile.name,
|
|
username: user.flags.verifiedUsername && user.auth && user.auth.local && user.auth.local.username,
|
|
});
|
|
} else {
|
|
message.uuid = 'system';
|
|
}
|
|
|
|
return message;
|
|
}
|