File size: 2,429 Bytes
34a1cb8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from openai import OpenAI
from flask import Flask, request
import requests
from loguru import logger

app = Flask(__name__)

BOT_TOKEN = "8003439194:AAGQNjq3dQSZi4Ztv2Z0yyZx1ZnD0L5MR5o"
TELEGRAM_API_URL = f"https://api.telegram.org/bot{BOT_TOKEN}"

client = OpenAI(
    api_key="0",
    base_url="https://0f21-5-195-0-150.ngrok-free.app/v1",
)

@app.route("/test")
def test():
    return "Hello, World!"

DEFAULT_CAPTION = "Please provide a caption for the image."
@app.route(f"/{BOT_TOKEN}", methods=["POST"])
def telegram_webhook():
    data = request.json
    chat_id = data["message"]["chat"]["id"]
    messages: list[dict] = [{
        "role": "user",
        "content": []
    }]
    logger.debug(f"Received message: {data}")
    if "text" in data["message"]:
        user_message = data["message"]["text"]
        messages[0]['content'].append({"type": "text", "text": user_message})

    if "photo" in data["message"]:
        file_id = data["message"]["photo"][-1]["file_id"]
        file_info = requests.get(f"{TELEGRAM_API_URL}/getFile?file_id={file_id}").json()
        file_path = file_info["result"]["file_path"]
        image_url = f"https://api.telegram.org/file/bot{BOT_TOKEN}/{file_path}"
        messages[0]['content'].append({
                    "type": "image_url",
                    "image_url": {"url": image_url},
                })
        if "caption" in data["message"]:
            messages[0]['content'].append({"type": "text", "text": data["message"]["caption"]})
        else:
            messages[0]['content'].append({"type": "text", "text": DEFAULT_CAPTION})

    if "text" not in data['message'] and "photo" not in data['message']:
        send_message(chat_id, "Unsupported message type. Please send text or an image.")
        return "ok", 200

    try:
        logger.debug(f"Sending message to OpenAI: {messages}")
        result = client.chat.completions.create(messages=messages, model="test")
        response_text = result.choices[0].message.content
    except Exception as e:
        logger.error(f"Error processing message: {e}")
        response_text = "There was an error processing your request."

    send_message(chat_id, response_text)
    return "ok", 200


def send_message(chat_id, text):
    url = f"{TELEGRAM_API_URL}/sendMessage"
    payload = {"chat_id": chat_id, "text": text}
    requests.post(url, json=payload)


if __name__ == "__main__":
    app.run(port=5000)