WebhookProxy | Discord webhooks go brrrrrrr

?wait=true is inherently incompatible with the queue system because it requires the message to actually be sent before you can get a response. The queue system, as the name implies, puts your request into a queue to be dealt with at some point in the future, and sends back an acknowledgement that it’s been queued. There is no workaround for this and I can’t determine what the message ID will be before it has been sent. It is only reliable in the sense that it will send in the future, not that it will guarantee it gets sent immediately. You will have to work out another solution.

Alright thanks for the reply, I’ll think of something to counter this off and I’ll let you know if I have any solutions so other people can use it.

@lewisakura Thank you for this awesome service, I’ve been using it for a couple of months, but at the moment it seems to be down? Getting error code HTTP 524.

Error 524 usually indicates that Cloudflare successfully connected to the origin web server, but the origin did not provide an HTTP response before the default 100 second Proxy Read Timeout

I’ve been receiving a lot of 500 Internal Server Error responses from the proxy for around a week now, could you please look into this?

The HTTP 500 errors come from Discord themselves ratelimiting me which is an unexpected API response (so it throws an error internally, it’s expecting a valid webhook message), and whilst I did try to have a discussion with them they unfortunately said they can’t increase the ratelimits for the webhook endpoints.

The short version of it is that the service has grown to a level I didn’t really expect it to and I don’t have the money to increase the scale to fix this (it makes nothing despite being used by hundreds of games, and I’ve been running it out of pocket for a long time), so I would strongly recommend you host your own proxy instance or find another workaround. This will probably be a common occurrence on the public instance. Sorry.

2 Likes

Alright no worries. Thank you for the explanation.

I have a queue system already set up that uses both my site and Lewis’s site if needed.
It will return output in the console if there are any issues, all error codes related to the proxy are also listed on the webhook site URL below.
If you want to see if there’s a new WebhookService module, it can be found on the site below, click “Get Started”, and it will be a download link at the bottom.

WebhookProxy - NewsTargeted.com

WebhookService is the Module, that you put inside of the Send-Proxy-Queue script.
As an example.

That way, you can use /queue after the webhook URL, and send the embed to discord using proxy:Queue for the embed :slight_smile:

Using the queue, you don’t need to add a delay.
Since the WebhookService will make sure all requests are queued both roblox and discord will be happy.
And you get ALL requests valid to Discord. (There is no guarantee, that your request will be received on Discord right away.)

Download WebhookService (newstargeted.com) (6.4 KB)
Send-Proxy-Queue.lua (2.0 KB)

2 Likes

Thanks for your resource, but I’m getting this error at the same time in which your website is down. What is the cause of this?

Also unrelated and nothing major, but the function “sendAuthorEmbed” is duplicated in the Webhook Service script.

2 Likes

Currently doing an OS upgrade from Almalinux 8 to Almalinux 9, it could take a few hours.
Doing status updates on the discord server.

i guess this post is outdated. We can call discord domain and it works.

You can’t in a live game.
So it isn’t outdated.
You can do it from the studio, from time to time yes.
Because then it will use your IP and heading, not roblox’s.

I’m not sure about that actually, I just ran this on server console in a live game server and it worked


image

1 Like

If it is true, it is still better to use a proxy, and more backup proxies, and then the normal discord URL as a last resort.
In case they ban it again.

You can also do it on a live game too.

Hi, trying to figure out how to host a private instance of this service; are there any guides on this available? The Github readme is criminally nondescriptive.

1 Like

This is how i set it up on Almalinux 8.10 and 9.4
I use CyberPanel, for the OpenLiteSpeed proxy, to show the sub domain instead of the IP.

For Almalinux 8 and 9:
Install basic SSH node modules
yum install -y dnf
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-0.6.4-2.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.4-2.sdl7.noarch.rpm
yum install -y dnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.4-2.sdl7.noarch.rpm python-dnf-0.6.4-2.sdl7.noarch.rpm
curl -sL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install -y nodejs
sudo yum install -y gcc-c++ make nano sendmail net-tools htop unzip curl libtool autoconf
dnf install -y nsolid
sudo npm install -g pm2@latest yarn npm@latest
pm2 update
Install Redis

Install Redis

Install RabbitMQ
sudo dnf -y update
sudo dnf install vim -y
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
sudo dnf install -y erlang
sudo dnf install -y rabbitmq-server
sudo dnf install -y epel-release
sudo dnf install -y gcc glibc-devel make ncurses-devel openssl-devel autoconf m4 unixODBC-devel wget
cd /root
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v26.2.5.2/erlang-26.2.5.2-1.el8.x86_64.rpm
sudo dnf localinstall -y erlang-26.2.5.2-1.el8.x86_64.rpm
sudo tee /etc/yum.repos.d/rabbitmq.repo <<EOF
# In /etc/yum.repos.d/rabbitmq.repo

##
## Zero dependency Erlang RPM
##

[modern-erlang]
name=modern-erlang-el9
# uses a Cloudsmith mirror @ yum.novemberain.com.
# Unlike Cloudsmith, it does not have any traffic quotas
baseurl=https://yum1.novemberain.com/erlang/el/9/$basearch
        https://yum2.novemberain.com/erlang/el/9/$basearch
        https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/9/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

[modern-erlang-noarch]
name=modern-erlang-el9-noarch
# uses a Cloudsmith mirror @ yum.novemberain.com.
# Unlike Cloudsmith, it does not have any traffic quotas
baseurl=https://yum1.novemberain.com/erlang/el/9/noarch
        https://yum2.novemberain.com/erlang/el/9/noarch
        https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/9/noarch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
       https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

[modern-erlang-source]
name=modern-erlang-el9-source
# uses a Cloudsmith mirror @ yum.novemberain.com.
# Unlike Cloudsmith, it does not have any traffic quotas
baseurl=https://yum1.novemberain.com/erlang/el/9/SRPMS
        https://yum2.novemberain.com/erlang/el/9/SRPMS
        https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/9/SRPMS
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
       https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1


##
## RabbitMQ Server
##

[rabbitmq-el9]
name=rabbitmq-el9
baseurl=https://yum2.novemberain.com/rabbitmq/el/9/$basearch
        https://yum1.novemberain.com/rabbitmq/el/9/$basearch
        https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/9/$basearch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
       https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

[rabbitmq-el9-noarch]
name=rabbitmq-el9-noarch
baseurl=https://yum2.novemberain.com/rabbitmq/el/9/noarch
        https://yum1.novemberain.com/rabbitmq/el/9/noarch
        https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/9/noarch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
       https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md

[rabbitmq-el9-source]
name=rabbitmq-el9-source
baseurl=https://yum2.novemberain.com/rabbitmq/el/9/SRPMS
        https://yum1.novemberain.com/rabbitmq/el/9/SRPMS
        https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/9/SRPMS
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
gpgcheck=0
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md
EOF

rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc'
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key'
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key'

sudo rpm --import rabbitmq-server-3.13.5-1.el8.noarch.rpm.asc
sudo rpm -Uvh rabbitmq-server-3.13.5-1.el8.noarch.rpm

sudo rabbitmq-plugins enable rabbitmq_management
dnf update -y
dnf install socat logrotate -y
dnf install -y erlang rabbitmq-server
sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server
rabbitmqctl add_user Admin PASSWORDHERE
rabbitmqctl set_user_tags Admin administrator
rabbitmqctl set_permissions -p / Admin ".*" ".*" ".*"
sudo systemctl restart rabbitmq-server
sudo systemctl status rabbitmq-server
sudo firewall-cmd --permanent --add-port=5672/tcp
sudo firewall-cmd --permanent --add-port=15672/tcp
sudo firewall-cmd --reload

Once you have installed RabbitMQ, you can run the following command in the Run-Webhook.

You can place the webhook folder anywhere you want, but i suggest not posting it in a public folder.
This example is not a good place to post it.
/home/newstargeted.com/public_html

cd /home/webhook-proxy
git clone GitHub - lewisakura/webhook-proxy: A Discord webhook proxy, primarily for Roblox games.

Duplicate and or rename the config.example.json into config.json.
You can also edit the config file as needed.
See normal configs here:
WebhookProxy | Discord webhooks go brrrrrrr - #23 by lewisakura

Run-Webhook
cd /home/webhook-proxy
npm i -g pm2 yarn
npm install pm2@latest -g
pm2 update
pm2 flush
pm2 delete all
pm2 save --force
yarn && yarn build
pm2 start dist/index.js --name=webhook-proxy -i 1
pm2 start dist/queueProcessor.js --name=webhook-proxy-processor -i 1
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size=1G retain=5 compress=true
pm2 set pm2-logrotate:retain 5
pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
pm2 set pm2-logrotate:dateFormat ss-mm-HH-MM-YYYY
pm2 save
pm2 update
pm2 logs

After that, you need some way of using the proxy against your domain, such as a reproxy.
I use CyberPanel, where i then use OLS (Open Lite Speed)
Where i use my https://webhook.newstargeted.com as an example:

Since i save the external app as a webhook, i go into the .htaccess and use this as a rewrite.
image

For Ubuntu:
Install Basic SSH Node Modules
# Update package list
sudo apt update

# Install required packages
sudo apt install -y curl software-properties-common gcc g++ make nano sendmail net-tools htop unzip libtool autoconf

# Install Node.js and NPM (Node.js 18.x)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

# Install PM2 and Yarn globally
sudo npm install -g pm2@latest yarn npm@latest

# Update PM2
pm2 update
Install Redis

Install Redis

Install RabbitMQ
# Update package list
sudo apt update

# Install Vim (optional)
sudo apt install -y vim

# Install Erlang dependencies
sudo apt install -y erlang

# Add RabbitMQ repository and public key
sudo apt-get install -y curl gnupg
curl -fsSL https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc | sudo apt-key add -
echo "deb https://packages.erlang-solutions.com/ubuntu $(lsb_release -cs) contrib" | sudo tee /etc/apt/sources.list.d/erlang.list

curl -fsSL https://packages.rabbitmq.com/debian/rabbitmq-signing-key.asc | sudo apt-key add -
echo "deb https://packages.rabbitmq.com/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list

# Update package list after adding repositories
sudo apt update

# Install RabbitMQ server and Erlang
sudo apt install -y rabbitmq-server

# Enable and start RabbitMQ service
sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server

# Enable RabbitMQ management plugin
sudo rabbitmq-plugins enable rabbitmq_management

# Add RabbitMQ user with administrative privileges
sudo rabbitmqctl add_user Admin PASSWORDHERE
sudo rabbitmqctl set_user_tags Admin administrator
sudo rabbitmqctl set_permissions -p / Admin ".*" ".*" ".*"

# Open necessary ports in the firewall
sudo ufw allow 5672/tcp
sudo ufw allow 15672/tcp
sudo ufw reload

# Verify RabbitMQ service status
sudo systemctl status rabbitmq-server

Once you have installed RabbitMQ, you can run the following command in the Run-Webhook.

You can place the webhook folder anywhere you want, but i suggest not posting it in a public folder.
This example is not a good place to post it.
/home/newstargeted.com/public_html

cd /home/webhook-proxy
git clone GitHub - lewisakura/webhook-proxy: A Discord webhook proxy, primarily for Roblox games.

Duplicate and or rename the config.example.json into config.json.
You can also edit the config file as needed.
See normal configs here:
WebhookProxy | Discord webhooks go brrrrrrr - #23 by lewisakura

Run-Webhook
# Clone the webhook-proxy repository
cd /home/webhook-proxy
git clone https://github.com/LewisTehMinerz/webhook-proxy

# Duplicate or rename config.example.json to config.json and edit as needed
cd webhook-proxy
cp config.example.json config.json

# Install PM2 and Yarn globally if not already done
sudo npm install -g pm2 yarn

# Install dependencies and build the project
yarn && yarn build

# Start the webhook proxy with PM2
pm2 start dist/index.js --name=webhook-proxy -i 1
pm2 start dist/queueProcessor.js --name=webhook-proxy-processor -i 1

# Set up PM2 logrotate
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 1G
pm2 set pm2-logrotate:retain 5
pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
pm2 save
pm2 update
pm2 logs

After that, you need some way of using the proxy against your domain, such as a reproxy.
I use CyberPanel, where i then use OLS (Open Lite Speed)
Where i use my https://webhook.newstargeted.com as an example:

Since i save the external app as a webhook, i go into the .htaccess and use this as a rewrite.
image

1 Like

I’m not sure if its just me or it looks like the proxy is either down or discord has stopped taking my requests?
Here is what my output looks like:
image

As you can see everything is fine, at least to me, but my messages are not printing in a discord channel? It was working perfectly fine a couple of hours ago so I’m not sure what has happened.

1 Like

You’re fine, the holdup is on Discord’s end. More info here WebhookProxy | Discord webhooks go brrrrrrr - #293 by lewisakura

Do you have any specific instructions for Ubuntu Linux?