48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import type { Badge, ParsedMessage } from "./types";
|
|
import { getBadgesFromMessage } from './badges'
|
|
|
|
|
|
export function parseMessage(messageData: string, allBadges: Badge[]): ParsedMessage {
|
|
const message = JSON.parse(messageData);
|
|
|
|
switch (message.type) {
|
|
case "PRIVMSG": {
|
|
const tags = message.tags
|
|
const username = message.username
|
|
const data: ParsedMessage = {
|
|
type: "PRIVMSG",
|
|
data: { message: message.message, username, tags },
|
|
};
|
|
|
|
const badges = getBadgesFromMessage(data, allBadges);
|
|
data.data.badges = badges
|
|
|
|
return data
|
|
}
|
|
case "USERNOTICE": {
|
|
const username = message.tags.login;
|
|
const resub = message.tags["msg-id"] === "resub";
|
|
const months = parseInt(message.tags["msg-param-cumulative-months"]);
|
|
return {
|
|
type: "USERNOTICE",
|
|
data: { username, resub, months },
|
|
};
|
|
}
|
|
case "CLEARMSG": {
|
|
return {
|
|
type: "CLEARMSG",
|
|
data: {
|
|
username: message.tags['@login'],
|
|
}
|
|
}
|
|
}
|
|
// Add more cases for other message types here
|
|
default: {
|
|
return {
|
|
type: "UNKNOWN",
|
|
data: { message },
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|