OfficeDev / BotBuilder-MicrosoftTeams

Microsoft Bot Builder extension library for developing bots for Microsoft Teams
MIT License
258 stars 150 forks source link

Create wrappers for most of the Node BotBuilder fluent APIs #33

Open billbliss opened 7 years ago

billbliss commented 7 years ago

Consider the following TypeScript code:

        let msg = new msTeamsBuilder.TeamsMessage(session)
            .textFormat(builder.TextFormat.markdown)
            .text(": Retrieving incident IM10272...");
        (msg as msTeamsBuilder.TeamsMessage).addMentionToText({id: "test", name: "@nat.infra"}, msTeamsBuilder.MentionTextLocation.PrependText);

In particular, note the goofy (msg as msTeamsBuilder.TeamsMessage) cast before the botbuilder-teams addMentionToText method. If it's not there, it breaks, saying that addMentionToText is not a method of botbuilder.Message.

Which it isn't - it's a method of TeamsMessage -- but why the error? Because with the Fluent-style APIs used in botbuilder, an explicit cast back to botbuilder.Message is made with every method call (in this case, to .textFormat and .text).

The only way around this, I think, is to create wrappers for all the fluent calls in the TeamsMessage.js library which calls super. That way the objects aren't cast back to the superclass type on every method call of botbuilder.

As it stands now, this is completely mysterious and makes the SDK harder to use.

iceNuts commented 7 years ago

Thanks Bill, let me figure out. I think this is a very important finding which has to be fixed.

RamjotSingh commented 7 years ago

@BillZengMSFT Are we still tracking this?

iceNuts commented 7 years ago

yes we do but I am just too busy to prioritize it