Files
botpress--botpress/bots/bugbuster/src/services/teams-manager.ts
T
2026-07-13 13:34:48 +08:00

60 lines
1.6 KiB
TypeScript

import * as lin from '../utils/linear-utils'
import * as bp from '.botpress'
export class TeamsManager {
public constructor(
private _linear: lin.LinearApi,
private _client: bp.Client,
private _botId: string
) {}
public async addWatchedTeam(key: string): Promise<void> {
const teamKeys = await this._getWatchedTeams()
if (teamKeys.includes(key)) {
throw new Error(`The team with the key '${key}' is already being watched.`)
}
if (!(await this._linear.isTeam(key))) {
throw new Error(`The team with the key '${key}' does not exist.`)
}
await this._setWatchedTeams([...teamKeys, key])
}
public async removeWatchedTeam(key: string): Promise<void> {
const teamKeys = await this._getWatchedTeams()
if (!teamKeys.includes(key)) {
throw new Error(`The team with the key '${key}' is not currently being watched.`)
}
await this._setWatchedTeams(teamKeys.filter((team) => team !== key))
}
public async listWatchedTeams(): Promise<string[]> {
const teamKeys = await this._getWatchedTeams()
return teamKeys
}
private _getWatchedTeams = async () => {
return (
await this._client.getOrSetState({
id: this._botId,
name: 'watchedTeams',
type: 'bot',
payload: {
teamKeys: [],
},
})
).state.payload.teamKeys
}
private _setWatchedTeams = async (teamKeys: string[]) => {
await this._client.setState({
id: this._botId,
name: 'watchedTeams',
type: 'bot',
payload: {
teamKeys,
},
})
}
}