feat: Add validation for DISCORD_CLIENT_ID in command registration and update deployment guide for dashboard publish directory
This commit is contained in:
+1
-1
@@ -31,7 +31,7 @@ Optional same-origin pattern:
|
||||
3. Add resource `omo-bot-dashboard` from this repository:
|
||||
- Base directory: `admin-dashboard`
|
||||
- Build command: `npm run build`
|
||||
- Publish directory: `dist`
|
||||
- Publish directory: `/`
|
||||
- Internal port: `80` (typical static web port behind Coolify)
|
||||
4. Configure domains for each resource and enable TLS certificates.
|
||||
|
||||
|
||||
+14
-8
@@ -207,6 +207,7 @@ async function loadConfigOverridesFromDatabase(
|
||||
}
|
||||
|
||||
function buildConfig(readConfig: ConfigReader): BotConfig {
|
||||
const discordClientId = readConfig("DISCORD_CLIENT_ID")?.trim();
|
||||
const discordGuildId = readConfig("DISCORD_GUILD_ID");
|
||||
const callSheetMessageId = readConfig("CALL_SHEET_MESSAGE_ID");
|
||||
const callSheetOnboardedRoleId = readConfig("CALL_SHEET_ONBOARDED_ROLE_ID");
|
||||
@@ -266,12 +267,19 @@ function buildConfig(readConfig: ConfigReader): BotConfig {
|
||||
const openmicSyncToken = readConfig("OPENMIC_SYNC_TOKEN")?.trim();
|
||||
const oauthBridgeEnabled =
|
||||
Boolean(oauthBridgeClientSecret) && Boolean(oauthBridgeRedirectUri);
|
||||
|
||||
if (oauthBridgeEnabled && !discordClientId) {
|
||||
throw new Error(
|
||||
"Missing required configuration value: DISCORD_CLIENT_ID (required when OAuth bridge is enabled)",
|
||||
);
|
||||
}
|
||||
|
||||
const configurationDatabaseEnabled =
|
||||
readConfig("CONFIG_DB_ENABLED") === "false" ? false : Boolean(databaseUrl);
|
||||
|
||||
return {
|
||||
discordToken: readRequiredValue(readConfig, "DISCORD_TOKEN"),
|
||||
discordClientId: readRequiredValue(readConfig, "DISCORD_CLIENT_ID"),
|
||||
discordClientId: discordClientId ?? "",
|
||||
...(discordGuildId ? { discordGuildId } : {}),
|
||||
callSheet: {
|
||||
...(callSheetMessageId ? { messageId: callSheetMessageId } : {}),
|
||||
@@ -475,17 +483,15 @@ export async function loadRuntimeConfig(): Promise<BotConfig> {
|
||||
return loadConfig();
|
||||
}
|
||||
|
||||
let overrides: Map<string, string>;
|
||||
try {
|
||||
const overrides = await loadConfigOverridesFromDatabase(
|
||||
databaseUrl,
|
||||
guildScope,
|
||||
);
|
||||
|
||||
return buildConfig((name) => overrides.get(name) ?? process.env[name]);
|
||||
overrides = await loadConfigOverridesFromDatabase(databaseUrl, guildScope);
|
||||
} catch (error: unknown) {
|
||||
console.warn(
|
||||
`Falling back to environment config. Config DB overrides unavailable: ${String(error)}`,
|
||||
`Config DB unavailable. Falling back to environment config: ${String(error)}`,
|
||||
);
|
||||
return loadConfig();
|
||||
}
|
||||
|
||||
return buildConfig((name) => overrides.get(name) ?? process.env[name]);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,12 @@ import { loadRuntimeConfig } from "./config";
|
||||
|
||||
async function registerCommands(): Promise<void> {
|
||||
const config = await loadRuntimeConfig();
|
||||
if (!config.discordClientId) {
|
||||
throw new Error(
|
||||
"DISCORD_CLIENT_ID required for command registration. Set it in bot_settings or environment.",
|
||||
);
|
||||
}
|
||||
|
||||
const rest = new REST({ version: "10" }).setToken(config.discordToken);
|
||||
const body = commands.map((command) => command.data.toJSON());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user