2017-05-06 191 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); 
    } 
}