Attachments example — upload a buffer, spoiler flag, and attach by URL.

attachments-bot.js · 80 lines

Attachments example — upload a buffer, spoiler flag, and attach by URL.

View on GitHubnode examples/attachments-bot.js
javascript
/**
 * Attachments example — upload a buffer, spoiler flag, and attach by URL.
 *
 * Commands:
 *   !file     — text file from a Buffer
 *   !spoiler  — tiny PNG marked as spoiler (1x1 placeholder)
 *   !urlfile  — attach an image by URL
 *
 * Usage:
 *   FLUXER_BOT_TOKEN=your_token node examples/attachments-bot.js
 *
 * Guides: attachments, attachments-by-url
 */

import { Client, Events, MessageAttachmentFlags, parsePrefixCommand } from '@fluxerjs/core';

const PREFIX = '!';
const client = new Client({ intents: 0 });

// Minimal valid 1x1 PNG
const PNG_1X1 = Buffer.from(
  'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==',
  'base64',
);

client.on(Events.Ready, () => {
  console.log(`Logged in as ${client.user?.username}`);
});

client.on(Events.MessageCreate, async (message) => {
  if (message.author.bot || !message.content) return;
  const parsed = parsePrefixCommand(message.content, PREFIX);
  if (!parsed) return;

  try {
    if (parsed.command === 'file') {
      await message.reply({
        content: 'Text file attached:',
        files: [{ name: 'hello.txt', data: Buffer.from('Hello from Fluxer!\n', 'utf8') }],
      });
      return;
    }

    if (parsed.command === 'spoiler') {
      await message.reply({
        content: 'Spoiler image (click to reveal):',
        files: [{ name: 'secret.png', data: PNG_1X1 }],
        attachments: [
          {
            id: 0,
            filename: 'secret.png',
            title: 'Hidden pixel',
            flags: MessageAttachmentFlags.IS_SPOILER,
          },
        ],
      });
      return;
    }

    if (parsed.command === 'urlfile') {
      await message.reply({
        content: 'Image fetched from URL:',
        files: [
          {
            name: 'trulli.jpg',
            url: 'https://www.w3schools.com/html/pic_trulli.jpg',
          },
        ],
      });
    }
  } catch (err) {
    console.error(err);
    await message.reply('Failed to send attachment.').catch(() => {});
  }
});

client.on(Events.Error, (err) => console.error(err));

await client.login(process.env.FLUXER_BOT_TOKEN);