alan5543 commited on
Commit
45bc669
·
0 Parent(s):

First Commit

Browse files
Files changed (6) hide show
  1. .gitattributes +35 -0
  2. .gitignore +55 -0
  3. Dockerfile +23 -0
  4. README.md +10 -0
  5. app.py +90 -0
  6. requirements.txt +4 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ *.egg-info/
20
+ .installed.cfg
21
+ *.egg
22
+ MANIFEST
23
+
24
+ # Virtual environment
25
+ venv/
26
+ ENV/
27
+ env/
28
+ .env
29
+
30
+ # IDE
31
+ .vscode/
32
+ .idea/
33
+ *.swp
34
+ *.swo
35
+
36
+ # Logs
37
+ *.log
38
+ logs/
39
+
40
+ # Docker
41
+ docker-compose.yml
42
+ docker-compose.*.yml
43
+
44
+ # Secrets
45
+ secrets.yml
46
+ .env
47
+ *.env
48
+
49
+ # Database
50
+ *.sqlite3
51
+ *.db
52
+
53
+ # OS
54
+ .DS_Store
55
+ Thumbs.db
Dockerfile ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Use an official Python runtime as the base image
2
+ FROM python:3.9
3
+
4
+ # Create a non-root user
5
+ RUN useradd -m -u 1000 user
6
+ USER user
7
+ ENV PATH="/home/user/.local/bin:$PATH"
8
+
9
+ # Set working directory
10
+ WORKDIR /app
11
+
12
+ # Copy and install dependencies
13
+ COPY --chown=user requirements.txt .
14
+ RUN pip install --no-cache-dir --upgrade -r requirements.txt
15
+
16
+ # Copy the rest of the application
17
+ COPY --chown=user . /app
18
+
19
+ # Expose the required port
20
+ EXPOSE 7860
21
+
22
+ # Run the application
23
+ CMD ["python", "app.py"]
README.md ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: PersonalWebAssistant
3
+ emoji: 📉
4
+ colorFrom: yellow
5
+ colorTo: purple
6
+ sdk: docker
7
+ pinned: false
8
+ ---
9
+
10
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, jsonify
2
+ from telegram import Bot
3
+ from telegram.error import TelegramError
4
+ from dotenv import load_dotenv
5
+
6
+ # Change this import
7
+ from datetime import datetime, UTC # instead of just datetime
8
+ import os
9
+ import asyncio
10
+
11
+ app = Flask(__name__)
12
+ load_dotenv()
13
+
14
+ TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
15
+ TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID")
16
+
17
+ bot = Bot(token=TELEGRAM_BOT_TOKEN)
18
+
19
+ async def send_telegram_message_async(message):
20
+ try:
21
+ await bot.send_message(
22
+ chat_id=TELEGRAM_CHAT_ID,
23
+ text=message,
24
+ parse_mode="Markdown",
25
+ disable_notification=True
26
+ )
27
+ return {"ok": True}
28
+ except TelegramError as e:
29
+ return {"ok": False, "error": str(e)}
30
+
31
+ def send_telegram_message(message):
32
+ # Run async function in Flask's synchronous context
33
+ loop = asyncio.new_event_loop()
34
+ asyncio.set_event_loop(loop)
35
+ result = loop.run_until_complete(send_telegram_message_async(message))
36
+ loop.close()
37
+ return result
38
+
39
+ @app.route('/', methods=['GET'])
40
+ def health_check():
41
+ return jsonify(
42
+ {
43
+ "status": "healthy",
44
+ "message": "Telegram backend is running",
45
+ "timestamp": datetime.now(UTC).isoformat() + " UTC"
46
+ }
47
+ )
48
+
49
+ @app.route('/send-message', methods=['POST'])
50
+ def send_message():
51
+ try:
52
+ data = request.get_json()
53
+ required_fields = ['name', 'email', 'message']
54
+ if not all(field in data for field in required_fields):
55
+ return jsonify({"error": "Missing required fields: name, email, message"}), 400
56
+
57
+ name = data['name'].strip()
58
+ email = data['email'].strip()
59
+ message = data['message'].strip()
60
+
61
+ if not all([name, email, message]):
62
+ return jsonify({"error": "All fields must not be empty"}), 400
63
+ if len(message) > 4096:
64
+ return jsonify({"error": "Message exceeds 4096 character limit"}), 400
65
+ if '@' not in email or '.' not in email.split('@')[1]:
66
+ return jsonify({"error": "Invalid email format"}), 400
67
+
68
+ timestamp = datetime.now(UTC).isoformat().split('.')[0] + " UTC"
69
+ telegram_message = (
70
+ f"*New Message*\n"
71
+ f"_Received on: {timestamp}_\n"
72
+ f"---\n"
73
+ f"*Sender Details:*\n"
74
+ f"- *Name:* {name}\n"
75
+ f"- *Email:* {email}\n"
76
+ f"---\n"
77
+ f"*Message:*\n"
78
+ f"{message}"
79
+ )
80
+
81
+ result = send_telegram_message(telegram_message)
82
+ if result.get("ok"):
83
+ return jsonify({"success": True, "message": "Message sent to Telegram"}), 200
84
+ else:
85
+ return jsonify({"error": "Failed to send message", "details": result.get("error", "Unknown error")}), 500
86
+ except Exception as e:
87
+ return jsonify({"error": f"Server error: {str(e)}"}), 500
88
+
89
+ if __name__ == "__main__":
90
+ app.run(host="0.0.0.0", port=7860)
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ flask==3.0.3
2
+ requests==2.32.3
3
+ python-dotenv==1.0.1
4
+ python-telegram-bot==21.4