discord-logger
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Simple, self-contained utilities for sending messages and embeds to Discord webhooks. Handles message chunking, embed limits, rate limiting, and batched logging.
Copy send.ts and optionally logger.ts into your project.
Set the DISCORD_WEBHOOK_URL environment variable, or pass the webhook URL
directly to functions.
import { createErrorEmbed, createSuccessEmbed, send } from "./send.ts";
// Simple text message
await send("Hello, Discord!");
// With custom webhook URL
await send("Hello!", "https://discord.com/api/webhooks/...");
// With custom username/avatar
await send("Hello!", undefined, {
username: "My Bot",
avatar_url: "https://example.com/avatar.png",
});
// Long messages are automatically chunked
await send("A".repeat(5000)); // Splits into multiple messages
// Send an embed
await send({
title: "Server Status",
description: "All systems operational",
color: 0x00ff00,
fields: [
{ name: "CPU", value: "12%", inline: true },
{ name: "Memory", value: "45%", inline: true },
],
});
// Send multiple embeds
await send([
{ title: "Alert 1", description: "First alert", color: 0xff0000 },
{ title: "Alert 2", description: "Second alert", color: 0xffcc00 },
]);
// Use embed helpers
await send(createSuccessEmbed("Deployment Complete", "v1.2.3 is now live"));
await send(createErrorEmbed("Build Failed", new Error("Missing dependency")));
import {
createEmbed,
createErrorEmbed,
createInfoEmbed,
createSuccessEmbed,
createWarningEmbed,
} from "./send.ts";
// Basic embed
const embed = createEmbed("Title", "Description", 0x0099ff);
// Pre-styled embeds with emoji prefixes
createErrorEmbed("Error Title", "What went wrong"); // ❌ Red
createSuccessEmbed("Success Title", "What happened"); // ✅ Green
createInfoEmbed("Info Title", "Details"); // ℹ️ Blue
createWarningEmbed("Warning Title", "Be careful"); // ⚠️ Yellow
import { createLogger, log } from "./logger.ts";
// Create a named logger
const logger = createLogger("MyService");
logger.debug("Debug message"); // Only sent if minLevel allows
logger.info("Service started");
logger.warn("Disk space low");
logger.error("Connection failed", new Error("timeout"));
// Important: call finalize() to flush remaining logs
await logger.finalize();
// Or use the quick singleton logger
log.info("Quick log");
log.error("Something broke", new Error("details"));
await log.flush();
const logger = createLogger("MyService", {
webhookUrl: "https://discord.com/api/webhooks/...", // Optional, falls back to env
minLevel: "debug", // "debug" | "info" | "warn" | "error"
batchIntervalMs: 2000, // How often to send batched logs
maxBatchSize: 15, // Max logs per batch
includeTimestamp: true, // Show timestamps in output
consoleOutput: false, // Also log to console
});
Send a message or embed to Discord.
content:string | Embed | Embed[]webhookUrl: Optional webhook URL (falls back toDISCORD_WEBHOOK_URLenv var)options:{ username?, avatar_url?, content? }
Returns: Promise<SendResult>
Create a batched logger instance.
Quick logging using a default logger.
- Message content: 2000 characters (auto-chunked)
- Embed title: 256 characters
- Embed description: 4096 characters
- Fields per embed: 25
- Field name/value: 256/1024 characters
- Total embed characters: 6000
- Embeds per message: 10
MIT