如何正确使用TeamsInfo库?仅获取用户资料排除机器人信息
解决Teams机器人在on_members_added中返回自身信息的问题
你遇到的问题是因为Teams触发on_members_added_activity时,会把机器人自身也包含在members_added列表里,导致代码同时处理用户和机器人,输出了非预期的机器人相关信息。
解决思路很直接:遍历成员列表时,先判断当前成员是否是机器人本身,是的话直接跳过即可。机器人的ID可以通过turn_context.activity.recipient.id获取,将其与当前遍历的成员ID对比就能完成过滤。
修改后的完整代码如下:
async def on_members_added_activity( self, members_added: List[ChannelAccount], turn_context: TurnContext ): # 获取机器人自身的ID bot_id = turn_context.activity.recipient.id for member in members_added: # 跳过机器人自身,只处理真实用户 if member.id == bot_id: continue # 获取Teams成员信息 teams_member = await self.get_member(turn_context, member.id) if teams_member: self.full_name = f"{teams_member.given_name} {teams_member.surname}" self.name = teams_member.given_name self.email = teams_member.email self.organization = self.email.split("@")[1].split(".")[0] self.selected_option = self.organization await turn_context.send_activity(greeting(self.name)) else: self.selected_option = None await turn_context.send_activity("Welcome! We couldn't retrieve your detailed information.") async def get_member(self, turn_context: TurnContext, member_id: str) -> TeamsChannelAccount: try: if turn_context.activity.channel_data: member = await TeamsInfo.get_member(turn_context, member_id) return TeamsChannelAccount().deserialize(member.serialize()) else: raise ValueError("No channel_data available in TurnContext activity.") except Exception as e: print(f"Error retrieving member: {e}") return None
核心改动说明:
- 新增
bot_id = turn_context.activity.recipient.id获取机器人自身ID - 在遍历成员时添加判断
if member.id == bot_id: continue,直接跳过机器人条目
这样修改后,代码只会处理加入的真实用户,不会再输出机器人相关的信息。
内容的提问来源于stack exchange,提问作者un-nun
相关产品推荐
相关产品推荐

