RocketChat/Rocket.Chat

View on GitHub
apps/meteor/app/irc/server/irc-bridge/localHandlers/onSaveMessage.js

Summary

Maintainability
B
4 hrs
Test Coverage
import { Subscriptions, Users } from '@rocket.chat/models';

import { SystemLogger } from '../../../../../server/lib/logger/system';

export default async function handleOnSaveMessage(message, to) {
    let toIdentification = '';
    // Direct message
    if (to.t === 'd') {
        const subscriptions = Subscriptions.findByRoomId(to._id).toArray();
        for await (const subscription of subscriptions) {
            if (subscription.u._id !== message.u._id) {
                const userData = await Users.findOne({ username: subscription.u.username });
                if (userData) {
                    if (userData.profile && userData.profile.irc && userData.profile.irc.nick) {
                        toIdentification = userData.profile.irc.nick;
                    } else {
                        toIdentification = userData.username;
                    }
                } else {
                    toIdentification = subscription.u.username;
                }
            }
        }

        if (!toIdentification) {
            SystemLogger.error('[irc][server] Target user not found');
            return;
        }
    } else {
        toIdentification = `#${to.name}`;
    }

    const user = await Users.findOne({ _id: message.u._id });

    this.sendCommand('sentMessage', { to: toIdentification, user, message: message.msg });
}