import { NextRequest, NextResponse } from 'next/server';
import FormData from 'form-data';
import fetch from 'node-fetch';
export async function POST(req: NextRequest) {
try {
const { image, customMessage } = await req.json();
if (!image) {
return NextResponse.json(
{ message: 'No image provided.' },
{ status: 400 }
);
}
const webhookUrl = process.env.DISCORD_TEAM_WEBHOOK_URL;
if (!webhookUrl) {
console.error('Discord webhook URL is not set in environment variables.');
return NextResponse.json(
{ message: 'Server error: Discord webhook URL is not configured.' },
{ status: 500 }
);
}
// 1) Strip out the base64 prefix
const base64Data = image.replace(/^data:image\/\w+;base64,/, '');
const buffer = Buffer.from(base64Data, 'base64');
// 2) Prepare form data
const form = new FormData();
form.append('file', buffer, {
filename: 'schedule.png',
contentType: 'image/png'
});
// Set a default or custom message
const messageContent = customMessage || 'Here is the weekly schedule!';
form.append(
'payload_json',
JSON.stringify({
content: messageContent,
username: 'Schedule Bot', // Optional: Set the username
avatar_url: 'https://www.vkashti.bar/logo.png' // Optional: Set the avatar
})
);
// 3) Configure headers manually
const headers = form.getHeaders();
// 4) Send the POST request to Discord
const discordRes = await fetch(webhookUrl, {
method: 'POST',
headers,
body: form
});
if (!discordRes.ok) {
const errorText = await discordRes.text();
console.error('Discord response error:', errorText);
return NextResponse.json(
{
message: 'Discord webhook responded with an error.',
error: errorText
},
{ status: 500 }
);
}
return NextResponse.json({ message: 'Screenshot sent successfully!' });
} catch (error) {
console.error('Server error:', error);
const errorMessage =
error instanceof Error ? error.message : 'Unknown error';
return NextResponse.json(
{ message: 'Server error.', error: errorMessage },
{ status: 500 }
);
}
}