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'
|
|
|
|
|
|
|
|
export function parseMessage(messageData: string, 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-04-10 00:19:39 -04:00
|
|
|
switch (message.type) {
|
|
|
|
case 'PRIVMSG': {
|
|
|
|
const tags = message.tags
|
|
|
|
const username = message.username
|
|
|
|
const data: ParsedMessage = {
|
|
|
|
type: 'PRIVMSG',
|
|
|
|
data: { message: message.message, username, tags }
|
2023-04-06 10:20:22 -04:00
|
|
|
}
|
2023-04-10 00:19:39 -04:00
|
|
|
|
|
|
|
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 }
|
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
|
|
|
}
|