Skip to content

Instantly share code, notes, and snippets.

@lun-4
Created November 27, 2017 02:40
Show Gist options
  • Save lun-4/d21f9634c1514fd469f29c1b6e5ab5d8 to your computer and use it in GitHub Desktop.
Save lun-4/d21f9634c1514fd469f29c1b6e5ab5d8 to your computer and use it in GitHub Desktop.
things discord ipc am i righte
import socket
import logging
import json
import struct
logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger(__name__)
class RPC:
def __init__(self, socket_name, client_id: str):
self.client_id = str(client_id)
self.sockname = socket_name
self.sock = None
def send(self, op, payload):
log.debug('sending payload: %r', payload)
payload = json.dumps(payload)
encoding = struct.pack('<ii', op, len(payload))
return self.sock.send(encoding + payload.encode())
def read(self):
log.debug('getting data')
data = self.sock.recv(1024)
log.debug('received data: %r', data)
op, length = struct.unpack('<ii', data[:8])
log.debug('op %d len %d', op, length)
return op, json.loads(data[8:].decode('utf-8'))
def connect(self):
log.info('Connecting..')
self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
self.sock.connect(self.sockname)
self.handshake()
def handshake(self):
log.info('Handshaking..')
self.send(0, {'v': 1, 'client_id': self.client_id})
def main():
rpc = RPC('/run/user/1000/discord-ipc-0', '381973222847152139')
rpc.connect()
# do whatever you want here
while True:
log.info(rpc.read())
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment