Files
max2telegram/app/models/tasks.py
kislovdm e7c32da1f9
Docker Hub / build-and-push (push) Failing after 13s
init
2026-06-12 00:42:55 +03:00

78 lines
2.0 KiB
Python

from enum import Enum
from typing import Any
from pydantic import BaseModel, Field
class TaskKind(str, Enum):
SEND_TO_TG = "send_to_tg"
SET_REACTION = "set_reaction"
NOTIFY_FALLBACK = "notify_fallback"
SEND_TO_MAX = "send_to_max"
class MediaItem(BaseModel):
kind: str
url: str | None = None
file_id: str | None = None
file_name: str | None = None
mime_type: str | None = None
caption: str | None = None
local_path: str | None = None
max_chat_id: int | None = None
max_message_id: int | None = None
max_file_id: int | None = None
max_video_id: int | None = None
class Max2TgTask(BaseModel):
kind: TaskKind = TaskKind.SEND_TO_TG
max_chat_id: int
max_message_id: int
text: str
sender_name: str | None = None
is_dm: bool = False
chat_title: str
needs_new_topic: bool = False
reply_to_tg_message_id: int | None = None
media: list[MediaItem] = Field(default_factory=list)
class SetReactionTask(BaseModel):
kind: TaskKind = TaskKind.SET_REACTION
tg_chat_id: int
tg_message_id: int
tg_thread_id: int | None = None
emoji: str = "🦄"
class NotifyFallbackTask(BaseModel):
kind: TaskKind = TaskKind.NOTIFY_FALLBACK
title: str
details: str
class Tg2MaxTask(BaseModel):
kind: TaskKind = TaskKind.SEND_TO_MAX
max_chat_id: int
text: str
tg_chat_id: int
tg_message_id: int
tg_thread_id: int | None = None
reply_to_max_message_id: int | None = None
media: list[MediaItem] = Field(default_factory=list)
def parse_queue_payload(data: str) -> Max2TgTask | SetReactionTask | NotifyFallbackTask | Tg2MaxTask:
raw: dict[str, Any] = __import__("json").loads(data)
kind = TaskKind(raw.get("kind", TaskKind.SEND_TO_TG))
if kind == TaskKind.SEND_TO_TG:
return Max2TgTask.model_validate(raw)
if kind == TaskKind.SET_REACTION:
return SetReactionTask.model_validate(raw)
if kind == TaskKind.NOTIFY_FALLBACK:
return NotifyFallbackTask.model_validate(raw)
if kind == TaskKind.SEND_TO_MAX:
return Tg2MaxTask.model_validate(raw)
raise ValueError(f"Unknown task kind: {kind}")