import process from "node:process";
export async function updateTicketCoordinator() {
const { WebClient, LogLevel } = import("npm:@slack/web-api");
const slackAccessToken = process.env.slackAccessToken;
if (!slackAccessToken) {
console.error("Missing environment variable: slackAccessToken");
process.exit(1);
}
const teamId = process.env.teamId || "T1234567890";
const fieldId = process.env.fieldId || "Xf05EN1QF3HN";
const groupId = process.env.groupId || "S05DVA7MFHT";
console.log(
`Use teamId: ${teamId}. Specify environment variable "teamId" to override.`,
);
console.log(
`Use fieldId: ${fieldId}. Specify environment variable "fieldId" to override.`,
);
console.log(
`Use groupId: ${groupId}. Specify environment variable "groupId" to override.`,
);
try {
const client = new WebClient(slackAccessToken, { logLevel: LogLevel.WARN });
const result = await client.users.list({ team_id: teamId });
let users = result.members;
users = users.filter((user) => !user.deleted);
users = users.filter((user) => !!user.is_email_confirmed);
users = users.filter((user) =>
!user.is_restricted && !user.is_ultra_restricted
);
console.log(`Found ${users.length} users in team ${teamId}`);
const profiles = await Promise.all(users.map(async (user) => {
const result = await client.users.profile.get({ user: user.id });
const fields = result?.profile?.fields;
return {
id: user.id,
displayName: user.profile.display_name,
ticketsCoordinator: !!(fields[fieldId]?.value == "Yes"),
};
}));
console.log(`Fetched ${profiles.length} profiles in team ${teamId}`);
const ticketsCoordinators = profiles.filter((profile) =>
profile.ticketsCoordinator
);
console.log(
`Filtered ${ticketsCoordinators.length} tickets coordinators in team ${teamId}`,
);
await client.usergroups.users.update({
usergroup: groupId,
team_id: teamId,
users: ticketsCoordinators.map((user) => user.id),
});
console.log(
`Group ${groupId} updated with ${ticketsCoordinators.length} users`,
);
}
catch (error) {
console.error(error);
}
}