kopia lustrzana https://github.com/fabston/TradingView-Webhook-Bot
Porównaj commity
4 Commity
07a2b40218
...
7184b17770
Autor | SHA1 | Data |
---|---|---|
dependabot[bot] | 7184b17770 | |
fabston | 7eff8f9e9e | |
fabston | 550d581655 | |
fabston | b8ef523b2c |
|
@ -1 +0,0 @@
|
||||||
liberapay: fabston
|
|
49
README.md
49
README.md
|
@ -26,20 +26,21 @@
|
||||||
The **TradingView Webhook Bot** ⚙️ listens to [TradingView](https://tradingview.com) alerts via [webhooks](https://www.tradingview.com/support/solutions/43000529348-i-want-to-know-more-about-webhooks/) using [flask](https://flask.palletsprojects.com/en/1.1.x/).
|
The **TradingView Webhook Bot** ⚙️ listens to [TradingView](https://tradingview.com) alerts via [webhooks](https://www.tradingview.com/support/solutions/43000529348-i-want-to-know-more-about-webhooks/) using [flask](https://flask.palletsprojects.com/en/1.1.x/).
|
||||||
All alerts can be instantly sent to Telegram, Discord, Twitter and/or Email.
|
All alerts can be instantly sent to Telegram, Discord, Twitter and/or Email.
|
||||||
|
|
||||||
## Features
|
> 📊 If you are looking for an exchange to trade on, I can recommend **Bybit**.
|
||||||
- Telegram Support using the [Python Telegram](https://github.com/python-telegram-bot/python-telegram-bot) libary
|
> **[Sign up now](https://partner.bybit.com/b/20882)** and receive up to **$30,000** in Deposit Rewards!
|
||||||
- Discord Support using [webhooks](https://support.discord.com/hc/de/articles/228383668-Webhooks-verwenden)
|
|
||||||
- Slack Support using [webhooks](https://api.slack.com/messaging/webhooks)
|
|
||||||
- Twitter Support using the [tweepy](https://github.com/tweepy/tweepy) libary
|
|
||||||
- Email Support using [smtplib](https://docs.python.org/3/library/smtplib.html)
|
|
||||||
- Alert channels can be enabled or disabled in [`config.py`](https://github.com/fabston/TradingView-Webhook-Bot/blob/master/config.py)
|
|
||||||
- Dynamically send alerts to different Telegram and/or Discord channels
|
|
||||||
- TradingView `{{close}}`, `{{exchange}}` etc. variables support. Read more [here](https://www.tradingview.com/blog/en/introducing-variables-in-alerts-14880/)
|
|
||||||
|
|
||||||
> 💡 Got a feature idea? Open an [issue](https://github.com/fabston/TradingView-Webhook-Bot/issues/new?assignees=&labels=enhancement&template=feature-request---.md) and I might implement it.
|
## Features
|
||||||
|
- Telegram Support using the [Python Telegram](https://github.com/python-telegram-bot/python-telegram-bot) libary.
|
||||||
|
- Discord Support using [webhooks](https://support.discord.com/hc/de/articles/228383668-Webhooks-verwenden).
|
||||||
|
- Slack Support using [webhooks](https://api.slack.com/messaging/webhooks).
|
||||||
|
- Twitter Support using the [tweepy](https://github.com/tweepy/tweepy) libary.
|
||||||
|
- Email Support using [smtplib](https://docs.python.org/3/library/smtplib.html).
|
||||||
|
- Alert channels can be enabled or disabled in [`config.py`](https://github.com/fabston/TradingView-Webhook-Bot/blob/master/config.py).
|
||||||
|
- Dynamically send alerts to different Telegram and/or Discord channels.
|
||||||
|
- TradingView `{{close}}`, `{{exchange}}` etc. variables support. Read more [here](https://www.tradingview.com/blog/en/introducing-variables-in-alerts-14880/).
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
> ⚠️ Best to run the bot on a VPS. I can recommend <a href="https://hetzner.cloud/?ref=tQ1NdT8zbfNY" title="Get €20 in cloud credits">Hetzner</a>'s CX11 VPS for 2.89€/month. [Sign up](https://hetzner.cloud/?ref=tQ1NdT8zbfNY) now and receive **€20 free** credits.
|
> ⚠️ Best to run the bot on a VPS. I can recommend <a href="https://hetzner.cloud/?ref=tQ1NdT8zbfNY" title="Get €20 in cloud credits">Hetzner</a>'s CX11 VPS for 3.79€/month. [Sign up](https://hetzner.cloud/?ref=tQ1NdT8zbfNY) now and receive **€20 free** credits.
|
||||||
1. Clone this repository `git clone https://github.com/fabston/TradingView-Webhook-Bot.git`
|
1. Clone this repository `git clone https://github.com/fabston/TradingView-Webhook-Bot.git`
|
||||||
1. Create your virtual environment `python3 -m venv TradingView-Webhook-Bot`
|
1. Create your virtual environment `python3 -m venv TradingView-Webhook-Bot`
|
||||||
1. Activate it `source TradingView-Webhook-Bot/bin/activate && cd TradingView-Webhook-Bot`
|
1. Activate it `source TradingView-Webhook-Bot/bin/activate && cd TradingView-Webhook-Bot`
|
||||||
|
@ -64,14 +65,36 @@ All alerts can be instantly sent to Telegram, Discord, Twitter and/or Email.
|
||||||
1. Run the bot with `python main.py`
|
1. Run the bot with `python main.py`
|
||||||
1. [PM2](https://github.com/fabston/TradingView-Webhook-Bot/issues/28#issuecomment-766301062) can help you in running the app in the background / on system boot.
|
1. [PM2](https://github.com/fabston/TradingView-Webhook-Bot/issues/28#issuecomment-766301062) can help you in running the app in the background / on system boot.
|
||||||
|
|
||||||
|
### Forward Port 80 to 8080 using NGINX
|
||||||
|
|
||||||
|
*It is recommended to run flask on a different port like 8080. It is then necessary to forward port 80 to 8080.*
|
||||||
|
|
||||||
|
1. Install the necessary packages: `sudo apt-get install nginx`
|
||||||
|
1. Edit the NGINX configuration file: `sudo nano /etc/nginx/sites-enabled/tv_webhook`
|
||||||
|
1. Add the following content:
|
||||||
|
```nginx
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
|
||||||
|
server_name <YOUR-IP>;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:8080; # Forward traffic to port 8080
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Pass client's IP address
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
1. Restart NGINX `sudo service nginx restart`
|
||||||
|
|
||||||
### Docker
|
### Docker
|
||||||
1. Clone this repository `git clone https://github.com/fabston/TradingView-Webhook-Bot.git`
|
1. Clone this repository `git clone https://github.com/fabston/TradingView-Webhook-Bot.git`
|
||||||
1. Edit and update [`config.py`](https://github.com/fabston/TradingView-Webhook-Bot/blob/master/config.py)
|
1. Edit and update [`config.py`](https://github.com/fabston/TradingView-Webhook-Bot/blob/master/config.py)
|
||||||
1. `docker-compose build`
|
1. `docker-compose build`
|
||||||
1. `docker-compose up`
|
1. `docker-compose up`
|
||||||
|
|
||||||
*It is recommended to run flask on a different port like 8080. It is then necessary to forward port 80 to 8080.*
|
|
||||||
|
|
||||||
## Images
|
## Images
|
||||||
![Webhook Bot](https://i.imgur.com/vZA42cc.png)
|
![Webhook Bot](https://i.imgur.com/vZA42cc.png)
|
||||||
|
|
||||||
|
|
24
main.py
24
main.py
|
@ -4,13 +4,10 @@
|
||||||
# File Name : main.py #
|
# File Name : main.py #
|
||||||
# ----------------------------------------------- #
|
# ----------------------------------------------- #
|
||||||
|
|
||||||
import json
|
from handler import send_alert
|
||||||
import time
|
|
||||||
|
|
||||||
from flask import Flask, request
|
|
||||||
|
|
||||||
import config
|
import config
|
||||||
from handler import *
|
import time
|
||||||
|
from flask import Flask, request, jsonify
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
@ -22,25 +19,28 @@ def get_timestamp():
|
||||||
|
|
||||||
@app.route("/webhook", methods=["POST"])
|
@app.route("/webhook", methods=["POST"])
|
||||||
def webhook():
|
def webhook():
|
||||||
|
whitelisted_ips = ['52.89.214.238', '34.212.75.30', '54.218.53.128', '52.32.178.7']
|
||||||
|
client_ip = request.headers.get('X-Forwarded-For', request.remote_addr)
|
||||||
|
if client_ip not in whitelisted_ips:
|
||||||
|
return jsonify({'message': 'Unauthorized'}), 401
|
||||||
try:
|
try:
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
data = request.get_json()
|
data = request.get_json()
|
||||||
key = data["key"]
|
if data["key"] == config.sec_key:
|
||||||
if key == config.sec_key:
|
|
||||||
print(get_timestamp(), "Alert Received & Sent!")
|
print(get_timestamp(), "Alert Received & Sent!")
|
||||||
send_alert(data)
|
send_alert(data)
|
||||||
return "Sent alert", 200
|
return jsonify({'message': 'Webhook received successfully'}), 200
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print("[X]", get_timestamp(), "Alert Received & Refused! (Wrong Key)")
|
print("[X]", get_timestamp(), "Alert Received & Refused! (Wrong Key)")
|
||||||
return "Refused alert", 400
|
return jsonify({'message': 'Unauthorized'}), 401
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("[X]", get_timestamp(), "Error:\n>", e)
|
print("[X]", get_timestamp(), "Error:\n>", e)
|
||||||
return "Error", 400
|
return jsonify({'message': 'Error'}), 400
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
from waitress import serve
|
from waitress import serve
|
||||||
|
|
||||||
serve(app, host="0.0.0.0", port=80)
|
serve(app, host="0.0.0.0", port=8080)
|
||||||
|
|
Ładowanie…
Reference in New Issue