(params: Record<string, unknown>, context: ToolExecutionContext)
| 14 | } |
| 15 | |
| 16 | async function handler(params: Record<string, unknown>, context: ToolExecutionContext): Promise<ToolResult> { |
| 17 | const { locale } = context |
| 18 | const members = await context.dataProvider!.getMembers() |
| 19 | |
| 20 | let filteredMembers = members |
| 21 | if (params.search) { |
| 22 | const keyword = (params.search as string).toLowerCase() |
| 23 | filteredMembers = members.filter((m) => { |
| 24 | if (m.groupNickname && m.groupNickname.toLowerCase().includes(keyword)) return true |
| 25 | if (m.accountName && m.accountName.toLowerCase().includes(keyword)) return true |
| 26 | if (m.platformId.includes(keyword)) return true |
| 27 | if (m.aliases.some((alias) => alias.toLowerCase().includes(keyword))) return true |
| 28 | return false |
| 29 | }) |
| 30 | } |
| 31 | |
| 32 | if (params.limit && (params.limit as number) > 0) { |
| 33 | filteredMembers = filteredMembers.slice(0, params.limit as number) |
| 34 | } |
| 35 | |
| 36 | const msgSuffix = isChineseLocale(locale) ? '条' : '' |
| 37 | const aliasLabel = t('alias', locale) |
| 38 | const data = { |
| 39 | totalMembers: members.length, |
| 40 | returnedMembers: filteredMembers.length, |
| 41 | members: filteredMembers.map((m) => { |
| 42 | const displayName = m.groupNickname || m.accountName || m.platformId |
| 43 | const aliasStr = m.aliases.length > 0 ? `|${aliasLabel}:${m.aliases.join(',')}` : '' |
| 44 | return `${m.id}|${m.platformId}|${displayName}|${m.messageCount}${msgSuffix}${aliasStr}` |
| 45 | }), |
| 46 | } |
| 47 | |
| 48 | return { content: JSON.stringify(data), data } |
| 49 | } |
| 50 | |
| 51 | export const getMembersTool: ToolDefinition = { |
| 52 | name: 'get_members', |
nothing calls this directly
no test coverage detected