- Volume was mounted at ~/.claude only, but claude-code writes auth to ~/.claude.json too — that file lived on the ephemeral container layer and was lost on every recreate. Now the whole $HOME is on the named volume, and claude-config moved outside HOME (/app) so it isn't shadowed by it. - Default /news topic was hardcoded to AI; now it's a configurable DEFAULT_TOPIC (plain "главные новости дня"), topic is fully free-form. - Prompt now instructs Claude to send interim "⏳ ..." progress updates via send_to_telegram while researching, not just the final digest — a bare request like "call this tool" was already taking 3+ minutes end-to-end, so silence read as broken. - All user-facing/prompt text moved into bot/lib/lexicon.dart. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
38 lines
1000 B
Dart
38 lines
1000 B
Dart
import 'dart:io';
|
|
import 'lexicon.dart';
|
|
|
|
class Config {
|
|
final String telegramToken;
|
|
final Set<int> allowedChatIds;
|
|
final String defaultTopic;
|
|
final int claudeTimeoutSeconds;
|
|
final String mcpConfigPath;
|
|
|
|
Config({
|
|
required this.telegramToken,
|
|
required this.allowedChatIds,
|
|
required this.defaultTopic,
|
|
required this.claudeTimeoutSeconds,
|
|
required this.mcpConfigPath,
|
|
});
|
|
|
|
factory Config.fromEnv() {
|
|
final e = Platform.environment;
|
|
final allowed = (e['ALLOWED_CHAT_IDS'] ?? '')
|
|
.split(',')
|
|
.map((s) => s.trim())
|
|
.where((s) => s.isNotEmpty)
|
|
.map(int.parse)
|
|
.toSet();
|
|
|
|
return Config(
|
|
telegramToken: e['TELEGRAM_BOT_TOKEN'] ?? '',
|
|
allowedChatIds: allowed,
|
|
defaultTopic: e['DEFAULT_TOPIC'] ?? Lexicon.defaultTopic,
|
|
claudeTimeoutSeconds:
|
|
int.tryParse(e['CLAUDE_TIMEOUT_SECONDS'] ?? '600') ?? 600,
|
|
mcpConfigPath: e['MCP_CONFIG_PATH'] ?? '/app/claude-config/mcp.json',
|
|
);
|
|
}
|
|
}
|