/**
* Group tools for MCP WPPConnect Server.
* Handles group participant management (promote/demote).
*/
import { PromoteGroupParticipantSchema, PromoteGroupParticipantInput, DemoteGroupParticipantSchema, DemoteGroupParticipantInput } from '../schemas/validations.js';
import { sessionManager } from '../utils/sessionManager.js';
import { logger } from '../utils/logger.js';
import { ToolResponse } from '../types/index.js';
/**
* Promote a participant to admin in a group.
*/
export const promoteGroupParticipantTool = {
name: 'promote_group_participant',
description: 'Promote a participant to admin status in a WhatsApp group.',
inputSchema: PromoteGroupParticipantSchema,
execute: async (input: PromoteGroupParticipantInput): Promise<ToolResponse> => {
try {
logger.info('promoteGroupParticipantTool', `Promoting ${input.participantId} in group ${input.groupId}`);
const client = sessionManager.getClient(input.sessionId);
if (!client) {
return {
ok: false,
error: 'Session not found or not authenticated.',
};
}
await client.promoteParticipant(input.groupId, input.participantId);
logger.info('promoteGroupParticipantTool', `Participant ${input.participantId} promoted successfully`);
return {
ok: true,
data: {
groupId: input.groupId,
participantId: input.participantId,
message: 'Participant promoted to admin successfully.',
},
};
} catch (error) {
logger.error('promoteGroupParticipantTool', error);
return {
ok: false,
error: `Failed to promote participant: ${String(error)}`,
};
}
},
};
/**
* Demote a participant from admin in a group.
*/
export const demoteGroupParticipantTool = {
name: 'demote_group_participant',
description: 'Demote a participant from admin status in a WhatsApp group.',
inputSchema: DemoteGroupParticipantSchema,
execute: async (input: DemoteGroupParticipantInput): Promise<ToolResponse> => {
try {
logger.info('demoteGroupParticipantTool', `Demoting ${input.participantId} in group ${input.groupId}`);
const client = sessionManager.getClient(input.sessionId);
if (!client) {
return {
ok: false,
error: 'Session not found or not authenticated.',
};
}
await client.demoteParticipant(input.groupId, input.participantId);
logger.info('demoteGroupParticipantTool', `Participant ${input.participantId} demoted successfully`);
return {
ok: true,
data: {
groupId: input.groupId,
participantId: input.participantId,
message: 'Participant demoted from admin successfully.',
},
};
} catch (error) {
logger.error('demoteGroupParticipantTool', error);
return {
ok: false,
error: `Failed to demote participant: ${String(error)}`,
};
}
},
};
/**
* Array of all group tools.
*/
export const groupTools = [promoteGroupParticipantTool, demoteGroupParticipantTool];