safetwitch/src/assets/messageParser.ts

62 lines
1.5 KiB
TypeScript
Raw Normal View History

2023-04-10 00:19:39 -04:00
import type { Badge, ParsedMessage } from './types'
2023-04-06 10:20:22 -04:00
import { getBadgesFromMessage } from './badges'
2023-07-19 20:26:43 -04:00
export function parseMessage(messageData: any, allBadges: Badge[]): ParsedMessage {
2023-04-10 00:19:39 -04:00
const message = JSON.parse(messageData)
2023-04-06 10:20:22 -04:00
2023-07-19 20:26:43 -04:00
if (message.type === undefined && message.cursor !== "") {
const data: ParsedMessage = {
type: 'PRIVMSG',
data: {
message: message.message,
username: message.messager.name,
badges: message.badges,
offset: message.offset,
color: message.messager.colorHex
}
}
return data
}
2023-04-10 00:19:39 -04:00
switch (message.type) {
case 'PRIVMSG': {
const data: ParsedMessage = {
type: 'PRIVMSG',
2023-07-19 20:26:43 -04:00
data: {
message: message.message,
username: message.username,
color: message.tags.color,
badges: getBadgesFromMessage(message.tags, allBadges)
}
2023-04-06 10:20:22 -04:00
}
2023-04-10 00:19:39 -04:00
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 }
2023-04-06 10:20:22 -04:00
}
2023-04-10 00:19:39 -04:00
}
case 'CLEARMSG': {
return {
type: 'CLEARMSG',
data: {
username: message.tags['@login']
2023-04-06 10:20:22 -04:00
}
}
2023-04-10 00:19:39 -04:00
}
// Add more cases for other message types here
default: {
return {
type: 'UNKNOWN',
data: { message }
2023-04-06 10:20:22 -04:00
}
}
}
2023-04-10 00:19:39 -04:00
}