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)