Add Discord token diagnostic endpoint
cgen-6bf139ead9404f3eb1711c824b17132c
This commit is contained in:
parent
edadb76aaa
commit
27f30fdcde
1 changed files with 113 additions and 0 deletions
113
server/index.ts
113
server/index.ts
|
|
@ -1462,6 +1462,119 @@ export function createServer() {
|
|||
}
|
||||
});
|
||||
|
||||
// Discord Token Diagnostic Endpoint
|
||||
app.get("/api/discord/diagnostic", async (req, res) => {
|
||||
try {
|
||||
const botToken = process.env.DISCORD_BOT_TOKEN?.trim();
|
||||
const clientId = process.env.DISCORD_CLIENT_ID?.trim();
|
||||
const publicKey = process.env.DISCORD_PUBLIC_KEY?.trim();
|
||||
|
||||
const diagnostics = {
|
||||
timestamp: new Date().toISOString(),
|
||||
environment: {
|
||||
botTokenSet: !!botToken,
|
||||
clientIdSet: !!clientId,
|
||||
publicKeySet: !!publicKey,
|
||||
},
|
||||
tokenValidation: {
|
||||
length: botToken?.length || 0,
|
||||
format: botToken ? "valid_format" : "missing",
|
||||
preview: botToken
|
||||
? `${botToken.substring(0, 15)}...${botToken.substring(botToken.length - 10)}`
|
||||
: null,
|
||||
minLengthMet: (botToken?.length || 0) >= 20,
|
||||
},
|
||||
clientIdValidation: {
|
||||
value: clientId || null,
|
||||
isNumeric: /^\d+$/.test(clientId || ""),
|
||||
},
|
||||
testRequest: {
|
||||
url: `https://discord.com/api/v10/applications/${clientId}/commands`,
|
||||
method: "PUT",
|
||||
headerFormat: "Bot {token}",
|
||||
status: "ready_to_test",
|
||||
},
|
||||
recommendations: [] as string[],
|
||||
};
|
||||
|
||||
// Add recommendations based on validation
|
||||
if (!botToken) {
|
||||
diagnostics.recommendations.push(
|
||||
"❌ DISCORD_BOT_TOKEN not set. Set it in environment variables."
|
||||
);
|
||||
} else if ((botToken?.length || 0) < 20) {
|
||||
diagnostics.recommendations.push(
|
||||
`❌ DISCORD_BOT_TOKEN appears invalid (length: ${botToken?.length}). Should be 60+ characters.`
|
||||
);
|
||||
} else {
|
||||
diagnostics.recommendations.push(
|
||||
"✅ DISCORD_BOT_TOKEN format looks valid"
|
||||
);
|
||||
}
|
||||
|
||||
if (!clientId) {
|
||||
diagnostics.recommendations.push(
|
||||
"❌ DISCORD_CLIENT_ID not set. Set it to your application's ID."
|
||||
);
|
||||
} else {
|
||||
diagnostics.recommendations.push("✅ DISCORD_CLIENT_ID is set");
|
||||
}
|
||||
|
||||
if (!publicKey) {
|
||||
diagnostics.recommendations.push(
|
||||
"❌ DISCORD_PUBLIC_KEY not set. Needed for signature verification."
|
||||
);
|
||||
} else {
|
||||
diagnostics.recommendations.push("✅ DISCORD_PUBLIC_KEY is set");
|
||||
}
|
||||
|
||||
// Test if token works with Discord API
|
||||
if (botToken && clientId) {
|
||||
try {
|
||||
const testResponse = await fetch(
|
||||
`https://discord.com/api/v10/applications/${clientId}`,
|
||||
{
|
||||
headers: {
|
||||
Authorization: `Bot ${botToken}`,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
diagnostics.testRequest = {
|
||||
...diagnostics.testRequest,
|
||||
status: testResponse.status === 200 ? "✅ Success" : `❌ Failed (${testResponse.status})`,
|
||||
responseCode: testResponse.status,
|
||||
};
|
||||
|
||||
if (testResponse.status === 401) {
|
||||
diagnostics.recommendations.push(
|
||||
"❌ Token authentication failed (401). The token may be invalid or revoked."
|
||||
);
|
||||
} else if (testResponse.status === 200) {
|
||||
diagnostics.recommendations.push(
|
||||
"✅ Token authentication successful with Discord API!"
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
diagnostics.testRequest = {
|
||||
...diagnostics.testRequest,
|
||||
status: "⚠️ Network Error",
|
||||
error: error instanceof Error ? error.message : "Unknown error",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
res.setHeader("Content-Type", "application/json");
|
||||
return res.json(diagnostics);
|
||||
} catch (error: any) {
|
||||
console.error("[Discord Diagnostic] Error:", error);
|
||||
res.setHeader("Content-Type", "application/json");
|
||||
return res.status(500).json({
|
||||
error: error instanceof Error ? error.message : "Diagnostic failed",
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Site settings (admin-managed)
|
||||
app.get("/api/site-settings", async (req, res) => {
|
||||
try {
|
||||
|
|
|
|||
Loading…
Reference in a new issue