mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 07:37:25 +01:00
Save username instead of uuid (no queries necessary anymore)
This commit is contained in:
@@ -74,8 +74,7 @@ api.getChat = {
|
|||||||
let group = await Group.getGroup({user, groupId: req.params.groupId, fields: 'chat'});
|
let group = await Group.getGroup({user, groupId: req.params.groupId, fields: 'chat'});
|
||||||
if (!group) throw new NotFound(res.t('groupNotFound'));
|
if (!group) throw new NotFound(res.t('groupNotFound'));
|
||||||
|
|
||||||
let toJSON = await Group.toJSONCleanChat(group, user);
|
res.respond(200, Group.toJSONCleanChat(group, user).chat);
|
||||||
res.respond(200, toJSON.chat);
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -195,8 +194,7 @@ api.postChat = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (chatUpdated) {
|
if (chatUpdated) {
|
||||||
let toJSON = await Group.toJSONCleanChat(savedGroup, user);
|
res.respond(200, {chat: Group.toJSONCleanChat(savedGroup, user).chat});
|
||||||
res.respond(200, {chat: toJSON.chat});
|
|
||||||
} else {
|
} else {
|
||||||
res.respond(200, {message: savedGroup.chat[0]});
|
res.respond(200, {message: savedGroup.chat[0]});
|
||||||
}
|
}
|
||||||
@@ -488,8 +486,7 @@ api.deleteChat = {
|
|||||||
).exec();
|
).exec();
|
||||||
|
|
||||||
if (chatUpdated) {
|
if (chatUpdated) {
|
||||||
let toJSON = await Group.toJSONCleanChat(group, user);
|
let chatRes = Group.toJSONCleanChat(group, user).chat;
|
||||||
let chatRes = toJSON.chat;
|
|
||||||
removeFromArray(chatRes, {id: chatId});
|
removeFromArray(chatRes, {id: chatId});
|
||||||
res.respond(200, chatRes);
|
res.respond(200, chatRes);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -391,7 +391,7 @@ api.getGroup = {
|
|||||||
throw new NotFound(res.t('groupNotFound'));
|
throw new NotFound(res.t('groupNotFound'));
|
||||||
}
|
}
|
||||||
|
|
||||||
let groupJson = await Group.toJSONCleanChat(group, user);
|
let groupJson = Group.toJSONCleanChat(group, user);
|
||||||
|
|
||||||
if (groupJson.leader === user._id) {
|
if (groupJson.leader === user._id) {
|
||||||
groupJson.purchased.plan = group.purchased.plan.toObject();
|
groupJson.purchased.plan = group.purchased.plan.toObject();
|
||||||
@@ -455,7 +455,7 @@ api.updateGroup = {
|
|||||||
_.assign(group, _.merge(group.toObject(), Group.sanitizeUpdate(req.body)));
|
_.assign(group, _.merge(group.toObject(), Group.sanitizeUpdate(req.body)));
|
||||||
|
|
||||||
let savedGroup = await group.save();
|
let savedGroup = await group.save();
|
||||||
let response = await Group.toJSONCleanChat(savedGroup, user);
|
let response = Group.toJSONCleanChat(savedGroup, user);
|
||||||
|
|
||||||
// If the leader changed fetch new data, otherwise use authenticated user
|
// If the leader changed fetch new data, otherwise use authenticated user
|
||||||
if (response.leader !== user._id) {
|
if (response.leader !== user._id) {
|
||||||
@@ -619,7 +619,7 @@ api.joinGroup = {
|
|||||||
|
|
||||||
promises = await Bluebird.all(promises);
|
promises = await Bluebird.all(promises);
|
||||||
|
|
||||||
let response = await Group.toJSONCleanChat(promises[0], user);
|
let response = Group.toJSONCleanChat(promises[0], user);
|
||||||
let leader = await User.findById(response.leader).select(nameFields).exec();
|
let leader = await User.findById(response.leader).select(nameFields).exec();
|
||||||
if (leader) {
|
if (leader) {
|
||||||
response.leader = leader.toJSON({minimize: true});
|
response.leader = leader.toJSON({minimize: true});
|
||||||
|
|||||||
@@ -424,7 +424,7 @@ api.abortQuest = {
|
|||||||
let questName = questScrolls[group.quest.key].text('en');
|
let questName = questScrolls[group.quest.key].text('en');
|
||||||
group.sendChat(`\`${user.profile.name} aborted the party quest ${questName}.\``, null, null, {
|
group.sendChat(`\`${user.profile.name} aborted the party quest ${questName}.\``, null, null, {
|
||||||
type: 'quest_abort',
|
type: 'quest_abort',
|
||||||
user: user._id,
|
user: user.profile.name,
|
||||||
quest: group.quest.key,
|
quest: group.quest.key,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -738,7 +738,7 @@ api.castSpell = {
|
|||||||
if (targetType === 'user') {
|
if (targetType === 'user') {
|
||||||
party.sendChat(message, null, null, {
|
party.sendChat(message, null, null, {
|
||||||
type: 'spell_cast_user',
|
type: 'spell_cast_user',
|
||||||
user: user._id,
|
user: user.profile.name,
|
||||||
class: klass,
|
class: klass,
|
||||||
spell: spellId,
|
spell: spellId,
|
||||||
target: partyMembers._id,
|
target: partyMembers._id,
|
||||||
@@ -746,7 +746,7 @@ api.castSpell = {
|
|||||||
} else {
|
} else {
|
||||||
party.sendChat(message, null, null, {
|
party.sendChat(message, null, null, {
|
||||||
type: 'spell_cast_party',
|
type: 'spell_cast_party',
|
||||||
user: user._id,
|
user: user.profile.name,
|
||||||
class: klass,
|
class: klass,
|
||||||
spell: spellId,
|
spell: spellId,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -317,25 +317,8 @@ schema.statics.getGroups = async function getGroups (options = {}) {
|
|||||||
return groupsArray;
|
return groupsArray;
|
||||||
};
|
};
|
||||||
|
|
||||||
async function translateSystemMessages (group, user) {
|
function translateSystemMessages (group, user) {
|
||||||
let usernames = {};
|
|
||||||
let foundText = '';
|
let foundText = '';
|
||||||
for (let i = 0; i < group.chat.length; i++) {
|
|
||||||
if (!_.isEmpty(group.chat[i].info)) {
|
|
||||||
if (_.has(group.chat[i].info, 'user') && !_.has(usernames, group.chat[i].info.user)) {
|
|
||||||
usernames[group.chat[i].info.user] = null;
|
|
||||||
} else if (_.has(group.chat[i].info, 'target') && !_.has(usernames, group.chat[i].info.target)) {
|
|
||||||
usernames[group.chat[i].info.target] = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await Bluebird.map(Object.keys(usernames), async (username) => {
|
|
||||||
let usr = await User
|
|
||||||
.findById(username)
|
|
||||||
.select(nameFields)
|
|
||||||
.exec();
|
|
||||||
usernames[username] = usr.profile.name;
|
|
||||||
});
|
|
||||||
for (let i = 0; i < group.chat.length; i++) {
|
for (let i = 0; i < group.chat.length; i++) {
|
||||||
if (!_.isEmpty(group.chat[i].info)) {
|
if (!_.isEmpty(group.chat[i].info)) {
|
||||||
switch (group.chat[i].info.type) {
|
switch (group.chat[i].info.type) {
|
||||||
@@ -343,7 +326,7 @@ async function translateSystemMessages (group, user) {
|
|||||||
group.chat[i].text = `\`${shared.i18n.t('chatQuestStarted', {questName: questScrolls[group.chat[i].info.quest].text(user.preferences.language)}, user.preferences.language)}\``;
|
group.chat[i].text = `\`${shared.i18n.t('chatQuestStarted', {questName: questScrolls[group.chat[i].info.quest].text(user.preferences.language)}, user.preferences.language)}\``;
|
||||||
break;
|
break;
|
||||||
case 'boss_damage':
|
case 'boss_damage':
|
||||||
group.chat[i].text = `\`${shared.i18n.t('chatBossDamage', {username: usernames[group.chat[i].info.user], bossName: questScrolls[group.chat[i].info.quest].boss.name(user.preferences.language), userDamage: group.chat[i].info.userDamage, bossDamage: group.chat[i].info.bossDamage}, user.preferences.language)}\``;
|
group.chat[i].text = `\`${shared.i18n.t('chatBossDamage', {username: group.chat[i].info.user, bossName: questScrolls[group.chat[i].info.quest].boss.name(user.preferences.language), userDamage: group.chat[i].info.userDamage, bossDamage: group.chat[i].info.bossDamage}, user.preferences.language)}\``;
|
||||||
break;
|
break;
|
||||||
case 'boss_dont_attack':
|
case 'boss_dont_attack':
|
||||||
group.chat[i].text = `\`${shared.i18n.t('chatBossDontAttack', {bossName: questScrolls[group.chat[i].info.quest].boss.name(user.preferences.language)}, user.preferences.language)}\``;
|
group.chat[i].text = `\`${shared.i18n.t('chatBossDontAttack', {bossName: questScrolls[group.chat[i].info.quest].boss.name(user.preferences.language)}, user.preferences.language)}\``;
|
||||||
@@ -359,25 +342,25 @@ async function translateSystemMessages (group, user) {
|
|||||||
m.push(`${v} ${questScrolls[group.chat[i].info.quest].collect[k].text(user.preferences.language)}`);
|
m.push(`${v} ${questScrolls[group.chat[i].info.quest].collect[k].text(user.preferences.language)}`);
|
||||||
return m;
|
return m;
|
||||||
}, []).join(', ');
|
}, []).join(', ');
|
||||||
group.chat[i].text = `\`${shared.i18n.t('chatFindItems', {username: usernames[group.chat[i].info.user], items: foundText}, user.preferences.language)}\``;
|
group.chat[i].text = `\`${shared.i18n.t('chatFindItems', {username: group.chat[i].info.user, items: foundText}, user.preferences.language)}\``;
|
||||||
break;
|
break;
|
||||||
case 'all_items_found':
|
case 'all_items_found':
|
||||||
group.chat[i].text = `\`${shared.i18n.t('chatItemQuestFinish', user.preferences.language)}\``;
|
group.chat[i].text = `\`${shared.i18n.t('chatItemQuestFinish', user.preferences.language)}\``;
|
||||||
break;
|
break;
|
||||||
case 'spell_cast_party':
|
case 'spell_cast_party':
|
||||||
group.chat[i].text = `\`${shared.i18n.t('chatCastSpellParty', {username: usernames[group.chat[i].info.user], spellName: shared.content.spells[group.chat[i].info.class][group.chat[i].info.spell].text(user.preferences.language)}, user.preferences.language)}\``;
|
group.chat[i].text = `\`${shared.i18n.t('chatCastSpellParty', {username: group.chat[i].info.user, spellName: shared.content.spells[group.chat[i].info.class][group.chat[i].info.spell].text(user.preferences.language)}, user.preferences.language)}\``;
|
||||||
break;
|
break;
|
||||||
case 'spell_cast_user':
|
case 'spell_cast_user':
|
||||||
group.chat[i].text = `\`${shared.i18n.t('chatCastSpellUser', {username: usernames[group.chat[i].info.user], spellName: shared.content.spells[group.chat[i].info.class][group.chat[i].info.spell].text(user.preferences.language), target: usernames[group.chat[i].info.target]}, user.preferences.language)}\``;
|
group.chat[i].text = `\`${shared.i18n.t('chatCastSpellUser', {username: group.chat[i].info.user, spellName: shared.content.spells[group.chat[i].info.class][group.chat[i].info.spell].text(user.preferences.language), target: group.chat[i].info.target}, user.preferences.language)}\``;
|
||||||
break;
|
break;
|
||||||
case 'quest_abort':
|
case 'quest_abort':
|
||||||
group.chat[i].text = `\`${shared.i18n.t('chatQuestAborted', {username: usernames[group.chat[i].info.user], questName: questScrolls[group.chat[i].info.quest].text(user.preferences.language)}, user.preferences.language)}\``;
|
group.chat[i].text = `\`${shared.i18n.t('chatQuestAborted', {username: group.chat[i].info.user, questName: questScrolls[group.chat[i].info.quest].text(user.preferences.language)}, user.preferences.language)}\``;
|
||||||
break;
|
break;
|
||||||
case 'tavern_quest_completed':
|
case 'tavern_quest_completed':
|
||||||
group.chat[i].text = `\`${shared.content.quests[group.chat[i].info.quest].completionChat(user.preferences.language)}\``;
|
group.chat[i].text = `\`${shared.content.quests[group.chat[i].info.quest].completionChat(user.preferences.language)}\``;
|
||||||
break;
|
break;
|
||||||
case 'tavern_boss_rage_tired':
|
case 'tavern_boss_rage_tired':
|
||||||
group.chat[i].text = `\`${shared.i18n.t('tavernBossTired', {username: usernames[group.chat[i].info.user], questName: shared.content.quests[group.chat[i].info.quest].text(user.preferences.language)}, user.preferences.language)}\``;
|
group.chat[i].text = `\`${shared.i18n.t('tavernBossTired', {username: group.chat[i].info.user, questName: shared.content.quests[group.chat[i].info.quest].text(user.preferences.language)}, user.preferences.language)}\``;
|
||||||
break;
|
break;
|
||||||
case 'tavern_boss_rage':
|
case 'tavern_boss_rage':
|
||||||
group.chat[i].text = `\`${shared.content.quests[group.chat[i].info.quest].boss.rage[group.chat[i].info.scene](user.preferences.language)}\``;
|
group.chat[i].text = `\`${shared.content.quests[group.chat[i].info.quest].boss.rage[group.chat[i].info.scene](user.preferences.language)}\``;
|
||||||
@@ -398,8 +381,8 @@ async function translateSystemMessages (group, user) {
|
|||||||
// unless the user is an admin or said chat is posted by that user
|
// unless the user is an admin or said chat is posted by that user
|
||||||
// Not putting into toJSON because there we can't access user
|
// Not putting into toJSON because there we can't access user
|
||||||
// It also removes the _meta field that can be stored inside a chat message
|
// It also removes the _meta field that can be stored inside a chat message
|
||||||
schema.statics.toJSONCleanChat = async function groupToJSONCleanChat (group, user) {
|
schema.statics.toJSONCleanChat = function groupToJSONCleanChat (group, user) {
|
||||||
group = await translateSystemMessages(group, user);
|
group = translateSystemMessages(group, user);
|
||||||
|
|
||||||
let toJSON = group.toJSON();
|
let toJSON = group.toJSON();
|
||||||
|
|
||||||
@@ -978,7 +961,7 @@ schema.methods._processBossQuest = async function processBossQuest (options) {
|
|||||||
} else {
|
} else {
|
||||||
group.sendChat(`\`${playerAttack}\` \`${bossAttack}\``, null, null, {
|
group.sendChat(`\`${playerAttack}\` \`${bossAttack}\``, null, null, {
|
||||||
type: 'boss_damage',
|
type: 'boss_damage',
|
||||||
user: user._id,
|
user: user.profile.name,
|
||||||
quest: group.quest.key,
|
quest: group.quest.key,
|
||||||
userDamage: progress.up.toFixed(1),
|
userDamage: progress.up.toFixed(1),
|
||||||
bossDamage: Math.abs(down).toFixed(1),
|
bossDamage: Math.abs(down).toFixed(1),
|
||||||
@@ -1075,7 +1058,7 @@ schema.methods._processCollectionQuest = async function processCollectionQuest (
|
|||||||
foundText = foundText.join(', ');
|
foundText = foundText.join(', ');
|
||||||
group.sendChat(`\`${user.profile.name} found ${foundText}.\``, null, null, {
|
group.sendChat(`\`${user.profile.name} found ${foundText}.\``, null, null, {
|
||||||
type: 'user_found_items',
|
type: 'user_found_items',
|
||||||
user: user._id,
|
user: user.profile.name,
|
||||||
quest: quest.key,
|
quest: quest.key,
|
||||||
items: itemsFound,
|
items: itemsFound,
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user