feat: Add Remote TeleBot Discovery & Configuration
All checks were successful
Build and Deploy LittleShop / Deploy to Production VPS (Manual Only) (push) Has been skipped
Build and Deploy LittleShop / Deploy to Pre-Production (CT109) (push) Successful in 1m0s

- Add discovery API endpoints to TeleBot (probe, initialize, configure, status)
- Add LivenessService for LittleShop connectivity monitoring with 5min shutdown
- Add BotDiscoveryService to LittleShop for remote bot management
- Add Admin UI: DiscoverRemote wizard, RepushConfig page, status badges
- Add remote discovery fields to Bot model (RemoteAddress, RemotePort, etc.)
- Add CheckRemoteStatus and RepushConfig controller actions
- Update Index/Details views to show remote bot indicators
- Shared secret authentication for discovery, BotKey for post-init

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-25 13:41:36 +00:00
parent cdef6f04e1
commit 521bff2c7d
21 changed files with 2931 additions and 545 deletions

View File

@@ -7,6 +7,9 @@
<h1>Bot Management</h1>
<p>
<a href="/Admin/Bots/DiscoverRemote" class="btn btn-success">
<i class="fas fa-satellite-dish"></i> Discover Remote Bot
</a>
<a href="/Admin/Bots/Wizard" class="btn btn-primary">
<i class="fas fa-magic"></i> Create Telegram Bot (Wizard)
</a>
@@ -136,6 +139,12 @@
{
<span class="badge bg-secondary ms-2">@bot.PersonalityName</span>
}
@if (bot.IsRemote)
{
<span class="badge bg-info ms-1" title="Remote bot at @bot.RemoteAddress:@bot.RemotePort">
<i class="fas fa-satellite-dish"></i> Remote
</span>
}
@if (!string.IsNullOrEmpty(bot.Description))
{
<br />
@@ -181,6 +190,37 @@
<span class="badge bg-dark">@bot.Status</span>
break;
}
@if (bot.IsRemote)
{
<br />
@switch (bot.DiscoveryStatus)
{
case "Configured":
<span class="badge bg-success small mt-1" title="Remote bot is fully configured">
<i class="fas fa-check"></i> Configured
</span>
break;
case "Initialized":
<span class="badge bg-info small mt-1" title="Remote bot initialized, awaiting config">
<i class="fas fa-clock"></i> Initialized
</span>
break;
case "Discovered":
<span class="badge bg-warning small mt-1" title="Remote bot discovered, needs setup">
<i class="fas fa-exclamation"></i> Needs Setup
</span>
break;
case "Offline":
case "Error":
<span class="badge bg-danger small mt-1" title="Remote bot is offline or errored">
<i class="fas fa-times"></i> @bot.DiscoveryStatus
</span>
break;
default:
<span class="badge bg-secondary small mt-1">@bot.DiscoveryStatus</span>
break;
}
}
</td>
<td>
<span class="badge bg-primary">@bot.ActiveSessions</span>