Initial backup 2026-02-17
This commit is contained in:
109
skills/lark-calendar/scripts/manage-attendees.mjs
Normal file
109
skills/lark-calendar/scripts/manage-attendees.mjs
Normal file
@@ -0,0 +1,109 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Add or remove attendees from a calendar event
|
||||
*
|
||||
* Usage:
|
||||
* node manage-attendees.mjs --event-id "xxx" --add "RK,jc"
|
||||
* node manage-attendees.mjs --event-id "xxx" --remove "jc"
|
||||
*/
|
||||
|
||||
import { parseArgs } from 'util';
|
||||
import { addEventAttendees, removeEventAttendees, DEFAULT_CALENDAR_ID } from '../lib/calendar.mjs';
|
||||
import { resolveNames, getDisplayNameSync } from '../lib/employees.mjs';
|
||||
|
||||
const { values } = parseArgs({
|
||||
options: {
|
||||
'event-id': { type: 'string' },
|
||||
add: { type: 'string' },
|
||||
remove: { type: 'string' },
|
||||
'user-ids': { type: 'string' },
|
||||
calendar: { type: 'string', default: DEFAULT_CALENDAR_ID },
|
||||
help: { type: 'boolean', short: 'h' }
|
||||
}
|
||||
});
|
||||
|
||||
if (values.help) {
|
||||
console.log(`
|
||||
Manage calendar event attendees
|
||||
|
||||
Options:
|
||||
--event-id Event ID (required)
|
||||
--add Comma-separated names to add
|
||||
--remove Comma-separated names to remove
|
||||
--user-ids Comma-separated user_ids directly (use with --add or --remove)
|
||||
--calendar Calendar ID
|
||||
-h, --help Show this help
|
||||
|
||||
Examples:
|
||||
node manage-attendees.mjs --event-id "xxx" --add "RK,jc"
|
||||
node manage-attendees.mjs --event-id "xxx" --remove "jc"
|
||||
`);
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
if (!values['event-id']) {
|
||||
console.error('Error: --event-id is required');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (!values.add && !values.remove) {
|
||||
console.error('Error: Either --add or --remove is required');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
const calendarId = values.calendar;
|
||||
const eventId = values['event-id'];
|
||||
|
||||
if (values.add) {
|
||||
const names = values.add.split(',').map(s => s.trim()).filter(Boolean);
|
||||
const { resolved, unresolved } = resolveNames(names);
|
||||
|
||||
if (values['user-ids']) {
|
||||
resolved.push(...values['user-ids'].split(',').map(s => s.trim()).filter(Boolean));
|
||||
}
|
||||
|
||||
if (unresolved.length > 0) {
|
||||
console.warn(`Warning: Could not resolve names: ${unresolved.join(', ')}`);
|
||||
}
|
||||
|
||||
if (resolved.length === 0) {
|
||||
console.error('No valid attendees to add');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log(`Adding attendees: ${resolved.map(id => getDisplayNameSync(id)).join(', ')}`);
|
||||
const result = await addEventAttendees(calendarId, eventId, resolved);
|
||||
console.log('✅ Attendees added successfully!');
|
||||
console.log(`Updated attendees: ${(result.attendees || []).map(a => a.display_name).join(', ')}`);
|
||||
}
|
||||
|
||||
if (values.remove) {
|
||||
const names = values.remove.split(',').map(s => s.trim()).filter(Boolean);
|
||||
const { resolved, unresolved } = resolveNames(names);
|
||||
|
||||
if (unresolved.length > 0) {
|
||||
console.warn(`Warning: Could not resolve names: ${unresolved.join(', ')}`);
|
||||
}
|
||||
|
||||
if (resolved.length === 0) {
|
||||
console.error('No valid attendees to remove');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log(`Removing attendees: ${resolved.map(id => getDisplayNameSync(id)).join(', ')}`);
|
||||
await removeEventAttendees(calendarId, eventId, resolved);
|
||||
console.log('✅ Attendees removed successfully!');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Failed:', error.message);
|
||||
if (error.larkResponse) {
|
||||
console.error('Lark response:', JSON.stringify(error.larkResponse, null, 2));
|
||||
}
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user