vkashti / app / api / schedule / route.ts
route.ts
Raw
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 }
    );
  }
}