在机器人框架中覆盖 Context.PostAsync
Override Context.PostAsync in the bot framework
我注意到使用 Bot Framework 和 Telegram 频道时,像 :) 这样的笑脸不会转换为表情符号。
不过,其实很简单,我们只需要将:)改成:smile:,一个好看的emoji就出现了。
最佳解决方案是覆盖 context.PostAsync()
函数,执行那种字符串替换,然后继续。
我们可以覆盖这个方法,而不重新编译所有框架吗?
谢谢:)
我假设您要查看的是更改机器人发送给用户的消息。
当然,基本选项是将检查频道的逻辑添加到您的机器人对话框中,仅此而已。但是,我怀疑您想在其他对话框中重新利用该逻辑,这也可能意味着某个地方的静态方法允许您执行以下操作:
context.PostAsync(Utils.TransformMessage(message));
现在,如果您真的想采用最简洁的方法,我认为应该实现您自己的 IMessageActivityMapper
并将其注册到 Autofac 容器中,这样 MapToChannelData_BotToUser
实现最终会调用它(参见 here)。
有一些 IMessageActivityMapper
here and here 的实现你可以看看;虽然界面非常简单,但整个想法是您收到 IMessageActivity
,更新任何现有属性(在您的情况下,它将是文本 属性)和更新后的 return 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);
}
}
我注意到使用 Bot Framework 和 Telegram 频道时,像 :) 这样的笑脸不会转换为表情符号。
不过,其实很简单,我们只需要将:)改成:smile:,一个好看的emoji就出现了。
最佳解决方案是覆盖 context.PostAsync()
函数,执行那种字符串替换,然后继续。
我们可以覆盖这个方法,而不重新编译所有框架吗?
谢谢:)
我假设您要查看的是更改机器人发送给用户的消息。
当然,基本选项是将检查频道的逻辑添加到您的机器人对话框中,仅此而已。但是,我怀疑您想在其他对话框中重新利用该逻辑,这也可能意味着某个地方的静态方法允许您执行以下操作:
context.PostAsync(Utils.TransformMessage(message));
现在,如果您真的想采用最简洁的方法,我认为应该实现您自己的 IMessageActivityMapper
并将其注册到 Autofac 容器中,这样 MapToChannelData_BotToUser
实现最终会调用它(参见 here)。
有一些 IMessageActivityMapper
here and here 的实现你可以看看;虽然界面非常简单,但整个想法是您收到 IMessageActivity
,更新任何现有属性(在您的情况下,它将是文本 属性)和更新后的 return 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);
}
}