diff --git a/README.md b/README.md index 017c42f..7fdcb77 100644 --- a/README.md +++ b/README.md @@ -4,111 +4,101 @@ This is the javascript sdk package required to create a javascript tap server responsible for the audio of `zako`, a discord audio bot. -## Requirements +## Dependencies | package | version | | --- | --- | -| eventemitter | 0.2.0 | -| requests | 2.32.4 | -| websockets | 15.0.1 | +| eventemitter3 | 5.0.1" | +| got | 14.4.7 | +| jest | 30.0.4 | +| ws | 8.18.3 | +| zod | 3.25.72 | ## Quickstart Example -First, you need to download `zako-sdk-py` on your project. +First, you need to download `zako-sdk-js` on your project. ```bash -pip install zako-sdk-py +npm install zako-sdk-js ``` Then, you can use the sdk. Here is some example. -```py -import io -import asyncio -from zakotap import Client, ClientData, HelloResponse, AudioRequest +```js +import { createClient } from "zako-sdk-js" -streamFile = io.BytesIO(b"test audio data") +const client = createClient({ + name: "your zako tap server name", + token: "your zako tap server token", + zakoEndpoint: "zako endpoint (default is https://api.zako.ac)" +}); -clientData: ClientData = { - "name": "your tap name", - "token": "your tap token", - "zakoEndpoint": "zako endpoint (default is https://api.zako.ac)" -} +client.events.on("ready", () => { + console.log("ready"); +}); -client = Client(clientData) +client.events.on("request", (handle) => { + handle.respond("audio stream on here") +}); -def on_ready(data: HelloResponse): - print("Client is ready. Connected Tab Hub version", data.get("version")) +client.events.on("connectionError", (e) => { + console.error(e); +}); -def on_close(message: str): - print("Connection closed:", message) +client.events.on("error", (e) => { + console.error(e); +}); -def on_warn(message: str): - print("Warning:", message) - -def on_error(message: str): - print("Error:", message) - -def on_audio_sync(audio_request: AudioRequest): - print("Audio") - loop = asyncio.get_event_loop() - task = loop.create_task(on_audio(audio_request)) - -async def on_audio(audio_request: AudioRequest): - print("Received audio request:", audio_request, flush = True) - await client.send(audio_request.get("id"), streamFile) - -client.on("warn", on_warn) -client.on("error", on_error) -client.on("ready", on_ready) -client.on("close", on_close) -client.on("audio", on_audio_sync) - -client.connect() +client.connect(); +await new Promise((r) => setTimeout(r, 100000)); ``` ## Client Description ### 1. Create Client and Connect -You can create tap server client by call `Client` class in `zakotap` package. +You can create tap server client by call `createClient` function in `tap-sdk-js` package. -You should put the client data written as `ClientData` type inside the parentheses of `Client`. +You should put the client data written as `ZakoTapConfig` type inside the argument of `createClient`. You can then connect to the tab server using `client.connect()`. -```py -from zakotap import Client, ClientData +```js +import { createClient } from "zako-sdk-js" -clientData: ClientData = { - "name": "your tap server name", - "token": "your tap server token", - "zakoEndpoint": "zako tap hub endpoint (option)" -} +const client = createClient({ + name: "your zako tap server name", + token: "your zako tap server token", + zakoEndpoint: "zako endpoint (option)" + backoffBaseMs: "loop waiting time (option)"; +}); -client = Client(clientData) - -client.connect() +client.connect(); ``` ### 2. Client Event Using the client created above, you can use client.on to perform a specific function when the EventEmitter's event is called. -```py -client.on("event name", function) +```js +client.events.on("event name", function) ``` -The types of events are specified in EmitterEvents among the types in the zakotap package. +The types of events are specified in TapEvents among the types in the zakotap package. -#### Emitter Events -- `"ready"`: This event is called when the zako tap server successfully connects to the `zako tap hub`. -- `"close"`: This event is called when the `web socket` between the `zako tap server` and `tap hub` is closed. -- `"audio"`: This event is called when an `audio request` is received from the `zako tap hub`. -- `"warn"`: This event is called when a warning occurs within the zakotap package that should notify the developer. -- `"error"`: This event is called when an error occurs within the zakotap package. +#### Tap Events +- `ready`: This event is called when the zako tap server successfully connects to the `zako tap hub`. +- `request`: This event is called when an `audio request` is received from the `zako tap hub`. +- `connectionError`: This event is called when an connection error occurs within the zakotap package. +- `error`: This event is called when an error occurs within the zakotap package. ### 3. Send Audio +You can send your audio stream by using `handle.respond()` function. +```js +handle.respond("your audio stream") +``` +You can get `audio request handle` from request event parameter. If you don't send an audio stream, your tap server will be considered offline and you may be disconnected. + ## Work Flow ```mermaid @@ -129,4 +119,3 @@ sequenceDiagram ## Authors - [@ridanit-ruma](https://github.com/ridanit-ruma) (Discord: `ruma0607`) -- [@MincoMK](https://github.com/MincoMK) (Discord: `minco_rl`)