webhook-proxy-client/index.js

100 lines
3 KiB
JavaScript

require("dotenv").config();
const Discord = require("discord.js");
const colors = require("colors");
const fs = require("fs");
const ws = require("ws");
const wsServer = process.env.WS_SERVER || "wss://hookproxy.kcadev.org/client";
if (!process.env.CLIENT_ID) {
const randomString = [...Array(64)]
.map(() => Math.random().toString(36)[2])
.join("");
const envContent = `CLIENT_ID=${randomString}\n`;
fs.writeFileSync(".env", envContent);
console.log("Generated .env file with a random CLIENT_ID".green);
// Reload environment variables
require("dotenv").config();
}
const wsMain = () => {
const wsClient = new ws(wsServer, {
headers: {
"User-Agent": "DiscordHookProxyClient v1.0",
"Client-ID": process.env.CLIENT_ID,
},
});
wsClient.on("open", () => {
console.log("WebSocket connection established".green);
});
wsClient.on("message", (rawdata) => {
console.log(rawdata)
let message
try {
message = JSON.parse(rawdata);
if (!message || !message.creds?.id || !message.creds?.token || !message.data) {
console.error("Invalid message format received".red);
console.log("Expected format: { creds: { id: 'webhook_id', token: 'webhook_token' }, data: 'message_content' }".yellow);
console.log("Received message:", rawdata.yellow);
return;
}
const webhook = new Discord.WebhookClient({
id: message.creds.id,
token: message.creds.token,
});
webhook.send(message.data).then(() => {
console.log(`Message sent to webhook ${message.creds.id}`.green);
}).catch((error) => {
console.error(`Error sending message to webhook ${message.creds.id}:`, error.message.red);
});
} catch (error) {
console.error("Error parsing WebSocket message:", error.message.red);
return;
}
});
wsClient.on("error", (error) => {
console.error("WebSocket error:", error.message.red);
});
wsClient.on("close", (code, reason) => {
console.log(`WebSocket connection closed (${code} ${reason}). Reconnecting...`.yellow);
setTimeout(wsMain, 5000); // Reconnect after 5 seconds
});
};
// Start the WebSocket client
wsMain();
console.log("Discord Hook Proxy Client started".blue);
console.log("Listening for messages...".blue);
console.log(`To send a webhook message, send a Discord webhook message to https://hookproxy.kcadev.org/${process.env.CLIENT_ID}/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN`.blue);
console.log(`NEVER SHARE YOUR CLIENT ID OR WEBHOOK TOKENS WITH ANYONE!`.red.bold);
console.log(`This program must be left running to receive messages.`.yellow);
console.log(`Press Ctrl+C to exit.`.yellow);
// Handle graceful shutdown
process.on("SIGINT", () => {
console.log("\nShutting down gracefully...".yellow);
process.exit(0);
});
process.on("uncaughtException", (error) => {
console.error("Uncaught Exception:", error.message.red);
});
process.on("unhandledRejection", (reason, promise) => {
console.error("Unhandled Rejection at:", promise, "reason:", reason.message.red);
});
process.on("warning", (warning) => {
console.warn("Warning:", warning.message.yellow);
});