diff --git a/js/client-chat.js b/js/client-chat.js index 5b9aaa6ac..80a375c4b 100644 --- a/js/client-chat.js +++ b/js/client-chat.js @@ -1578,6 +1578,10 @@ var isHighlighted = userid !== app.user.get('userid') && this.getHighlight(message); var parsedMessage = MainMenuRoom.parseChatMessage(message, name, ChatRoom.getTimestamp('chat', msgTime), isHighlighted); + if (typeof parsedMessage === 'object' && 'noNotify' in parsedMessage) { + mayNotify = mayNotify && !parsedMessage.noNotify; + parsedMessage = parsedMessage.message; + } if (!$.isArray(parsedMessage)) parsedMessage = [parsedMessage]; for (var i = 0; i < parsedMessage.length; i++) { if (!parsedMessage[i]) continue; diff --git a/js/client-mainmenu.js b/js/client-mainmenu.js index 21e9f0504..83d9d3cff 100644 --- a/js/client-mainmenu.js +++ b/js/client-mainmenu.js @@ -144,6 +144,11 @@ var autoscroll = ($chatFrame.scrollTop() + 60 >= $chat.height() - $chatFrame.height()); var parsedMessage = MainMenuRoom.parseChatMessage(message, name, ChatRoom.getTimestamp('pms'), false, $chat); + var mayNotify = true; + if (typeof parsedMessage === 'object' && 'noNotify' in parsedMessage) { + mayNotify = !parsedMessage.noNotify; + parsedMessage = parsedMessage.message; + } if (!$.isArray(parsedMessage)) parsedMessage = [parsedMessage]; for (var i = 0; i < parsedMessage.length; i++) { if (!parsedMessage[i]) continue; @@ -156,7 +161,7 @@ app.curSideRoom.addPM(name, message, target); } - if (!isSelf && textContent) { + if (mayNotify && !isSelf && textContent) { this.notifyOnce("PM from " + name, "\"" + textContent + "\"", 'pm'); } @@ -996,6 +1001,8 @@ return ''; case 'raw': return '
' + BattleLog.sanitizeHTML(target) + '
'; + case 'nonotify': + return {message: '
' + BattleLog.sanitizeHTML(target) + '
', noNotify: true}; default: // Not a command or unsupported. Parsed as a normal chat message. if (!name) { diff --git a/src/battle-log.ts b/src/battle-log.ts index 178b966f7..d3c3826b9 100644 --- a/src/battle-log.ts +++ b/src/battle-log.ts @@ -64,6 +64,7 @@ class BattleLog { if (kwArgs && kwArgs.silent) return; let divClass = 'chat'; let divHTML = ''; + let noNotify: boolean | undefined; switch (args[0]) { case 'chat': case 'c': case 'c:': let battle = this.scene && this.scene.battle; @@ -83,8 +84,8 @@ class BattleLog { } if (window.app && app.ignore && app.ignore[toUserid(name)] && ' +\u2605\u2606'.includes(rank)) return; let isHighlighted = window.app && app.rooms && app.rooms[battle!.roomid].getHighlight(message); - [divClass, divHTML] = this.parseChatMessage(message, name, '', isHighlighted); - if (isHighlighted) { + [divClass, divHTML, noNotify] = this.parseChatMessage(message, name, '', isHighlighted); + if (!noNotify && isHighlighted) { let notifyTitle = "Mentioned by " + name + " in " + battle!.roomid; app.rooms[battle!.roomid].notifyOnce(notifyTitle, "\"" + message + "\"", 'highlight'); } @@ -435,7 +436,9 @@ class BattleLog { return undefined; } - parseChatMessage(message: string, name: string, timestamp: string, isHighlighted?: boolean) { + parseChatMessage( + message: string, name: string, timestamp: string, isHighlighted?: boolean + ): [string, string, boolean?] { let showMe = !(BattleLog.prefs('chatformatting') || {}).hideme; let group = ' '; if (!/[A-Za-z0-9]/.test(name.charAt(0))) { @@ -516,6 +519,8 @@ class BattleLog { return ['', '']; case 'raw': return ['chat', BattleLog.sanitizeHTML(target)]; + case 'nonotify': + return ['chat', BattleLog.sanitizeHTML(target), true]; default: // Not a command or unsupported. Parsed as a normal chat message. if (!name) {