在bot框架中覆盖Context.PostAsync

Ynn*_*nad 3 bots telegram-bot botframework

我注意到,通过Bot框架和电报频道,像:)这样的表情符号不会转换为表情符号.

然而,它非常简单,我们只需要改变:)来:微笑:并且会出现一个很好的表情符号.

最佳解决方案是覆盖context.PostAsync()函数,执行那种字符串替换,然后继续.

我们可以重写此方法,而无需重新编译所有框架吗?

谢谢 :)

Eze*_*dib 5

我假设您正在寻找的是更改机器人发送给用户的消息.

当然,基本选项是只需添加逻辑来检查通道进入机器人对话框,就是这样.但是,我怀疑你想在其他对话框上重用这个逻辑,这也可能只是一个允许你做的静态方法:

context.PostAsync(Utils.TransformMessage(message));
Run Code Online (Sandbox Code Playgroud)

现在,如果你真的想要采用最干净的方法,我认为应该实现自己的方法IMessageActivityMapper并将其注册到Autofac容器中,因此MapToChannelData_BotToUser实现最终会调用它(参见此处).

还有的一些实现IMessageActivityMapper 在这里这里,你可以看看; 虽然界面非常简单,整个想法是你收到IMessageActivity,更新任何现有属性(在你的情况下它将是Text属性)并返回更新,IMessageActivity以便它可以发布给用户.

准备好实施后,可以在Autofac中注册,执行以下操作Global.asax.cs.

protected void Application_Start(object sender, EventArgs e)
{
    {
        // http://docs.autofac.org/en/latest/integration/webapi.html#quick-start
        var builder = new ContainerBuilder();

        // Register your mapper 
        builder
        .RegisterType<MyActivityMapper>()
        .AsImplementedInterfaces()
        .SingleInstance();

        // Get your HttpConfiguration.
        var config = GlobalConfiguration.Configuration;

        // Register your Web API controllers.
        builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

        // Set the dependency resolver to be Autofac.
        var container = builder.Build();
        config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
    }
}
Run Code Online (Sandbox Code Playgroud)