diff --git a/src/Infrastructure/BotSharp.Abstraction/Conversations/ConversationHookBase.cs b/src/Infrastructure/BotSharp.Abstraction/Conversations/ConversationHookBase.cs
index 1592aa8f..5bceefaf 100644
--- a/src/Infrastructure/BotSharp.Abstraction/Conversations/ConversationHookBase.cs
+++ b/src/Infrastructure/BotSharp.Abstraction/Conversations/ConversationHookBase.cs
@@ -67,4 +67,7 @@ public abstract class ConversationHookBase : IConversationHook
public virtual Task OnUserAgentConnectedInitially(Conversation conversation)
=> Task.CompletedTask;
+
+ public virtual Task OnMessageDeleted(string conversationId, string messageId)
+ => Task.CompletedTask;
}
diff --git a/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationHook.cs b/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationHook.cs
index 95afaab4..8552aa20 100644
--- a/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationHook.cs
+++ b/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationHook.cs
@@ -84,4 +84,12 @@ public interface IConversationHook
///
///
Task OnHumanInterventionNeeded(RoleDialogModel message);
+
+ ///
+ /// Delete message in a conversation
+ ///
+ ///
+ ///
+ ///
+ Task OnMessageDeleted(string conversationId, string messageId);
}
diff --git a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.TruncateMessage.cs b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.TruncateMessage.cs
index 1f1cc8fd..8c82eb1f 100644
--- a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.TruncateMessage.cs
+++ b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.TruncateMessage.cs
@@ -8,6 +8,11 @@ public partial class ConversationService : IConversationService
{
var db = _services.GetRequiredService();
var isSaved = db.TruncateConversation(conversationId, messageId, true);
+ var hooks = _services.GetServices().ToList();
+ foreach (var hook in hooks)
+ {
+ await hook.OnMessageDeleted(conversationId, messageId);
+ }
return await Task.FromResult(isSaved);
}
}
diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs
index 49d695f0..b55fb365 100644
--- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs
+++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs
@@ -305,7 +305,7 @@ namespace BotSharp.Core.Repository
public List GetIdleConversations(int batchSize, int messageLimit, int bufferHours)
{
var ids = new List();
- var batchLimit = 50;
+ var batchLimit = 100;
var utcNow = DateTime.UtcNow;
var dir = Path.Combine(_dbSettings.FileRepository, _conversationSettings.DataDir);
diff --git a/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/ChatHubConversationHook.cs b/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/ChatHubConversationHook.cs
index 187c2bf4..045a707a 100644
--- a/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/ChatHubConversationHook.cs
+++ b/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/ChatHubConversationHook.cs
@@ -96,4 +96,14 @@ public class ChatHubConversationHook : ConversationHookBase
await base.OnResponseGenerated(message);
}
+
+ public override async Task OnMessageDeleted(string conversationId, string messageId)
+ {
+ await _chatHub.Clients.User(_user.Id).SendAsync("OnMessageDeleted", new ChatResponseModel
+ {
+ ConversationId = conversationId,
+ MessageId = messageId
+ });
+ await base.OnMessageDeleted(conversationId, messageId);
+ }
}
diff --git a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs
index 968c6b2c..3ff1b925 100644
--- a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs
+++ b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs
@@ -306,7 +306,7 @@ public partial class MongoRepository
public List GetIdleConversations(int batchSize, int messageLimit, int bufferHours)
{
var page = 1;
- var batchLimit = 50;
+ var batchLimit = 100;
var utcNow = DateTime.UtcNow;
var conversationIds = new List();