"""Приём вебхука от чата (Flask-пример; логика проверки — три строки и годится для любого фреймворка).

Чат шлёт POST с JSON и заголовком X-Chat-Signature: sha256=<HMAC-SHA256(секрет вебхука, ТЕЛО как есть)>.
Подпись считайте по сырому телу запроса до разбора JSON. Ответ 2xx в пределах 8 секунд = доставлено.
"""
import hashlib
import hmac

from flask import Flask, abort, request

app = Flask(__name__)
SECRET = "СЕКРЕТ_ВЕБХУКА"
seen_ids: set[int] = set()  # в бою — таблица в базе: повторные доставки возможны


def signature_ok(raw_body: bytes, header: str) -> bool:
    good = "sha256=" + hmac.new(SECRET.encode(), raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(good, header or "")


@app.post("/chat-hook")
def chat_hook():
    if not signature_ok(request.get_data(), request.headers.get("X-Chat-Signature", "")):
        abort(401)
    event = request.get_json()
    msg = event["message"]
    if msg["id"] not in seen_ids:           # обрабатываем каждое сообщение один раз
        seen_ids.add(msg["id"])
        print(f'[{event["room"]}] {msg["author"]}: {msg["body"]}')
    return "", 204
