Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import discord
- import json
- import random
- from threading import Thread
- import time
- import websocket
- version = "2.1"
- def default_handler(self, message):
- msg = json.loads(message)
- event_data = msg["d"]
- user = event_data["author"]["username"]
- discrim = event_data["author"]["discriminator"]
- content = event_data["content"]
- print(user + "#" + str(discrim) + ": " + content)
- return True
- class Client:
- def __init__(self, auth_token, uid, discord, is_bot, message_handler = default_handler, device = "Tron#0056's discord_gateway.py"):
- self.auth = auth_token
- self.uid = uid
- self.discord = discord
- self.bot = is_bot
- self.alive = True
- self.channels = {}
- self.guilds = {}
- self.last = 0
- self.message_handler = message_handler
- self.device = device
- self.ws = websocket.create_connection("wss://gateway.discord.gg/")
- if self.bot:
- self.send(2, {"token": self.auth,
- "properties": {
- "os": "linux",
- "browser": device,
- "device": device,
- "referrer": "",
- "referring_domain": ""
- },
- "compress": False,
- "large_threshold": 250,
- "shard": [0, 1]
- } )
- else:
- self.send(2, {"token": self.auth,
- "properties": {
- "os": "Windows",
- "browser": "Chrome",
- "device": "",
- "referrer": "https://discordapp.com/",
- "referring_domain": "discordapp.com"
- },
- "compress": False,
- "large_threshold" : 100,
- "synced_guilds": [],
- } )
- resp = self.ws.recv()
- try:
- ready = json.loads(resp)
- except ValueError:
- print(resp)
- self.alive = False
- self.session = ready["d"]["session_id"]
- self.interval = ready["d"]["heartbeat_interval"]
- self.last = ready["s"]
- self.thread = Thread(target = self.receive)
- self.thread.start()
- self.heart = Thread(target = self.heartbeat)
- self.heart.start()
- def send(self, opcode, data, event = None, sequence = None):
- if opcode != 0:
- payload = json.dumps({"op": int(opcode), "d": data})
- try:
- return self.ws.send(payload)
- except BrokenPipeError:
- self.resume()
- return False
- else:
- payload = json.dumps( {"op": int(opcode), "d": data, "s": sequence, "t": event} )
- try:
- return self.ws.send(payload)
- except BrokenPipeError:
- self.resume()
- return False
- def heartbeat(self):
- while self.alive:
- time.sleep(self.interval / 1000)
- self.send(1, self.last)
- def resume(self):
- try:
- self.ws = websocket.create_connection("wss://gateway.discord.gg/")
- self.send(6, {"token": self.auth, "session_id": self.session, "seq": self.last} )
- except websocket._exceptions.WebSocketBadStatusException:
- print("Connection failed.")
- def receive(self):
- while self.alive:
- try:
- message = self.ws.recv()
- self.handle(message)
- except websocket._exceptions.WebSocketConnectionClosedException:
- self.resume()
- except ConnectionResetError:
- self.resume()
- def handle(self, message):
- return self.message_handler(self, message)
Advertisement
Add Comment
Please, Sign In to add comment