# -*- coding: utf-8 -*- """ Een Flask-applicatie die elke Discord-webhook op een dynamisch pad kan ontvangen, weergeeft als HTML, en doorstuurt naar een dynamisch gegenereerde URL op basis van een .env configuratie. Vereisten: pip install Flask python-dotenv requests Markdown waitress jinja2 Hoe te gebruiken: 1. Maak een `.env` bestand aan in dezelfde map. 2. Definieer 'OUTGOING_WEBHOOK_BASE_URL' en optioneel 'OUTGOING_WEBHOOK_PARAMS'. 3. Sla dit bestand op als `app.py`. 4. Voer het uit vanuit je terminal: `python app.py` 5. Stuur een POST-verzoek naar een willekeurig endpoint, bijv. http://127.0.0.1:5001/webhook/any-string-you-want """ import os import datetime import markdown import requests import json from flask import Flask, request, render_template, jsonify, abort, url_for from dotenv import load_dotenv from jinja2 import DictLoader # Laad de omgevingsvariabelen uit het .env-bestand load_dotenv() # Initialiseer de Flask-applicatie app = Flask(__name__) # Lees de configuratie uit de omgevingsvariabelen. OUTGOING_WEBHOOK_BASE_URL = os.getenv('OUTGOING_WEBHOOK_BASE_URL') OUTGOING_WEBHOOK_PARAMS = os.getenv('OUTGOING_WEBHOOK_PARAMS', '') # Standaard lege string if not OUTGOING_WEBHOOK_BASE_URL: print("WAARSCHUWING: OUTGOING_WEBHOOK_BASE_URL niet gevonden in .env. Doorsturen van webhooks is uitgeschakeld.") # In-memory opslag voor de laatst ontvangen webhook-data per ID. # Deze wordt dynamisch gevuld als er nieuwe webhooks binnenkomen. webhook_data_store = {} # --- HTML TEMPLATES (ongewijzigd) --- BASE_TEMPLATE = """
Hieronder staat een lijst van alle webhooks die ten minste één keer een bericht hebben ontvangen. Klik op een webhook om de laatste data te zien.
Inkomende URL's hebben de vorm /webhook/<naam>.
Uitgaande URL: {{ base_url or 'Niet geconfigureerd' }}<naam>{{ params }}
/webhook/<jouw-id>.{{ data.content }}
{% endif %} """ UI_WEBHOOK_VIEW_TEMPLATE = """ {% extends "base.html" %} {% block content %} ← Terug naar overzichttags.""" if not s: return "" html = markdown.markdown(s, extensions=['fenced_code', 'nl2br']) if html.startswith('
') and html.endswith('
'): html = html[3:-4] return html def forward_webhook(data, target_url, webhook_id): """Genereert simpele HTML en stuurt dit door naar de opgegeven target_url.""" if not target_url: print(f"Skipping forwarding voor webhook '{webhook_id}': geen uitgaande URL geconfigureerd.") return try: html_parts = [] for embed in data.get('embeds', []): if embed.get('author') and embed.get('author').get('name'): html_parts.append(f"{embed.get('author').get('name')}") if embed.get('title'): title, url = embed.get('title'), embed.get('url') html_parts.append(f"{title}" if url else f"{title}") if embed.get('description'): html_parts.append(markdown_filter(embed.get('description'))) if embed.get('fields'): for field in embed.get('fields'): html_parts.append(f"