@@ -180,7 +180,8 @@ async function fetchChannelMembers(
180180 channelId : string ,
181181 accessToken : string
182182) : Promise < TeamMember [ ] > {
183- const response = await fetch (
183+ // Fetch channel members (users only)
184+ const membersResponse = await fetch (
184185 `https://graph.microsoft.com/v1.0/teams/${ encodeURIComponent ( teamId ) } /channels/${ encodeURIComponent ( channelId ) } /members` ,
185186 {
186187 headers : {
@@ -190,22 +191,52 @@ async function fetchChannelMembers(
190191 }
191192 )
192193
193- if ( ! response . ok ) {
194+ const members : TeamMember [ ] = [ ]
195+
196+ if ( membersResponse . ok ) {
197+ const membersData = await membersResponse . json ( )
198+ const userMembers = ( membersData . value || [ ] ) . map ( ( member : TeamMember ) => ( {
199+ id : member . id ,
200+ displayName : member . displayName || '' ,
201+ userIdentityType : member . userIdentityType ,
202+ } ) )
203+ members . push ( ...userMembers )
204+ } else {
194205 logger . error ( 'Failed to fetch channel members:' , {
195- status : response . status ,
196- statusText : response . statusText ,
206+ status : membersResponse . status ,
207+ statusText : membersResponse . statusText ,
197208 } )
198- return [ ]
199209 }
200210
201- const data = await response . json ( )
202- const members = ( data . value || [ ] ) . map ( ( member : TeamMember ) => ( {
203- id : member . id ,
204- displayName : member . displayName || '' ,
205- userIdentityType : member . userIdentityType ,
206- } ) )
211+ // Fetch installed apps (includes bots) at team level
212+ const appsResponse = await fetch (
213+ `https://graph.microsoft.com/v1.0/teams/${ encodeURIComponent ( teamId ) } /installedApps?$expand=teamsAppDefinition` ,
214+ {
215+ headers : {
216+ Authorization : `Bearer ${ accessToken } ` ,
217+ 'Content-Type' : 'application/json' ,
218+ } ,
219+ }
220+ )
221+
222+ if ( appsResponse . ok ) {
223+ const appsData = await appsResponse . json ( )
224+ const bots = ( appsData . value || [ ] )
225+ . filter ( ( app : any ) => app . teamsAppDefinition ?. bot )
226+ . map ( ( app : any ) => ( {
227+ id : app . teamsAppDefinition . bot . id || app . teamsAppDefinition . teamsAppId ,
228+ displayName : app . teamsAppDefinition . displayName || '' ,
229+ userIdentityType : 'bot' ,
230+ } ) )
231+ members . push ( ...bots )
232+ } else {
233+ logger . warn ( 'Failed to fetch installed apps/bots:' , {
234+ status : appsResponse . status ,
235+ statusText : appsResponse . statusText ,
236+ } )
237+ }
207238
208- logger . info ( 'Fetched channel members:' , {
239+ logger . info ( 'Fetched channel members and bots :' , {
209240 count : members . length ,
210241 members : members . map ( ( m : TeamMember ) => ( {
211242 displayName : m . displayName ,
0 commit comments