Sindbad~EG File Manager

Current Path : /home/numerotech/whatsapp.numerotech.com/whatsapp/core/controller/
Upload File :
Current File : //home/numerotech/whatsapp.numerotech.com/whatsapp/core/controller/WhatsappController.py

from flask import request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,json,render_template_string,Response,send_file
import requests 
from .. import Cryptography,Auth,RouteGroup,Helper,socketio
from datetime import timedelta,date,datetime
from collections import defaultdict
from core import app, socketio  # Import app & socketio from __init__.py
import re
from flask_socketio import emit
import logging
from flask_cors import cross_origin

app = Blueprint('whatsapp', __name__)
logging.basicConfig(level=logging.INFO, encoding="utf-8")

# WhatsApp API Details
VERIFY_TOKEN = "wa_Almighty_84"
ACCESS_TOKEN = 'EAB0qrXZC1z5MBO3I0X7guUKXF6Kr8vaEFEJazOAqnnZALIE8w30sRYm85OkmVs4vVqYS9gxDrRAK9yzhgdI1cPgKkWMZCRAzVijZCjOEnPQf0uiD6N2md8ZA0zZCQnVgkDb0OKNMUI62e22a0SYMjsk26XHxhweZCxjDC7HeeuLJiORQu3rk0PZBP5lluCGml72cvAZDZD'
PHONE_NUMBER_ID = "602585279593372"

# SocketIO event for sending message
@socketio.on('sio_send_message')
def sio_send_message(data):
	print("yes comming sio_send_message")
	phone_number = data.get('phoneNumber')
	message = data.get('message')
	if not phone_number or not message:
		emit('sio_error', {'message': 'Phone number and message required'})
		return

	response_data = send_whatsapp_message(phone_number, message)
	if response_data:
		emit('sio_display_sent_message', {'phone': phone_number, 'message': message})

# Function to send WhatsApp message via API
def send_whatsapp_message(to, message):
	print("yes comming send_whatsapp_message")
	url = f'https://graph.facebook.com/v18.0/{PHONE_NUMBER_ID}/messages'
	headers = {
		'Authorization': f'Bearer {ACCESS_TOKEN}',
		'Content-Type': 'application/json'
	}
	data = {
		'messaging_product': 'whatsapp',
		'to': to,
		'type': 'text',
		'text': {'body': message}
	}
	response = requests.post(url, headers=headers, json=data)
	return response.json() if response.status_code == 200 else None

# Home Route
@app.route('/')
def index():
	return render_template('whatsapp_temp/index.html')

# Home Route
@app.route('/demo')
def demo():
	return render_template('whatsapp_temp/index.html')



VERIFY_TOKEN = "wa_Almighty_84"  # Your verification token

@app.route("/webhook", methods=["GET", "POST"])
def webhook():
	if request.method == "GET":
		# Verify the webhook
		mode = request.args.get("hub.mode")
		token = request.args.get("hub.verify_token")
		challenge = request.args.get("hub.challenge")

		if mode == "subscribe" and token == VERIFY_TOKEN:
			return challenge, 200  # Respond with the challenge token
		else:
			return "Forbidden", 403

	elif request.method == "POST":
		try:
			data = request.get_json()
			if not data:
				return jsonify({"error": "Invalid JSON"}), 400

			# Save webhook data to a file for debugging
			with open("webhook_logs.txt", "a", encoding="utf-8") as f:
				f.write(f"{datetime.now()} - {json.dumps(data, ensure_ascii=False)}\n")

			logging.info(f"Received webhook data: {json.dumps(data, ensure_ascii=False)}")

			if 'entry' in data:
				for entry in data['entry']:
					if 'changes' in entry:
						for change in entry['changes']:
							value = change.get('value', {})

							# Process message statuses (e.g., read receipts)
							if 'statuses' in value:
								for status in value['statuses']:
									message_id = status.get('id', 'Unknown')
									message_status = status.get('status', 'Unknown')
									recipient = status.get('recipient_id', 'Unknown')

									logging.info(f"Message {message_id} status for {recipient}: {message_status}")

									# Emit status update to frontend
									socketio.emit('message_status', {
										'message_id': message_id,
										'status': message_status,
										'recipient': recipient
									})

							# Process incoming messages
							if 'messages' in value:
								for message in value['messages']:
									from_number = message.get('from', 'Unknown')
									text_message = message.get('text', {}).get('body', '')

									logging.info(f"New message from {from_number}: {text_message}")

									# Emit received message in real-time
									socketio.emit('new_message', {
										'from': from_number,
										'message': text_message
									})

			return jsonify({"status": "Message received"}), 200

		except Exception as e:
			logging.error(f"Webhook processing error: {str(e)}")
			return jsonify({"error": "Internal Server Error"}), 500

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists