diff --git a/src/Infrastructure/BotSharp.Abstraction/Conversations/ConversationHookBase.cs b/src/Infrastructure/BotSharp.Abstraction/Conversations/ConversationHookBase.cs index 0f115d5d..a84c8693 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Conversations/ConversationHookBase.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Conversations/ConversationHookBase.cs @@ -79,6 +79,6 @@ public abstract class ConversationHookBase : IConversationHook public virtual Task OnNotificationGenerated(RoleDialogModel message) => Task.CompletedTask; - public Task OnUserDisconnected(Conversation conversation) + public virtual Task OnUserDisconnected(Conversation conversation) => Task.CompletedTask; } diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs index 4e5998fb..647282a4 100644 --- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs +++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs @@ -171,7 +171,8 @@ public partial class FileRepository var json = File.ReadAllText(convFile); var conv = JsonSerializer.Deserialize(json, _options); - var tags = conv.Tags.Concat(toAddTags).ToList(); + var tags = conv.Tags ?? []; + tags = tags.Concat(toAddTags).Distinct().ToList(); conv.Tags = tags.Where(x => !toDeleteTags.Contains(x, StringComparer.OrdinalIgnoreCase)).ToList(); conv.UpdatedTime = DateTime.UtcNow; diff --git a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs index 393846bf..ebae075b 100644 --- a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs +++ b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs @@ -142,10 +142,12 @@ public partial class MongoRepository var conv = _dc.Conversations.Find(filter).FirstOrDefault(); if (conv == null) return false; - + var tags = conv.Tags ?? []; + tags = tags.Concat(toAddTags).Distinct().ToList(); + tags = tags.Where(x => !toDeleteTags.Contains(x, StringComparer.OrdinalIgnoreCase)).ToList(); var update = Builders.Update - .Set(x => x.Tags, tags ?? new()) + .Set(x => x.Tags, tags) .Set(x => x.UpdatedTime, DateTime.UtcNow); var res = _dc.Conversations.UpdateOne(filter, update);