import { api } from '@rocket.chat/core-services'; import type { SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { Users } from '@rocket.chat/models'; import { Meteor } from 'meteor/meteor'; import { i18n } from '../../lib/i18n'; import { slashCommands } from '../../lib/utils/slashCommand'; import { leaveRoomMethod } from '../../meteor-methods/rooms/leaveRoom'; import { settings } from '../../settings'; /* * Leave is a named function that will replace /leave commands * @param {Object} message - The message object */ const Leave = async function Leave({ message, userId }: SlashCommandCallbackParams<'leave'>): Promise { try { const user = await Users.findOneById(userId); if (!user) { return; } await leaveRoomMethod(user, message.rid); } catch (error: any) { if (typeof error.error !== 'string') { throw error; } const user = await Users.findOneById(userId); void api.broadcast('notify.ephemeralMessage', userId, message.rid, { msg: i18n.t(error, { lng: user?.language || settings.get('Language') || 'en' }), }); throw new Meteor.Error(error.error, error.message); } }; slashCommands.add({ command: 'leave', callback: Leave, options: { description: 'Leave_the_current_channel', permission: ['leave-c', 'leave-p'], }, }); slashCommands.add({ command: 'part', callback: Leave, options: { description: 'Leave_the_current_channel', permission: ['leave-c', 'leave-p'], }, });