safetwitch/src/assets/messageParser.ts

99 lines
2.3 KiB
TypeScript
Raw Normal View History

2023-04-10 00:19:39 -04:00
import type { Badge, ParsedMessage } from './types'
import { getBadges, getBadgesFromMessage } from './badges'
import type { StreamMessage } from '@/types'
2023-04-06 10:20:22 -04:00
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-20 13:57:01 -04:00
if (message.type === undefined && message.cursor !== '') {
2023-07-19 20:26:43 -04:00
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-20 13:57:01 -04:00
data: {
message: message.message,
username: message.username,
2023-07-19 20:26:43 -04:00
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
}
case 'CLEARCHAT': {
let duration = message.tags['@ban-duration']
if (!message.tags['@ban-duration']) {
duration = 0
}
return {
type: 'CLEARCHAT',
data: {
2023-08-18 13:39:26 -04:00
username: message.message.replace(/(\r\n|\n|\r)/gm, ''),
duration
}
}
}
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
}
export function parseChatHistory(messages: StreamMessage[], badges: Badge[]) {
2023-08-18 13:39:26 -04:00
const parsedMessages = []
for (let i = 0; i < messages.length; i++) {
const message = messages[i]
2023-08-18 13:39:26 -04:00
const data: ParsedMessage = {
type: 'PRIVMSG',
data: {
message: message.message,
username: message.username,
color: message.color,
badges: getBadges(badges, message.badges)
}
}
parsedMessages.push(data)
}
return parsedMessages
}