import type { IOmnichannelRoom } from '@rocket.chat/core-typings'; import { callbacks } from '../../../../server/lib/callbacks'; import { i18n } from '../../../../server/lib/i18n'; import { settings } from '../../../../server/settings'; import { AutoCloseOnHoldScheduler } from '../../lib/omnichannel/AutoCloseOnHoldScheduler'; import { cbLogger } from '../../lib/omnichannel/logger'; let autoCloseOnHoldChatTimeout = 0; const handleAfterOnHold = async (room: Pick): Promise => { const { _id: rid } = room; if (!rid) { return; } if (!autoCloseOnHoldChatTimeout || autoCloseOnHoldChatTimeout <= 0) { return; } cbLogger.debug({ msg: 'Scheduling room to be closed', rid, autoCloseOnHoldChatTimeout }); const closeComment = settings.get('Livechat_auto_close_on_hold_chats_custom_message') || i18n.t('Closed_automatically_because_chat_was_onhold_for_seconds', { onHoldTime: autoCloseOnHoldChatTimeout, }); await AutoCloseOnHoldScheduler.scheduleRoom(rid, autoCloseOnHoldChatTimeout, closeComment); }; settings.watch('Livechat_auto_close_on_hold_chats_timeout', (value) => { autoCloseOnHoldChatTimeout = value as number; if (!value || value <= 0) { callbacks.remove('livechat:afterOnHold', 'livechat-auto-close-on-hold'); } callbacks.add('livechat:afterOnHold', handleAfterOnHold, callbacks.priority.HIGH, 'livechat-auto-close-on-hold'); });