Files

44 lines
1.5 KiB
Python

from __future__ import annotations
from collections.abc import Mapping
from typing import Any
from werkzeug import Request
from dify_plugin.entities.trigger import Variables
from dify_plugin.errors.trigger import EventIgnoreError
class TelegramUpdateEvent:
"""Base class for Telegram webhook update events."""
update_key: str = ""
def _on_event(self, request: Request, parameters: Mapping[str, Any], payload: Mapping[str, Any]) -> Variables:
payload = self._parse_payload(request)
update = self._extract_update(payload)
variables = self._build_variables(payload, update, parameters)
return Variables(variables=variables)
def _parse_payload(self, request: Request) -> Mapping[str, Any]:
payload = request.get_json()
if not payload:
raise ValueError("No payload received from Telegram")
return payload
def _extract_update(self, payload: Mapping[str, Any]) -> Mapping[str, Any] | list[Any] | str | int | None:
if not self.update_key:
raise ValueError("update_key must be defined on TelegramUpdateEvent")
update = payload.get(self.update_key)
if update is None:
raise EventIgnoreError()
return update
def _build_variables(
self,
payload: Mapping[str, Any],
update: Mapping[str, Any] | list[Any] | str | int | None,
parameters: Mapping[str, Any],
) -> dict[str, Any]:
return {"update_id": payload.get("update_id"), self.update_key: update}