q

<p>import websocket<br /> import json<br /> import requests<br /> import threading<br /> import time<br /> import datetime<br /> from datetime import timezone, timedelta<br /> import os<br /> from dotenv import load_dotenv</p> <p>load_dotenv()</p> <p>KANAL_ID = os.getenv(&quot;KANAL_ID&quot;)<br /> WEBHOOK_URL = os.getenv(&quot;WEBHOOK_URL&quot;)<br /> TOKEN = os.getenv(&quot;TOKEN&quot;)<br /> BOT_MESAJLARI_ILET = os.getenv(&quot;BOT_MESAJLARI_ILET&quot;, &quot;False&quot;).lower() == &quot;true&quot;<br /> ETIKET_KONTROLU = os.getenv(&quot;ETIKET_KONTROLU&quot;, &quot;True&quot;).lower() == &quot;true&quot;</p> <p>processed_messages = set()<br /> message_count = 0 &nbsp;</p> <p>def send_json_request(ws, request):<br /> &nbsp; &nbsp; ws.send(json.dumps(request))</p> <p>def receive_json_response(ws):<br /> &nbsp; &nbsp; response = ws.recv()<br /> &nbsp; &nbsp; if response:<br /> &nbsp; &nbsp; &nbsp; &nbsp; return json.loads(response)</p> <p>def heartbeat(interval, ws):<br /> &nbsp; &nbsp; while True:<br /> &nbsp; &nbsp; &nbsp; &nbsp; time.sleep(interval)<br /> &nbsp; &nbsp; &nbsp; &nbsp; heartbeatJSON = {&quot;op&quot;: 1, &quot;d&quot;: None}<br /> &nbsp; &nbsp; &nbsp; &nbsp; send_json_request(ws, heartbeatJSON)</p> <p>def on_message(ws, message):<br /> &nbsp; &nbsp; global message_count<br /> &nbsp; &nbsp; message_data = json.loads(message)</p> <p>&nbsp; &nbsp; if message_data.get(&quot;t&quot;) == &quot;MESSAGE_CREATE&quot;:<br /> &nbsp; &nbsp; &nbsp; &nbsp; data = message_data.get(&quot;d&quot;, {})<br /> &nbsp; &nbsp; &nbsp; &nbsp; channel_id = data.get(&quot;channel_id&quot;)<br /> &nbsp; &nbsp; &nbsp; &nbsp; message_id = data.get(&quot;id&quot;)<br /> &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; if message_id in processed_messages or channel_id != KANAL_ID:<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return<br /> &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; processed_messages.add(message_id)<br /> &nbsp; &nbsp; &nbsp; &nbsp; if len(processed_messages) &gt; 100:<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; processed_messages.clear()</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; author = data.get(&quot;author&quot;, {}).get(&quot;username&quot;, &quot;Bilinmeyen&quot;)<br /> &nbsp; &nbsp; &nbsp; &nbsp; author_id = data.get(&quot;author&quot;, {}).get(&quot;id&quot;, &quot;Bilinmeyen&quot;)<br /> &nbsp; &nbsp; &nbsp; &nbsp; content = data.get(&quot;content&quot;, &quot;&quot;).strip()</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; # Tarih formatı (GMT+3)<br /> &nbsp; &nbsp; &nbsp; &nbsp; timestamp = data.get(&quot;timestamp&quot;, &quot;&quot;)<br /> &nbsp; &nbsp; &nbsp; &nbsp; utc_time = datetime.datetime.strptime(timestamp, &quot;%Y-%m-%dT%H:%M:%S.%f%z&quot;)<br /> &nbsp; &nbsp; &nbsp; &nbsp; turkey_tz = timezone(timedelta(hours=3))<br /> &nbsp; &nbsp; &nbsp; &nbsp; local_time = utc_time.astimezone(turkey_tz)<br /> &nbsp; &nbsp; &nbsp; &nbsp; formatted_time = local_time.strftime(&quot;%d.%m.%Y %H:%M&quot;)</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; # Webhook mesajı oluştur<br /> &nbsp; &nbsp; &nbsp; &nbsp; formatted_message = f&quot;**{author}** g&ouml;nderdi:\n\n{content}\n\n&quot;<br /> &nbsp; &nbsp; &nbsp; &nbsp; formatted_message += f&quot;**Tarih**: {formatted_time}&quot;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; webhook_data = {&quot;content&quot;: formatted_message, &quot;username&quot;: author}<br /> &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; try:<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; requests.post(WEBHOOK_URL, json=webhook_data)<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; message_count += 1<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(f&quot;İletilen mesaj sayısı: {message_count}&quot;)<br /> &nbsp; &nbsp; &nbsp; &nbsp; except Exception as e:<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(f&quot;Webhook hatası: {e}&quot;)</p> <p>def on_error(ws, error):<br /> &nbsp; &nbsp; print(f&quot;Hata: {error}&quot;)</p> <p>def on_close(ws, close_status_code, close_msg):<br /> &nbsp; &nbsp; print(&quot;Bağlantı kapandı, yeniden bağlanıyor...&quot;)<br /> &nbsp; &nbsp; time.sleep(5)<br /> &nbsp; &nbsp; main()</p> <p>def on_open(ws):<br /> &nbsp; &nbsp; payload = {<br /> &nbsp; &nbsp; &nbsp; &nbsp; &#39;op&#39;: 2,<br /> &nbsp; &nbsp; &nbsp; &nbsp; &quot;d&quot;: {<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;token&quot;: TOKEN,<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;properties&quot;: {<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;$os&quot;: &quot;windows&quot;,<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;$browser&quot;: &quot;chrome&quot;,<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;$device&quot;: &quot;pc&quot;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br /> &nbsp; &nbsp; &nbsp; &nbsp; }<br /> &nbsp; &nbsp; }<br /> &nbsp; &nbsp; send_json_request(ws, payload)<br /> &nbsp; &nbsp; threading.Thread(target=heartbeat, args=(40, ws), daemon=True).start()</p> <p>def main():<br /> &nbsp; &nbsp; ws = websocket.WebSocketApp(<br /> &nbsp; &nbsp; &nbsp; &nbsp; &#39;wss://gateway.discord.gg/?v=9&amp;encoding=json&#39;,<br /> &nbsp; &nbsp; &nbsp; &nbsp; on_message=on_message,<br /> &nbsp; &nbsp; &nbsp; &nbsp; on_error=on_error,<br /> &nbsp; &nbsp; &nbsp; &nbsp; on_close=on_close<br /> &nbsp; &nbsp; )<br /> &nbsp; &nbsp; ws.on_open = on_open<br /> &nbsp; &nbsp; ws.run_forever()</p> <p>if __name__ == &quot;__main__&quot;:<br /> &nbsp; &nbsp; print(&quot;Bot başlatılıyor...&quot;)<br /> &nbsp; &nbsp; while True:<br /> &nbsp; &nbsp; &nbsp; &nbsp; try:<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; main()<br /> &nbsp; &nbsp; &nbsp; &nbsp; except Exception as e:<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(f&quot;Bağlantı hatası: {e}, yeniden deneniyor...&quot;)<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; time.sleep(5)</p>