Gateway

The Gateway is Ayaka’s way of implementing a easy–affordable and non-blocking event system.

Gaining the Port

Ayaka separates client connections using addresses

to get an available one just do:

import requests

r = requests.get('https://gateway.vincentrps.xyz/available')
print(r.json())

Available Domains

production-1: wss://gateway-prod-1.vincentrps.xyz

Identifying

Once you have done the initial connection with the gateway you will want to send your identification payload.

name

type

optional?

session_id

string

No

encoding

string

Yes

The encoding should be one of:

  • json

  • zlib

It is recommended to use the json encoding, as it doesn’t require decompressing and is more tested because of it’s ease-of-use.

This is a code example of a gateway connection:

import json
import asyncio
import requests
from websockets import client

r = requests.get('https://gateway.vincentrps.xyz/available')
d = r.text

async def connection():
    ws = await client.connect(f'wss://gateway.vincentrps.xyz:{d["port"]}', ping_timeout=20)
    await ws.send(json.dumps({'session_id': 'my_session_id'}))
    while True:
        recv = await ws.recv()
        print(recv)

asyncio.run(connection())

Keeping Alive

The only thing you need to do to keep the connection alive, is to ping the gateway before the timeout runs out.

  • PING_TIMEOUT: 20 seconds.

  • PING_INTERVAL: 20 seconds.

Note

Most WebSocket Wrappers should already do this automatically.

Event Payload

A event payload goes as so:

{
"t": "EVENT_NAME",
"d": {
    "key": "VaLuE12345"
    }
}

PRESENCE_UPDATE Payload:

{
"t": "PRESENCE_UPDATE",
"id": 123456,
"d": {
    "type": 1/2/3/4,
    "description": "string",
    "emoji": emoji_id,
    "embed": {
        "name": "string",
        "description": "string",
        "banner_url": "string",
        "text": {
            "top": "string",
            "bottom": "string",
            }
        }
    }
}

NOTIFICATION Payload:

{
"t": "NOTIFICATION",
"type": "MESSAGE, GUILD, EVERYONE, HERE",
"excerpt": {
        ...
    }
}

Event Reference

  • GUILD_CREATE Called when you create a Guild.

  • GUILD_JOIN Called when you join a Guild.

  • GUILD_INIT Called after you get the READY event.

Given one time for each guild, The new channels field will be added to the guild object.

  • GUILD_UPDATE Called when a Guild is updated.

  • GUILD_DELETE Called when a Guild is deleted.

  • INVITE_CREATE Called when a user creates an invite.

  • CHANNEL_CREATE Called when a channel is created.

  • PRESENCE_UPDATE Called when a user updates there presence.

  • NOTIFICATION Called when you get a notification