server for telegarm interactions
This commit is contained in:
parent
f1299b3d60
commit
0dd5719169
2 changed files with 177 additions and 0 deletions
7
telegram-bridge/server/__init__.py
Normal file
7
telegram-bridge/server/__init__.py
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
"""
|
||||||
|
Server module for the Telegram bridge.
|
||||||
|
|
||||||
|
Provides FastAPI application for HTTP endpoints.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from server.app import app, get_telegram_service
|
||||||
170
telegram-bridge/server/app.py
Normal file
170
telegram-bridge/server/app.py
Normal file
|
|
@ -0,0 +1,170 @@
|
||||||
|
"""
|
||||||
|
FastAPI application for the Telegram bridge.
|
||||||
|
|
||||||
|
Provides HTTP API endpoints for interacting with Telegram.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from fastapi import FastAPI, HTTPException, Depends
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
|
from api.models import (
|
||||||
|
ChatModel,
|
||||||
|
MessageModel,
|
||||||
|
MessageContextModel,
|
||||||
|
SendMessageRequest,
|
||||||
|
SendMessageResponse
|
||||||
|
)
|
||||||
|
from service import TelegramService
|
||||||
|
|
||||||
|
# Create FastAPI app
|
||||||
|
app = FastAPI(
|
||||||
|
title="Telegram Bridge API",
|
||||||
|
description="API for interacting with Telegram",
|
||||||
|
version="1.0.0"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Service dependency
|
||||||
|
def get_telegram_service() -> TelegramService:
|
||||||
|
"""Get the Telegram service instance.
|
||||||
|
|
||||||
|
This function should be replaced with a proper dependency injection
|
||||||
|
mechanism to return the singleton instance of the TelegramService.
|
||||||
|
"""
|
||||||
|
# This is a placeholder. In main.py, we'll set this to the actual service instance
|
||||||
|
raise NotImplementedError("Telegram service not initialized")
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/api/chats", response_model=List[ChatModel])
|
||||||
|
async def list_chats(
|
||||||
|
query: Optional[str] = None,
|
||||||
|
limit: int = 50,
|
||||||
|
offset: int = 0,
|
||||||
|
chat_type: Optional[str] = None,
|
||||||
|
sort_by: str = "last_message_time",
|
||||||
|
service: TelegramService = Depends(get_telegram_service)
|
||||||
|
):
|
||||||
|
"""List chats."""
|
||||||
|
chats = service.chat_repo.get_chats(
|
||||||
|
query=query,
|
||||||
|
limit=limit,
|
||||||
|
offset=offset,
|
||||||
|
chat_type=chat_type,
|
||||||
|
sort_by=sort_by
|
||||||
|
)
|
||||||
|
return [
|
||||||
|
ChatModel(
|
||||||
|
id=chat.id,
|
||||||
|
title=chat.title,
|
||||||
|
username=chat.username,
|
||||||
|
type=chat.type,
|
||||||
|
last_message_time=chat.last_message_time
|
||||||
|
) for chat in chats
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/api/messages", response_model=List[MessageModel])
|
||||||
|
async def list_messages(
|
||||||
|
chat_id: Optional[int] = None,
|
||||||
|
sender_id: Optional[int] = None,
|
||||||
|
query: Optional[str] = None,
|
||||||
|
limit: int = 50,
|
||||||
|
offset: int = 0,
|
||||||
|
service: TelegramService = Depends(get_telegram_service)
|
||||||
|
):
|
||||||
|
"""List messages."""
|
||||||
|
messages = service.message_repo.get_messages(
|
||||||
|
chat_id=chat_id,
|
||||||
|
sender_id=sender_id,
|
||||||
|
query=query,
|
||||||
|
limit=limit,
|
||||||
|
offset=offset
|
||||||
|
)
|
||||||
|
return [
|
||||||
|
MessageModel(
|
||||||
|
id=msg.id,
|
||||||
|
chat_id=msg.chat_id,
|
||||||
|
chat_title=msg.chat.title,
|
||||||
|
sender_id=msg.sender_id,
|
||||||
|
sender_name=msg.sender_name,
|
||||||
|
content=msg.content,
|
||||||
|
timestamp=msg.timestamp,
|
||||||
|
is_from_me=msg.is_from_me
|
||||||
|
) for msg in messages
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/api/messages/{chat_id}/{message_id}/context", response_model=MessageContextModel)
|
||||||
|
async def get_message_context(
|
||||||
|
chat_id: int,
|
||||||
|
message_id: int,
|
||||||
|
before: int = 5,
|
||||||
|
after: int = 5,
|
||||||
|
service: TelegramService = Depends(get_telegram_service)
|
||||||
|
):
|
||||||
|
"""Get context around a message."""
|
||||||
|
try:
|
||||||
|
context = service.message_repo.get_message_context(
|
||||||
|
message_id=message_id,
|
||||||
|
chat_id=chat_id,
|
||||||
|
before=before,
|
||||||
|
after=after
|
||||||
|
)
|
||||||
|
|
||||||
|
# Convert to model
|
||||||
|
target_message = MessageModel(
|
||||||
|
id=context["message"].id,
|
||||||
|
chat_id=context["message"].chat_id,
|
||||||
|
chat_title=context["message"].chat.title,
|
||||||
|
sender_id=context["message"].sender_id,
|
||||||
|
sender_name=context["message"].sender_name,
|
||||||
|
content=context["message"].content,
|
||||||
|
timestamp=context["message"].timestamp,
|
||||||
|
is_from_me=context["message"].is_from_me
|
||||||
|
)
|
||||||
|
|
||||||
|
before_messages = [
|
||||||
|
MessageModel(
|
||||||
|
id=msg.id,
|
||||||
|
chat_id=msg.chat_id,
|
||||||
|
chat_title=msg.chat.title,
|
||||||
|
sender_id=msg.sender_id,
|
||||||
|
sender_name=msg.sender_name,
|
||||||
|
content=msg.content,
|
||||||
|
timestamp=msg.timestamp,
|
||||||
|
is_from_me=msg.is_from_me
|
||||||
|
) for msg in context["before"]
|
||||||
|
]
|
||||||
|
|
||||||
|
after_messages = [
|
||||||
|
MessageModel(
|
||||||
|
id=msg.id,
|
||||||
|
chat_id=msg.chat_id,
|
||||||
|
chat_title=msg.chat.title,
|
||||||
|
sender_id=msg.sender_id,
|
||||||
|
sender_name=msg.sender_name,
|
||||||
|
content=msg.content,
|
||||||
|
timestamp=msg.timestamp,
|
||||||
|
is_from_me=msg.is_from_me
|
||||||
|
) for msg in context["after"]
|
||||||
|
]
|
||||||
|
|
||||||
|
return MessageContextModel(
|
||||||
|
message=target_message,
|
||||||
|
before=before_messages,
|
||||||
|
after=after_messages
|
||||||
|
)
|
||||||
|
except ValueError as e:
|
||||||
|
raise HTTPException(status_code=404, detail=str(e))
|
||||||
|
|
||||||
|
|
||||||
|
@app.post("/api/send", response_model=SendMessageResponse)
|
||||||
|
async def send_message(
|
||||||
|
request: SendMessageRequest,
|
||||||
|
service: TelegramService = Depends(get_telegram_service)
|
||||||
|
):
|
||||||
|
"""Send a message to a Telegram recipient."""
|
||||||
|
success, message = await service.send_message(
|
||||||
|
recipient=request.recipient,
|
||||||
|
message=request.message
|
||||||
|
)
|
||||||
|
return SendMessageResponse(success=success, message=message)
|
||||||
Loading…
Add table
Reference in a new issue