Skip to content
This repository was archived by the owner on Apr 13, 2025. It is now read-only.

Feature: Update nodecg-io-streamelements to include test events #287

Merged
merged 5 commits into from
Nov 5, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions samples/streamelements-events/extension/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ module.exports = function (nodecg: NodeCG) {
);
}
});

client.onTest((data) => {
nodecg.log.info(JSON.stringify(data));
});
});

streamElements?.onUnavailable(() => nodecg.log.info("SE client has been unset."));
Expand Down
37 changes: 28 additions & 9 deletions services/nodecg-io-streamelements/extension/StreamElements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { EventEmitter } from "events";
export class StreamElementsServiceClient extends EventEmitter {
private socket: SocketIOClient.Socket;

constructor(private jwtToken: string) {
constructor(private jwtToken: string, private handleTestEvents: boolean) {
super();
}

Expand All @@ -30,6 +30,13 @@ export class StreamElementsServiceClient extends EventEmitter {
}
this.emit(data.type, data);
});
if (this.handleTestEvents) {
this.onTestEvent((data: StreamElementsEvent) => {
if (data.listener) {
this.emit("test", data);
}
});
}
}

async connect(): Promise<void> {
Expand Down Expand Up @@ -77,39 +84,51 @@ export class StreamElementsServiceClient extends EventEmitter {
this.socket.on("connect_error", handler);
}

onEvent(handler: (data: StreamElementsEvent) => void): void {
private onEvent(handler: (data: StreamElementsEvent) => void): void {
this.socket.on("event", (data: StreamElementsEvent) => {
if (data) {
handler(data);
}
});
}

onSubscriber(handler: (data: StreamElementsEvent) => void): void {
private onTestEvent(handler: (data: StreamElementsEvent) => void): void {
this.socket.on("event:test", (data: StreamElementsEvent) => {
if (data) {
handler(data);
}
});
}

public onSubscriber(handler: (data: StreamElementsEvent) => void): void {
this.on("subscriber", handler);
}

onTip(handler: (data: StreamElementsEvent) => void): void {
public onTip(handler: (data: StreamElementsEvent) => void): void {
this.on("tip", handler);
}

onCheer(handler: (data: StreamElementsEvent) => void): void {
public onCheer(handler: (data: StreamElementsEvent) => void): void {
this.on("cheer", handler);
}

onGift(handler: (data: StreamElementsEvent) => void): void {
public onGift(handler: (data: StreamElementsEvent) => void): void {
this.on("gift", handler);
}

onFollow(handler: (data: StreamElementsEvent) => void): void {
public onFollow(handler: (data: StreamElementsEvent) => void): void {
this.on("follow", handler);
}

onRaid(handler: (data: StreamElementsEvent) => void): void {
public onRaid(handler: (data: StreamElementsEvent) => void): void {
this.on("raid", handler);
}

onHost(handler: (data: StreamElementsEvent) => void): void {
public onHost(handler: (data: StreamElementsEvent) => void): void {
this.on("host", handler);
}

public onTest(handler: (data: StreamElementsEvent) => void): void {
this.on("test", handler);
}
}
10 changes: 10 additions & 0 deletions services/nodecg-io-streamelements/extension/StreamElementsEvent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,5 +85,15 @@ export interface StreamElementsEvent {
* Event update date and time
*/
updatedAt: string;
/**
* Listener property for test events
*/
listener?: string;
/**
* Event property for test events
*/
event?: {
[k: string]: unknown;
};
[k: string]: unknown;
}
5 changes: 3 additions & 2 deletions services/nodecg-io-streamelements/extension/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { StreamElementsServiceClient } from "./StreamElements";

interface StreamElementsServiceConfig {
jwtToken: string;
handleTestEvents: boolean;
}

export { StreamElementsServiceClient } from "./StreamElements";
Expand All @@ -15,12 +16,12 @@ module.exports = (nodecg: NodeCG) => {

class StreamElementsService extends ServiceBundle<StreamElementsServiceConfig, StreamElementsServiceClient> {
async validateConfig(config: StreamElementsServiceConfig) {
return new StreamElementsServiceClient(config.jwtToken).testConnection();
return new StreamElementsServiceClient(config.jwtToken, config.handleTestEvents).testConnection();
}

async createClient(config: StreamElementsServiceConfig, logger: Logger) {
logger.info("Connecting to StreamElements socket server...");
const client = new StreamElementsServiceClient(config.jwtToken);
const client = new StreamElementsServiceClient(config.jwtToken, config.handleTestEvents);
await client.connect();
logger.info("Successfully connected to StreamElements socket server.");

Expand Down
2 changes: 1 addition & 1 deletion services/nodecg-io-streamelements/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,6 @@
"dependencies": {
"@types/socket.io-client": "^1.4.36",
"nodecg-io-core": "^0.2.0",
"socket.io-client": "^4.3.2"
"socket.io-client": "^2.4.0"
}
}
5 changes: 5 additions & 0 deletions services/nodecg-io-streamelements/streamelements-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@
"jwtToken": {
"type": "string",
"description": "Your JWT token for streamelments."
},
"handleTestEvents": {
"type": "boolean",
"default": false,
"description": "Whether test events should be handled."
}
},
"required": ["jwtToken"]
Expand Down