q

import websocket
import json
import requests
import threading
import time
import datetime
from datetime import timezone, timedelta
import os
from dotenv import load_dotenv

load_dotenv()

KANAL_ID = os.getenv("KANAL_ID")
WEBHOOK_URL = os.getenv("WEBHOOK_URL")
TOKEN = os.getenv("TOKEN")
BOT_MESAJLARI_ILET = os.getenv("BOT_MESAJLARI_ILET", "False").lower() == "true"
ETIKET_KONTROLU = os.getenv("ETIKET_KONTROLU", "True").lower() == "true"

processed_messages = set()
message_count = 0  

def send_json_request(ws, request):
    ws.send(json.dumps(request))

def receive_json_response(ws):
    response = ws.recv()
    if response:
        return json.loads(response)

def heartbeat(interval, ws):
    while True:
        time.sleep(interval)
        heartbeatJSON = {"op": 1, "d": None}
        send_json_request(ws, heartbeatJSON)

def on_message(ws, message):
    global message_count
    message_data = json.loads(message)

    if message_data.get("t") == "MESSAGE_CREATE":
        data = message_data.get("d", {})
        channel_id = data.get("channel_id")
        message_id = data.get("id")
        
        if message_id in processed_messages or channel_id != KANAL_ID:
            return
        
        processed_messages.add(message_id)
        if len(processed_messages) > 100:
            processed_messages.clear()

        author = data.get("author", {}).get("username", "Bilinmeyen")
        author_id = data.get("author", {}).get("id", "Bilinmeyen")
        content = data.get("content", "").strip()

        # Tarih format?? (GMT+3)
        timestamp = data.get("timestamp", "")
        utc_time = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%f%z")
        turkey_tz = timezone(timedelta(hours=3))
        local_time = utc_time.astimezone(turkey_tz)
        formatted_time = local_time.strftime("%d.%m.%Y %H:%M")

        # Webhook mesaj?? olu??tur
        formatted_message = f"**{author}** gönderdi:\n\n{content}\n\n"
        formatted_message += f"**Tarih**: {formatted_time}"

        webhook_data = {"content": formatted_message, "username": author}
        
        try:
            requests.post(WEBHOOK_URL, json=webhook_data)
            message_count += 1
            print(f"??letilen mesaj say??s??: {message_count}")
        except Exception as e:
            print(f"Webhook hatas??: {e}")

def on_error(ws, error):
    print(f"Hata: {error}")

def on_close(ws, close_status_code, close_msg):
    print("Ba??lant?? kapand??, yeniden ba??lan??yor...")
    time.sleep(5)
    main()

def on_open(ws):
    payload = {
        'op': 2,
        "d": {
            "token": TOKEN,
            "properties": {
                "$os": "windows",
                "$browser": "chrome",
                "$device": "pc"
            }
        }
    }
    send_json_request(ws, payload)
    threading.Thread(target=heartbeat, args=(40, ws), daemon=True).start()

def main():
    ws = websocket.WebSocketApp(
        'wss://gateway.discord.gg/?v=9&encoding=json',
        on_message=on_message,
        on_error=on_error,
        on_close=on_close
    )
    ws.on_open = on_open
    ws.run_forever()

if __name__ == "__main__":
    print("Bot ba??lat??l??yor...")
    while True:
        try:
            main()
        except Exception as e:
            print(f"Ba??lant?? hatas??: {e}, yeniden deneniyor...")
            time.sleep(5)