TeamsActivityHandler 和 ActivityHandler 有什么区别?

What is the difference between TeamsActivityHandler and ActivityHandler?

在大多数文档中,您会看到:

class BotHandler(ActivityHandler):
    async def on_message_activity(self, turn_context: TurnContext):
        await turn_context.send_activity("Hello!")

但是,some Python examples 将使用 TeamsActivityHandler 代替:

class BotHandler(TeamsActivityHandler):
    async def on_message_activity(self, turn_context: TurnContext):
        message = MessageFactory.text("first message")
        channel_id = teams_get_channel_id(turn_context.activity)

我注意到

  1. TeamsActivityHandler 继承时,我可以重载创建新频道时调用的 on_teams_channel_created()
  2. ActivityHandler继承时,我可以重载on_members_added_activity()来问候新用户(欢迎信息)。

如何同时使用两者?

使用 Microsoft Bot Framework 创建的机器人可用于多种用途(它是一个通用的机器人框架),例如用于网络聊天、闲聊等 - Teams 只是其中一种可能的“渠道”,正如它们所称的那样。因此,发挥作用的 'main' class 是 ActivityHandler,但对于 Teams 开发,有一个派生的 class (TeamsActivityHandler),它有一些额外的 Teams 特定包装纸。

我找到了解决方案。如果您继承自 TeamsActivityHandler,您可以改写 on_teams_members_added()

这是相当违反直觉的,因为当您从 TeamsActivityHandler 继承(它又从 TeamsActivity 继承)时,您假设获得了相同的功能(即:能够重写相同的功能) )).由于 super() used here.

,情况似乎并非如此

如果您继承自 TeamsActivity,您可以照常覆盖 on_members_added_activity()

不确定这是错误还是奇怪的设计。