Spaces:
Sleeping
Sleeping
File size: 2,483 Bytes
31a302b 595f0ee 20f4cd1 fa5c81c 534b6e8 3c2a81d fa5c81c 3c2a81d fa5c81c 3c2a81d 20f4cd1 3c2a81d b2ebd1d 595f0ee cfea4a6 88abbff fa5c81c 88abbff fa5c81c 31a302b fa5c81c 88abbff cfea4a6 fa5c81c 2e7f4cb fa5c81c cfea4a6 3c2a81d fa5c81c 3c2a81d fac94c9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
from flask import Flask, request, Response, copy_current_request_context, jsonify
import threading
import requests
import asyncio
import os
import json
request_count = {}
ongoing_requests = {}
bypass = os.getenv("BYPASS")
MAX_REQUESTS_PER_MINUTE = 7
app = Flask("DiscordRocks Instant Chat Proxy")
DISCORD_ROCKS_HOST = 'chat.discord.rocks'
CHAT_UI_HOST = 'cutycat2000x-instantchat.static.hf.space'
@app.route('/', methods=['GET', 'POST'])
@app.route("/<path:path>", methods=['GET', 'POST'])
def handle_request(path=""):
chat_ui_url = f'https://{DISCORD_ROCKS_HOST}/{path}'
ip = request.remote_addr
print("IP: "+ip)
method = request.method
data = request.data
params = request.args
headers = None
didReply = False
if method == 'POST':
headers = {'Content-Type': 'application/json'}
if 'reply' in path:
if request_count.get(ip, 0) >= MAX_REQUESTS_PER_MINUTE:
return jsonify({"error": "Too Many Requests. Please try again later."+ ip}), 429
if ip in ongoing_requests:
return jsonify({"error": "Concurrent requests not allowed."}), 429
ongoing_requests[ip] = True
request_count[ip] = request_count.get(ip, 0) + 1
didReply = True
json_data = request.get_json()
json_data['bypass'] = bypass
data = json.dumps(json_data)
response = requests.request(method, chat_ui_url, params=params, data=data, headers=headers)
proxied_response = Response(response.content)
proxied_response.status_code = response.status_code
proxied_response.headers["Content-Type"] = "text/html"
if didReply:
ongoing_requests.remove(ip)
decrement_request_count_task(ip)
return proxied_response
def decrement_request_count_task(ip):
@copy_current_request_context
def decrement_count():
try:
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(decrement_request_count(ip))
except Exception as e:
print(e)
threading.Thread(target=decrement_count).start()
async def decrement_request_count(ip):
try:
await asyncio.sleep(60) # Ensure this runs asynchronously
request_count[ip] = request_count.get(ip, 0) - 1
print(request_count[ip])
except Exception as es:
print(es)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)
|