terrible. terrible terrible terrible
Find a file
2025-02-18 21:32:40 -05:00
example.html Initial commit 2025-02-18 21:32:40 -05:00
index.mjs Initial commit 2025-02-18 21:32:40 -05:00
README.md Initial commit 2025-02-18 21:32:40 -05:00

discord webhook proxy server

a shitty web server that lets you post messages into it and have them forwarded to a discord webhook. designed to hook up easily to a simple <form> on your website that randos can use to cyberbully you.

environment variables

  • WEBHOOK_URL: required. the discord webhook url you want your messages to be sent to. this can also be passed to the program as a command-line argument instead of an environment variable, if you want.
  • PORT: default 80. the port to listen on.
  • TRUST_X_FORWARDED_HOST, TRUST_X_FORWARDED_PROTO, TRUST_X_FORWARDED_FOR, TRUST_X_REAL_IP: these correspond to headers commonly set by reverse proxies to convey information about the original request as they proxy it to the app. if you deploy this app behind a reverse proxy, set the variables that correspond to the headers your reverse proxy sets. (any non-empty value will be considered "true.") trusting a header that can be controlled directly by a requester will allow identity spoofing, so don't use these variables to trust headers that aren't explicitly set by your proxy (unless you're into that sort of thing).

api

POST /send

accepts Content-Type: application/x-www-form-urlencoded (the default for HTML forms) or application/json. fields:

  • content: message content. max length 4096
  • title: optional. message title. max length 256
  • color: optional. sets the color of the embed displayed. a 6-digit case-insensitive hex color prefixed with a leading #; no other color formats are accepted.

by default the server returns HTML responses so it's at lease somewhat friendly for use in a bare HTML <form>. if you want to be fancy you can submit the form with JS and set your request's Accept header to application/json to get slightly more structured responses (204 with no content on success, 400 with an {"error": "the message"} object on failure

example form

<form action="https://your.thing/send" method="post">
	<input type="text" name="title" id="title" />
	<textarea name="content"></textarea>
	<button type="submit">Send</button>
</form>