2017-05-06 187 views
3

我注意到,对于Bot框架和电报频道,表情符号:)不会转换为表情符号。覆盖机器人框架中的Context.PostAsync

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

最佳解决方案是覆盖context.PostAsync()函数,执行这些类型的字符串替换,然后继续。

我们可以重写此方法,而无需重新编译全部框架?

谢谢:)

回答

4

我以为你在找什么是改变这种机器人发送到用户的消息。

当然,基本的选择只是添加逻辑来检查通道到你的机器人对话框,就是这样。不过,我怀疑你想重新利用其他对话这一逻辑,这也可能意味着只是某处一个静态方法,它允许你做:

context.PostAsync(Utils.TransformMessage(message)); 

现在,如果你真的想要去与最干净的方法,我认为应该实现您自己的IMessageActivityMapper并将其注册到Autofac容器中,以便MapToChannelData_BotToUser实现最终调用它(请参阅here)。

有几个实现了IMessageActivityMapperherehere你可以看看;虽然界面非常简单,并且整个想法是您收到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); 
    } 
}