diff --git a/test/api/unit/models/group.test.js b/test/api/unit/models/group.test.js index 877a3a22fc..44707d22e4 100644 --- a/test/api/unit/models/group.test.js +++ b/test/api/unit/models/group.test.js @@ -892,6 +892,19 @@ describe('Group Model', () => { translationCheck(party.chat[0].text); }); + it('translate quest_cancel', () => { + questLeader.preferences.language = 'en'; + party.chat = [{ + info: { + type: 'quest_cancel', + user: questLeader.profile.name, + quest: 'basilist', + }, + }]; + party.translateSystemMessages(questLeader); + translationCheck(party.chat[0].text); + }); + it('translate quest_abort', () => { questLeader.preferences.language = 'en'; party.chat = [{ diff --git a/website/common/locales/en/quests.json b/website/common/locales/en/quests.json index 7c0bb42387..42bb9124e2 100644 --- a/website/common/locales/en/quests.json +++ b/website/common/locales/en/quests.json @@ -134,5 +134,6 @@ "chatFindItems": "<%= username %> found <%= items %>.", "chatItemQuestFinish": "All items found! Party has received their rewards.", "chatQuestAborted": "<%= username %> aborted the party quest <%= questName %>.", + "chatQuestCancelled": "<%= username %> cancelled the party quest <%= questName %>.", "tavernBossTired": "<%= bossName %> tries to unleash <%= rageName %> but is too tired." } diff --git a/website/server/controllers/api-v3/quests.js b/website/server/controllers/api-v3/quests.js index 9857e32bd4..d0f96b8a80 100644 --- a/website/server/controllers/api-v3/quests.js +++ b/website/server/controllers/api-v3/quests.js @@ -371,7 +371,14 @@ api.cancelQuest = { if (group.quest.active) throw new NotAuthorized(res.t('cantCancelActiveQuest')); let questName = questScrolls[group.quest.key].text('en'); - const newChatMessage = group.sendChat(`\`${user.profile.name} cancelled the party quest ${questName}.\``); + const newChatMessage = group.sendChat({ + message: `\`${user.profile.name} cancelled the party quest ${questName}.\``, + info: { + type: 'quest_cancel', + user: user.profile.name, + quest: group.quest.key, + }, + }); group.quest = Group.cleanGroupQuest(); group.markModified('quest'); diff --git a/website/server/models/group.js b/website/server/models/group.js index 038567d321..73791b3f9f 100644 --- a/website/server/models/group.js +++ b/website/server/models/group.js @@ -380,6 +380,10 @@ function _translateMessage (lang, info) { msg = `\`${shared.i18n.t('chatCastSpellUser', {username: info.user, spell: spells[info.class][info.spell].text(lang), target: info.target}, lang)}\``; break; + case 'quest_cancel': + msg = `\`${shared.i18n.t('chatQuestCancelled', {username: info.user, questName: questScrolls[info.quest].text(lang)}, lang)}\``; + break; + case 'quest_abort': msg = `\`${shared.i18n.t('chatQuestAborted', {username: info.user, questName: questScrolls[info.quest].text(lang)}, lang)}\``; break;