added type checking to chatwidget event sending, moved some minor stuff around

This commit is contained in:
2025-07-09 17:04:50 +02:00
parent 3e025a586a
commit 2e57ab38ca
5 changed files with 35 additions and 14 deletions

View File

@@ -1,5 +1,6 @@
import { chatterApi, streamerId } from "..";
import logger from "../lib/logger";
import type { twitchEventData } from "./websockettypes";
import chatWidget from "./www/index.html";
type badgeObject = {
@@ -11,7 +12,7 @@ type badgeObject = {
const port = Number(process.env.CHATWIDGET_PORT);
if (isNaN(port)) { logger.enverr("CHATWIDGET_PORT"); process.exit(1); };
export default Bun.serve({
const server = Bun.serve({
port,
fetch(request, server) {
if (server.upgrade(request)) return;
@@ -60,6 +61,10 @@ export default Bun.serve({
development: true
});
export async function sendTwitchEvent(event: twitchEventData) {
server.publish('twitch', JSON.stringify(event));
};
import { HelixChatBadgeSet } from "@twurple/api";
function parseRawBadges(returnobj: badgeObject, data: HelixChatBadgeSet[]) {

View File

@@ -1,8 +1,8 @@
import { EventSubChannelChatMessageEvent, EventSubChannelChatMessageDeleteEvent } from "@twurple/eventsub-base";
import chatwserver from ".";
import { sendTwitchEvent } from ".";
export async function addMessageToChatWidget(msg: EventSubChannelChatMessageEvent) {
chatwserver.publish('twitch', JSON.stringify({
sendTwitchEvent({
function: 'createMessage',
messageParts: msg.messageParts,
displayName: msg.chatterDisplayName,
@@ -10,12 +10,12 @@ export async function addMessageToChatWidget(msg: EventSubChannelChatMessageEven
chatterColor: msg.color,
messageId: msg.messageId,
badgeData: msg.badges
}));
});
};
export async function deleteMessageFromChatWidget(msg: EventSubChannelChatMessageDeleteEvent) {
chatwserver.publish('twitch', JSON.stringify({
sendTwitchEvent({
function: 'deleteMessage',
messageId: msg.messageId
}));
})
};

View File

@@ -1,8 +1,25 @@
export type createMessageEvent = { function: 'createMessage', messageParts: EventSubChatMessagePart[], messageId: string, displayName: string, chatterId: string, chatterColor: null | string, badgeData: string[] };
export type deleteMessageEvent = { function: 'deleteMessage', messageId: string };
export type serverNotificationEvent = { function: 'serverNotification', message: string };
export type createMessageEvent = {
function: 'createMessage';
messageParts: EventSubChatMessagePart[];
messageId: string;
displayName: string;
chatterId: string;
chatterColor: null | string;
badgeData: Record<string, string>;
};
export type eventData = createMessageEvent | deleteMessageEvent | serverNotificationEvent;
export type deleteMessageEvent = {
function: 'deleteMessage';
messageId: string;
};
export type serverNotificationEvent = {
function: 'serverNotification';
message: string;
};
export type twitchEventData = createMessageEvent |
deleteMessageEvent |
serverNotificationEvent;
// The types below are taken straight from @twurple/eventsub-base
// I would import this from the package, but that's impossible

View File

@@ -1,5 +1,3 @@
import './style.css';
const badges = await fetch(`http://${location.host}/getBadges`).then(data => data.json());
import { type createMessageEvent } from '../../websockettypes';

View File

@@ -1,5 +1,6 @@
import { type eventData } from "../../websockettypes";
import './style.css';
import { type twitchEventData } from "../../websockettypes";
import { parseMessage } from './createMessage';
const socket = new WebSocket(`ws://${location.host}`);
@@ -12,7 +13,7 @@ socket.onopen = () => {
};
socket.onmessage = event => {
const data: eventData = JSON.parse(event.data);
const data: twitchEventData = JSON.parse(event.data);
switch (data.function) {
case 'createMessage':
const newMessageElement = parseMessage(data);