feat: Enhance Discord login handler with improved error handling and debug logging

This commit is contained in:
BarryY 2025-05-15 13:29:41 +08:00
parent 48f0cb1739
commit eb2f5a7da3
1 changed files with 29 additions and 12 deletions

View File

@ -30,17 +30,23 @@ export const loginHandler: ToolHandler = async (args, { client }) => {
await client.destroy(); await client.destroy();
info('Client destroyed successfully'); info('Client destroyed successfully');
// Set the new token // Set the new token and ensure it's not null
client.token = token; client.token = token;
info(`Token set: ${!!client.token}`);
// Login with the new token // Login with the new token
info('Attempting login with new token'); info('Attempting login with new token');
try {
await client.login(token); await client.login(token);
info(`Login successful, new client user: ${client.user?.tag}`); info(`Login successful, new client user: ${client.user?.tag}`);
return { return {
content: [{ type: "text", text: `Successfully switched from ${currentBotTag} to ${client.user?.tag}` }] content: [{ type: "text", text: `Successfully switched from ${currentBotTag} to ${client.user?.tag}` }]
}; };
} catch (innerError) {
error(`Failed to login after destroy: ${innerError instanceof Error ? innerError.message : String(innerError)}`);
return handleDiscordError(innerError);
}
} }
// Check if client is already logged in (and no new token provided) // Check if client is already logged in (and no new token provided)
@ -55,6 +61,7 @@ export const loginHandler: ToolHandler = async (args, { client }) => {
if (token) { if (token) {
info('Setting token from request'); info('Setting token from request');
client.token = token; client.token = token;
info(`Token set to request value: ${!!client.token}`);
} else { } else {
info('No token in request, checking for existing token'); info('No token in request, checking for existing token');
} }
@ -70,18 +77,28 @@ export const loginHandler: ToolHandler = async (args, { client }) => {
info('Attempting login with token'); info('Attempting login with token');
try { try {
await client.login(client.token); // Try login with explicit token parameter
info(`Login with explicit token parameter starting`);
await client.login(token || client.token);
info(`Login successful, client user: ${client.user?.tag}`); info(`Login successful, client user: ${client.user?.tag}`);
// Verify client is actually ready // Verify client is actually ready
if (!client.isReady()) { if (!client.isReady()) {
error('Client login completed but client.isReady() returned false'); error('Client login completed but client.isReady() returned false');
// Try to force a second login directly with the token
info('Attempting second login with direct token');
await client.login(client.token);
if (!client.isReady()) {
error('Second login attempt failed, client still not ready');
return { return {
content: [{ type: "text", text: "Login completed but client is not in ready state. This may indicate an issue with Discord connectivity." }], content: [{ type: "text", text: "Login completed but client is not in ready state. This may indicate an issue with Discord connectivity." }],
isError: true isError: true
}; };
} }
}
info(`Login fully completed, ready state: ${client.isReady()}`);
return { return {
content: [{ type: "text", text: `Successfully logged in to Discord: ${client.user?.tag}` }] content: [{ type: "text", text: `Successfully logged in to Discord: ${client.user?.tag}` }]
}; };