1
1
# Copyright (c) Microsoft Corporation. All rights reserved.
2
2
# Licensed under the MIT License.
3
3
4
- from typing import List
5
-
6
- from botbuilder .schema import ActivityTypes , ChannelAccount , MessageReaction
4
+ from http import HTTPStatus
5
+ from botbuilder .schema import ActivityTypes , ChannelAccount
7
6
from botbuilder .core .turn_context import TurnContext
8
- from botbuilder .core import ActivityHandler , MessageFactory
9
- from botbuilder .schema .teams import TeamInfo , ChannelInfo , TeamsChannelData , TenantInfo , TeamsChannelAccount
7
+ from botbuilder .core import ActivityHandler , MessageFactory , InvokeResponse
8
+ from botbuilder .schema .teams import (
9
+ TeamInfo ,
10
+ ChannelInfo ,
11
+ TeamsChannelData ,
12
+ TeamsChannelAccount ,
13
+ )
10
14
from botframework .connector import Channels
11
- from http import HTTPStatus
12
- from botbuilder .core import InvokeResponse
13
-
14
- from pprint import pprint
15
- import jsonpickle
16
15
17
16
class TeamsActivityHandler (ActivityHandler ):
18
17
async def on_turn (self , turn_context : TurnContext ):
19
18
if turn_context is None :
20
19
raise TypeError ("ActivityHandler.on_turn(): turn_context cannot be None." )
21
20
22
-
23
21
if hasattr (turn_context , "activity" ) and turn_context .activity is None :
24
22
raise TypeError (
25
23
"ActivityHandler.on_turn(): turn_context must have a non-None activity."
@@ -34,52 +32,74 @@ async def on_turn(self, turn_context: TurnContext):
34
32
)
35
33
36
34
if turn_context .activity .type == ActivityTypes .invoke :
37
-
A93C
invokeResponse = await on_invoke_activity (turn_context )
35
+ invoke_response = await self . on_invoke_activity (turn_context )
38
36
else :
39
37
await super ().on_turn (turn_context )
40
-
41
38
42
- async def on_invoke_activity (turn_context : TurnContext ):
39
+ async def on_invoke_activity (self , turn_context : TurnContext ):
43
40
try :
44
- if turn_context .activity .name == None and turn_context .activity .channel_id == Channels .Msteams :
45
- return #await on_teams_card_action_invoke_activity(turn_context)
46
- else :
47
- turn_context .send_activity (MessageFactory .text ("working" ))
41
+ if (
42
+ turn_context .activity .name is None
43
+ and turn_context .activity .channel_id == Channels .Msteams
44
+ ):
45
+ return # await on_teams_card_action_invoke_activity(turn_context)
46
+
47
+ turn_context .send_activity (MessageFactory .text ("working" ))
48
48
except :
49
49
return
50
-
50
+
51
51
async def on_conversation_update_activity (self , turn_context : TurnContext ):
52
- print (turn_context .activity )
53
52
if turn_context .activity .channel_id == Channels .ms_teams :
54
53
channel_data = TeamsChannelData (** turn_context .activity .channel_data )
55
54
56
- if turn_context .activity .members_added != None :
57
- return await self .on_teams_members_added_dispatch_activity (turn_context .activity .members_added , channel_data .team , turn_context )
55
+ if turn_context .activity .members_added is not None :
56
+ return await self .on_teams_members_added_dispatch_activity (
57
+ turn_context .activity .members_added , channel_data .team , turn_context
58
+ )
59
+
60
+ if turn_context .activity .members_removed is not None :
61
+ return await self .on_teams_members_removed_dispatch_activity (
62
+ turn_context .activity .members_removed ,
63
+ channel_data .team ,
64
+ turn_context ,
65
+ )
58
66
59
- if turn_context .activity .members_removed != None :
60
- return await self .on_teams_members_removed_dispatch_activity (turn_context .activity .members_removed , channel_data .team , turn_context )
61
-
62
- if channel_data != None :
67
+ if channel_data is not None :
63
68
if channel_data .event_type == "channelCreated" :
64
- return await self .on_teams_channel_created_activity (channel_data .channel , channel_data .team , turn_context )
65
- elif channel_data .event_type == "channelDeleted" :
66
- return await self .on_teams_channel_deleted_activity (channel_data .channel , channel_data .team , turn_context )
67
- elif channel_data .event_type == "channelRenamed" :
68
- return await self .on_teams_channel_renamed_activity (channel_data .channel , channel_data .team , turn_context )
69
- elif channel_data .event_type == "teamRenamed" :
70
- return await self .on_teams_team_renamed_activity (channel_data .team , turn_context )
71
- else :
72
- return await super ().on_conversation_update_activity (turn_context )
73
-
69
+ return await self .on_teams_channel_created_activity (
70
+ channel_data .channel , channel_data .team , turn_context
71
+ )
72
+ if channel_data .event_type == "channelDeleted" :
73
+ return await self .on_teams_channel_deleted_activity (
74
+ channel_data .channel , channel_data .team , turn_context
75
+ )
76
+ if channel_data .event_type == "channelRenamed" :
77
+ return await self .on_teams_channel_renamed_activity (
78
+ channel_data .channel , channel_data .team , turn_context )
79
+ if channel_data .event_type == "teamRenamed" :
80
+ return await self .on_teams_team_renamed_activity (
81
+ channel_data .team , turn_context
82
+ )
83
+ return await super ().on_conversation_update_activity (turn_context )
84
+
74
85
return await super ().on_conversation_update_activity (turn_context )
75
-
76
- async def on_teams_channel_created_activity (self , channel_info : ChannelInfo , team_info : TeamInfo , turn_context : TurnContext ):
86
+
87
+ async def on_teams_channel_created_activity ( # pylint: disable=unused-argument
88
+ self , channel_info : ChannelInfo , team_info : TeamInfo , turn_context : TurnContext
89
+ ):
77
90
return
78
-
79
- async def on_teams_team_renamed_activity (self , team_info : TeamInfo , turn_context : TurnContext ):
91
+
92
+ async def on_teams_team_renamed_activity ( # pylint: disable=unused-argument
93
+ self , team_info : TeamInfo , turn_context : TurnContext
94
+ ):
80
95
return
81
96
82
- async def on_teams_members_added_dispatch_activity (self , members_added : [ChannelAccount ], team_info : TeamInfo , turn_context : TurnContext ):
97
+ async def on_teams_members_added_dispatch_activity ( # pylint: disable=unused-argument
98
+ self ,
99
+ members_added : [ChannelAccount ],
100
+ team_info : TeamInfo ,
101
+ turn_context : TurnContext ,
102
+ ):
83
103
"""
84
104
team_members = {}
85
105
team_members_added = []
@@ -90,64 +110,79 @@ async def on_teams_members_added_dispatch_activity(self, members_added: [Channel
90
110
if team_members == {}:
91
111
result = await TeamsInfo.get_members_async(turn_context)
92
112
team_members = { i.id : i for i in result }
93
-
113
+
94
114
if member.id in team_members:
95
115
team_members_added.append(member)
96
116
else:
97
117
newTeamsChannelAccount = TeamsChannelAccount(
98
- id=member.id,
99
- name = member.name,
118
+ id=member.id,
119
+ name = member.name,
100
120
aad_object_id = member.aad_object_id,
101
121
role = member.role
102
122
)
103
123
team_members_added.append(newTeamsChannelAccount)
104
-
124
+
105
125
return await self.on_teams_members_added_activity(teams_members_added, team_info, turn_context)
106
126
"""
107
127
for member in members_added :
108
- newAccountJson = member .__dict__
109
- del newAccountJson ["additional_properties" ]
110
- member = TeamsChannelAccount (** newAccountJson )
128
+ new_account_json = member .__dict__
129
+ del new_account_json ["additional_properties" ]
130
+ member = TeamsChannelAccount (** new_account_json )
111
131
return await self .on_teams_members_added_activity (members_added , turn_context )
112
132
113
- async def on_teams_members_added_activity (self , teams_members_added : [TeamsChannelAccount ], turn_context : TurnContext ):
133
+ async def on_teams_members_added_activity (
134
+ self , teams_members_added : [TeamsChannelAccount ], turn_context : TurnContext
135
+ ):
114
136
for member in teams_members_added :
115
137
member = ChannelAccount (member )
116
- return super ().on_members_added_activity (members_added , turn_context )
117
-
118
- async def on_teams_members_removed_dispatch_activity (self , members_removed : List , team_info : TeamInfo , turn_context : TurnContext ):
138
+ return super ().on_members_added_activity (teams_members_added , turn_context )
139
+
140
+ async def on_teams_members_removed_dispatch_activity ( # pylint: disable=unused-argument
141
+ self ,
142
+ members_removed : [ChannelAccount ],
143
+ team_info : TeamInfo ,
144
+ turn_context : TurnContext ,
145
+ ):
119
146
teams_members_removed = []
120
147
for member in members_removed :
121
- newAccountJson = member .__dict__
122
- del newAccountJson ["additional_properties" ]
123
- teams_members_removed .append (TeamsChannelAccount (** newAccountJson ))
124
-
125
- return await self .on_teams_members_removed_activity (teams_members_removed , turn_context )
126
-
127
- async def on_teams_members_removed_activity (self , teams_members_removed : [TeamsChannelAccount ], turn_context : TurnContext ):
128
- members_removed = [ ChannelAccount (i ) for i in teams_members_removed ]
148
+ new_account_json = member .__dict__
149
+ del new_account_json ["additional_properties" ]
150
+ teams_members_removed .append (TeamsChannelAccount (** new_account_json ))
151
+
152
+ return await self .on_teams_members_removed_activity (
153
+ teams_members_removed , turn_context
154
+ )
155
+
156
+ async def on_teams_members_removed_activity (
157
+ self , teams_members_removed : [TeamsChannelAccount ], turn_context : TurnContext
158
+ ):
159
+ members_removed = [ChannelAccount (i ) for i in teams_members_removed ]
129
160
return super ().on_members_removed_activity (members_removed , turn_context )
130
161
131
-
132
-
162
+ async def on_teams_channel_deleted_activity ( # pylint: disable=unused-argument
163
+ self , channel_info : ChannelInfo , team_info : TeamInfo , turn_context : TurnContext
164
+ ):
165
+ return # Task.CompleteTask
133
166
134
- async def on_teams_channel_deleted_activity (self , channel_info : ChannelInfo , team_info : TeamInfo , turn_context : TurnContext ):
135
- return #Task.CompleteTask
167
+ async def on_teams_channel_renamed_activity ( # pylint: disable=unused-argument
168
+ self , channel_info : ChannelInfo , team_info : TeamInfo , turn_context : TurnContext
169
+ ):
170
+ return # Task.CompleteTask
136
171
137
- async def on_teams_channel_renamed_activity (self , channel_info : ChannelInfo , team_info : TeamInfo , turn_context : TurnContext ):
138
- return #Task.CompleteTask
139
-
140
- async def on_teams_team_reanamed_async (self , teamInfo : TeamInfo , turn_context : TurnContext ):
141
- return #Task.CompleteTask
172
+ async def on_teams_team_reanamed_async ( # pylint: disable=unused-argument
173
+ self , team_info : TeamInfo , turn_context : TurnContext
174
+ ):
175
+ return # Task.CompleteTask
142
176
143
177
@staticmethod
144
178
def _create_invoke_response (body : object = None ) -> InvokeResponse :
145
- return InvokeResponse (status = int (HTTPStatus .OK ), body = body )
146
-
179
+ return InvokeResponse (status = int (HTTPStatus .OK ), body = body )
180
+
147
181
class _InvokeResponseException (Exception ):
148
182
def __init__ (self , status_code : HTTPStatus , body : object = None ):
149
- self ._statusCode = status_code
183
+ super ().__init__ ()
184
+ self ._status_code = status_code
150
185
self ._body = body
151
186
152
- def create_invoke_response () -> InvokeResponse :
153
- return InvokeResponse (status = int (self ._statusCode ), body = self ._body )
187
+ def create_invoke_response (self ) -> InvokeResponse :
188
+ return InvokeResponse (status = int (self ._status_code ), body = self ._body )
0 commit comments