Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
codeoverflow-org committed Jun 12, 2023
1 parent 5619a90 commit 408a1a1
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 21 deletions.
Binary file modified streamelements-events-0.3.0.tgz
Binary file not shown.
62 changes: 41 additions & 21 deletions streamelements-events/extension/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import NodeCG from "@nodecg/types";
import { StreamElementsReplicant, StreamElementsServiceClient } from "nodecg-io-streamelements";
import { StreamElementsEvent, StreamElementsTestEvent } from "nodecg-io-streamelements/extension/StreamElementsEvent";
import { requireService } from "nodecg-io-core";

module.exports = function (nodecg: NodeCG.ServerAPI) {
Expand All @@ -12,38 +13,32 @@ module.exports = function (nodecg: NodeCG.ServerAPI) {
nodecg.log.info("SE client has been updated, registering handlers now.");

client.onCheer((data) => {
nodecg.log.info(
`${data.data.displayName} just cheered ${data.data.amount} bit(s). Message: ${data.data.message}`,
);
nodecg.log.info(`${getName(data)} just cheered ${data.data.amount} bit(s). Message: ${data.data.message}`);
});

client.onTestCheer((data) => {
nodecg.log.info(
`${data.event.displayName} just cheered ${data.event.amount} bit(s). Message: ${data.event.message}`,
`${getName(data)} just cheered ${data.event.amount} bit(s). Message: ${data.event.message}`,
);
});

client.onFollow((data) => {
nodecg.log.info(`${data.data.displayName} just followed.`);
nodecg.log.info(`${getName(data)} just followed.`);
});

client.onTestFollow((data) => {
nodecg.log.info(`${data.event.displayName} just followed.`);
nodecg.log.info(`${getName(data)} just followed.`);
});

client.onSubscriber((data) => {
nodecg.log.info(
`${data.data.displayName} just subscribed for ${data.data.amount} months (${formatSubTier(
data.data.tier,
)}).`,
`${getName(data)} just subscribed for ${data.data.amount} months (${formatSubTier(data.data.tier)}).`,
);
});

client.onTestSubscriber((data) => {
nodecg.log.info(
`${data.event.displayName} just subscribed for ${data.event.amount} months (${formatSubTier(
data.event.tier,
)}).`,
`${getName(data)} just subscribed for ${data.event.amount} months (${formatSubTier(data.event.tier)}).`,
);
});

Expand All @@ -57,47 +52,51 @@ module.exports = function (nodecg: NodeCG.ServerAPI) {

client.onGift((data) => {
nodecg.log.info(
`${data.data.displayName} just got a tier ${formatSubTier(data.data.tier)} subscription from ${
`${getName(data)} just got a tier ${formatSubTier(data.data.tier)} subscription from ${
data.data.sender ?? "anonymous"
}! It's ${data.data.displayName}'s ${data.data.amount} month.`,
}! It's ${data.data.displayName ?? data.data.username}'s ${data.data.amount} month.`,
);
});

client.onTestGift((data) => {
nodecg.log.info(
`${data.event.displayName} just got a tier ${formatSubTier(data.event.tier)} subscription from ${
`${getName(data)} just got a tier ${formatSubTier(data.event.tier)} subscription from ${
data.event.sender ?? "anonymous"
}! It's ${data.event.displayName}'s ${data.event.amount} month.`,
);
});

client.onHost((data) => {
nodecg.log.info(`${data.data.displayName} just hosted the stream for ${data.data.amount} viewer(s).`);
nodecg.log.info(`${getName(data)} just hosted the stream for ${data.data.amount} viewer(s).`);
});

client.onTestHost((data) => {
nodecg.log.info(`${data.event.displayName} just hosted the stream for ${data.event.amount} viewer(s).`);
nodecg.log.info(`${getName(data)} just hosted the stream for ${data.event.amount} viewer(s).`);
});

client.onRaid((data) => {
nodecg.log.info(`${data.data.displayName} just raided the stream with ${data.data.amount} viewers.`);
nodecg.log.info(`${getName(data)} just raided the stream with ${data.data.amount} viewers.`);
});

client.onTestRaid((data) => {
nodecg.log.info(`${data.event.displayName} just raided the stream with ${data.event.amount} viewers.`);
nodecg.log.info(`${getName(data)} just raided the stream with ${data.event.amount} viewers.`);
});

client.onTip((data) => {
if (data.data.currency) {
nodecg.log.info(
`${data.data.username} just donated ${data.data.amount} ${data.data.currency}. Message. ${data.data.message}`,
`${getName(data)} just donated ${data.data.amount} ${data.data.currency}. Message. ${
data.data.message
}`,
);
}
});

client.onTestTip((data) => {
nodecg.log.info(
`${data.event.name} just donated ${data.event.amount} ${data.event.currency}. Message. ${data.event.message}`,
`${getName(data)} just donated ${data.event.amount} ${data.event.currency}. Message. ${
data.event.message
}`,
);
});

Expand All @@ -111,6 +110,27 @@ module.exports = function (nodecg: NodeCG.ServerAPI) {
streamElements?.onUnavailable(() => nodecg.log.info("SE client has been unset."));
};

/**
* Gets the name of the user from the event.
* Defaults to use the displayName that is sent by StreamElements.
* The displayName contains capitalization and special characters.
* If the displayName is not available, the normal username of the relevant platform is used.
* Supports real and test events.
*/
function getName(event: StreamElementsEvent | StreamElementsTestEvent): string {
const eventData = "data" in event ? event.data : event.event;

if ("displayName" in eventData && typeof eventData.displayName === "string") {
return eventData.displayName;
} else if ("name" in eventData && typeof eventData.name === "string") {
return eventData.name;
} else if ("username" in eventData && typeof eventData.username === "string") {
return eventData.username;
} else {
return "unknown";
}
}

function formatSubTier(tier: "1000" | "2000" | "3000" | "prime"): string {
if (tier === "prime") return "Twitch Prime";

Expand Down

0 comments on commit 408a1a1

Please sign in to comment.