From 1d249d13ba45b7f004968cef58e6ade06875961f Mon Sep 17 00:00:00 2001 From: sysadmin Date: Mon, 17 Nov 2025 15:56:23 +0000 Subject: [PATCH] fix: Bot registration duplicate prevention and SilverPay integration update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixed BotService to prevent duplicate bot registrations by checking for existing bot with same name/type - Updated existing bot record instead of creating duplicates on re-registration - Configured SilverPay integration with production API key - Updated TeleBot configuration for local development (localhost API URL, Tor disabled) This ensures single bot instances and proper payment gateway integration for testing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- LittleShop/Services/BotService.cs | 37 +++++++++++++++++++++++-- LittleShop/appsettings.Development.json | 2 +- TeleBot/TeleBot/appsettings.json | 4 +-- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/LittleShop/Services/BotService.cs b/LittleShop/Services/BotService.cs index a9b15ad..92c2b6c 100644 --- a/LittleShop/Services/BotService.cs +++ b/LittleShop/Services/BotService.cs @@ -26,10 +26,41 @@ public class BotService : IBotService public async Task RegisterBotAsync(BotRegistrationDto dto) { - _logger.LogInformation("Registering new bot: {BotName}", dto.Name); + _logger.LogInformation("Registering bot: {BotName} (Type: {BotType})", dto.Name, dto.Type); + // Check if a bot with the same name and type already exists + var existingBot = await _context.Bots + .FirstOrDefaultAsync(b => b.Name == dto.Name && b.Type == dto.Type); + + if (existingBot != null) + { + _logger.LogInformation("Bot already exists: {BotId}. Updating existing bot instead of creating duplicate.", existingBot.Id); + + // Update existing bot + existingBot.Description = dto.Description; + existingBot.Version = dto.Version; + existingBot.Settings = JsonSerializer.Serialize(dto.InitialSettings); + existingBot.PersonalityName = string.IsNullOrEmpty(dto.PersonalityName) ? existingBot.PersonalityName : dto.PersonalityName; + existingBot.Status = BotStatus.Active; + existingBot.IsActive = true; + existingBot.LastConfigSyncAt = DateTime.UtcNow; + + await _context.SaveChangesAsync(); + + _logger.LogInformation("Existing bot updated: {BotId}", existingBot.Id); + + return new BotRegistrationResponseDto + { + BotId = existingBot.Id, + BotKey = existingBot.BotKey, + Name = existingBot.Name, + Settings = dto.InitialSettings + }; + } + + // Create new bot if none exists var botKey = await GenerateBotKeyAsync(); - + var bot = new Bot { Id = Guid.NewGuid(), @@ -48,7 +79,7 @@ public class BotService : IBotService _context.Bots.Add(bot); await _context.SaveChangesAsync(); - _logger.LogInformation("Bot registered successfully: {BotId}", bot.Id); + _logger.LogInformation("New bot registered successfully: {BotId}", bot.Id); return new BotRegistrationResponseDto { diff --git a/LittleShop/appsettings.Development.json b/LittleShop/appsettings.Development.json index bb136cf..5db3fc2 100644 --- a/LittleShop/appsettings.Development.json +++ b/LittleShop/appsettings.Development.json @@ -10,7 +10,7 @@ }, "SilverPay": { "BaseUrl": "http://10.0.0.51:5500", - "ApiKey": "sp_test_key_development", + "ApiKey": "OCTk42VKenf5KZqKDDRAAskxf53yJsEby72j99Fc", "WebhookSecret": "webhook_secret_dev", "DefaultWebhookUrl": "http://localhost:5000/api/orders/payments/webhook", "AllowUnsignedWebhooks": true diff --git a/TeleBot/TeleBot/appsettings.json b/TeleBot/TeleBot/appsettings.json index b7a4ef2..586a886 100644 --- a/TeleBot/TeleBot/appsettings.json +++ b/TeleBot/TeleBot/appsettings.json @@ -20,7 +20,7 @@ "Comment": "Optional secret key for webhook authentication" }, "LittleShop": { - "ApiUrl": "http://littleshop:5000", + "ApiUrl": "http://localhost:5000", "OnionUrl": "", "Username": "admin", "Password": "admin", @@ -34,7 +34,7 @@ "EnableAnalytics": false, "RequirePGPForShipping": false, "EphemeralByDefault": true, - "EnableTor": true, + "EnableTor": false, "TorSocksHost": "tor-gateway", "TorSocksPort": 9050, "TorControlPort": 9051,