From 62e833d6b8c7acf14d5d5b0f1f611bac5b7e9758 Mon Sep 17 00:00:00 2001 From: xbotter Date: Tue, 27 Jun 2023 07:12:38 +0800 Subject: [PATCH] add webstarter setting --- .../WeChatBackgroundService.cs | 22 +++++++++++-------- .../BotSharp.Plugin.WeChat/WeChatPlugin.cs | 17 ++++++++++++-- src/WebStarter/WebStarter.csproj | 1 + src/WebStarter/appsettings.json | 13 +++++++++-- 4 files changed, 40 insertions(+), 13 deletions(-) diff --git a/src/Plugins/BotSharp.Plugin.WeChat/WeChatBackgroundService.cs b/src/Plugins/BotSharp.Plugin.WeChat/WeChatBackgroundService.cs index 83a7092f..b7948f03 100644 --- a/src/Plugins/BotSharp.Plugin.WeChat/WeChatBackgroundService.cs +++ b/src/Plugins/BotSharp.Plugin.WeChat/WeChatBackgroundService.cs @@ -1,6 +1,7 @@ using BotSharp.Abstraction.Conversations; using BotSharp.Abstraction.Infrastructures.ContentTransmitters; using BotSharp.Abstraction.Models; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using System; @@ -13,23 +14,26 @@ namespace BotSharp.Plugin.WeChat public class WeChatBackgroundService : IHostedService, IMessageQueue { private readonly Channel _queue; - private readonly IConversationService _conversationService; - private readonly IContentTransfer _contentTransfer; + private readonly IServiceProvider _service; private readonly ILogger _logger; - public WeChatBackgroundService(IConversationService conversationService, - IContentTransfer contentTransfer, + public WeChatBackgroundService( + IServiceProvider service, ILogger logger) { - this._conversationService = conversationService; - this._contentTransfer = contentTransfer; + + this._service = service; this._logger = logger; this._queue = Channel.CreateUnbounded(); } private async Task HandleTextMessageAsync(string openid, string message) { - var conversations = _conversationService.GetDialogHistory(openid); + var scoped = _service.CreateScope().ServiceProvider; + var conversationService = scoped.GetRequiredService(); + var contentTransfer = scoped.GetRequiredService(); + + var conversations = conversationService.GetDialogHistory(openid); conversations.Add(new RoleDialogModel { Role = "User", @@ -41,13 +45,13 @@ namespace BotSharp.Plugin.WeChat Conversations = conversations }; - var result = await _contentTransfer.Transport(container); + var result = await contentTransfer.Transport(container); if (result.IsSuccess) { var output = container.Output.Text.Trim(); await ReplyTextMessageAsync(openid, output); - _conversationService.AddDialog(new RoleDialogModel() + conversationService.AddDialog(new RoleDialogModel() { Role = "Assistant", Text = output, diff --git a/src/Plugins/BotSharp.Plugin.WeChat/WeChatPlugin.cs b/src/Plugins/BotSharp.Plugin.WeChat/WeChatPlugin.cs index 6ed9fb72..bd8caa27 100644 --- a/src/Plugins/BotSharp.Plugin.WeChat/WeChatPlugin.cs +++ b/src/Plugins/BotSharp.Plugin.WeChat/WeChatPlugin.cs @@ -13,6 +13,10 @@ using System.Text; using Senparc.Weixin; using Senparc.Weixin.MP; using Senparc.Weixin.MP.MessageHandlers.Middleware; +using Senparc.Weixin.Entities; +using Senparc.CO2NET.RegisterServices; +using Microsoft.Extensions.Logging; +using Microsoft.AspNetCore.Http; namespace BotSharp.Plugin.WeChat { @@ -23,7 +27,12 @@ namespace BotSharp.Plugin.WeChat { services.AddMemoryCache(); - services.AddSenparcWeixinServices(config); + services.Configure(config.GetSection("WeChat")); + + if (!Senparc.CO2NET.RegisterServices.RegisterServiceExtension.SenparcGlobalServicesRegistered) + { + services = services.AddSenparcGlobalServices(config); + } services.AddHostedService(); @@ -33,17 +42,21 @@ namespace BotSharp.Plugin.WeChat public void Configure(IApplicationBuilder app) { var env = app.ApplicationServices.GetRequiredService(); + var logger = app.ApplicationServices.GetRequiredService>(); + var register = app.UseSenparcGlobal(env); register.UseSenparcWeixin(null, (svc, settings) => { svc.RegisterMpAccount(settings, "WeChat"); }, app.ApplicationServices); - app.UseMessageHandlerForMp("/WeixinAsync", BotSharpMessageHandler.GenerateMessageHandler, options => + app.UseMessageHandlerForMp("/WeChatAsync", BotSharpMessageHandler.GenerateMessageHandler, options => { options.AccountSettingFunc = context => Senparc.Weixin.Config.SenparcWeixinSetting; }); + logger.LogInformation("WeChat Message Handler is running on /WeChatAsync."); + } } } diff --git a/src/WebStarter/WebStarter.csproj b/src/WebStarter/WebStarter.csproj index 7991ff98..e2abd70d 100644 --- a/src/WebStarter/WebStarter.csproj +++ b/src/WebStarter/WebStarter.csproj @@ -42,6 +42,7 @@ + diff --git a/src/WebStarter/appsettings.json b/src/WebStarter/appsettings.json index 90f666a2..bd849f57 100644 --- a/src/WebStarter/appsettings.json +++ b/src/WebStarter/appsettings.json @@ -14,7 +14,7 @@ }, "Conversation": { - + }, "LlamaSharp": { @@ -60,6 +60,13 @@ "ApiKey": "" }, + "WeChat": { + "Token": "#{Token}#", + "EncodingAESKey": "#{EncodingAESKey}#", + "WeixinAppId": "#{WeixinAppId}#", + "WeixinAppSecret": "#{WeixinAppSecret}#" + }, + "PluginLoader": { "Assemblies": [ "BotSharp.Core", @@ -67,13 +74,15 @@ "BotSharp.Plugin.MetaAI", "BotSharp.Plugin.Qdrant", "BotSharp.Plugin.PaddleSharp" + "BotSharp.Plugin.WeChat" ], "Plugins": [ // "LLamaSharpPlugin", "AzureOpenAiPlugin", "MetaAiPlugin", "QdrantPlugin", - "PaddleSharpPlugin" + "PaddleSharpPlugin", + "WeChatPlugin" ] } }