{"version":3,"file":"userstate.mjs","names":[],"sources":["../../../src/message/twitch-types/userstate.ts"],"sourcesContent":["import type { TwitchBadgesList } from \"../badges\";\nimport type { Color } from \"../color\";\nimport type { IRCMessageData } from \"../irc/irc-message\";\nimport type { TwitchEmoteSets } from \"../parser/emote-sets\";\nimport { ChannelIRCMessage } from \"../irc/channel-irc-message\";\nimport { tagParserFor } from \"../parser/tag-values\";\n\n/**\n * State of the logged in user in a channel.\n */\nexport interface UserState {\n  badgeInfo: TwitchBadgesList;\n  badgeInfoRaw: string;\n  badges: TwitchBadgesList;\n  badgesRaw: string;\n  color: Color | undefined;\n  colorRaw: string;\n  displayName: string;\n  emoteSets: TwitchEmoteSets;\n  emoteSetsRaw: string;\n  isMod: boolean;\n  isModRaw: string;\n}\n\nexport class UserstateMessage extends ChannelIRCMessage implements UserState {\n  public readonly badgeInfo: TwitchBadgesList;\n  public readonly badgeInfoRaw: string;\n  public readonly badges: TwitchBadgesList;\n  public readonly badgesRaw: string;\n  public readonly color: Color | undefined;\n  public readonly colorRaw: string;\n  public readonly displayName: string;\n  public readonly emoteSets: TwitchEmoteSets;\n  public readonly emoteSetsRaw: string;\n  public readonly isMod: boolean;\n  public readonly isModRaw: string;\n\n  public constructor(message: IRCMessageData) {\n    super(message);\n\n    const tagParser = tagParserFor(this.ircTags);\n    this.badgeInfo = tagParser.requireBadges(\"badge-info\");\n    this.badgeInfoRaw = tagParser.requireString(\"badge-info\");\n\n    this.badges = tagParser.requireBadges(\"badges\");\n    this.badgesRaw = tagParser.requireString(\"badges\");\n\n    this.color = tagParser.getColor(\"color\");\n    this.colorRaw = tagParser.requireString(\"color\");\n\n    // trim: Twitch workaround for unsanitized data, see https://github.com/robotty/dank-twitch-irc/issues/33\n    this.displayName = tagParser.requireString(\"display-name\").trim();\n\n    this.emoteSets = tagParser.requireEmoteSets(\"emote-sets\");\n    this.emoteSetsRaw = tagParser.requireString(\"emote-sets\");\n\n    this.isMod = tagParser.requireBoolean(\"mod\");\n    this.isModRaw = tagParser.requireString(\"mod\");\n  }\n\n  public extractUserState(): UserState {\n    return {\n      badgeInfo: this.badgeInfo,\n      badgeInfoRaw: this.badgeInfoRaw,\n      badges: this.badges,\n      badgesRaw: this.badgesRaw,\n      color: this.color,\n      colorRaw: this.colorRaw,\n      displayName: this.displayName,\n      emoteSets: this.emoteSets,\n      emoteSetsRaw: this.emoteSetsRaw,\n      isMod: this.isMod,\n      isModRaw: this.isModRaw,\n    };\n  }\n}\n"],"mappings":";;;AAwBA,IAAa,mBAAb,cAAsC,kBAAuC;CAC3E;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA,YAAmB,SAAyB;AAC1C,QAAM,QAAQ;EAEd,MAAM,YAAY,aAAa,KAAK,QAAQ;AAC5C,OAAK,YAAY,UAAU,cAAc,aAAa;AACtD,OAAK,eAAe,UAAU,cAAc,aAAa;AAEzD,OAAK,SAAS,UAAU,cAAc,SAAS;AAC/C,OAAK,YAAY,UAAU,cAAc,SAAS;AAElD,OAAK,QAAQ,UAAU,SAAS,QAAQ;AACxC,OAAK,WAAW,UAAU,cAAc,QAAQ;AAGhD,OAAK,cAAc,UAAU,cAAc,eAAe,CAAC,MAAM;AAEjE,OAAK,YAAY,UAAU,iBAAiB,aAAa;AACzD,OAAK,eAAe,UAAU,cAAc,aAAa;AAEzD,OAAK,QAAQ,UAAU,eAAe,MAAM;AAC5C,OAAK,WAAW,UAAU,cAAc,MAAM;;CAGhD,mBAAqC;AACnC,SAAO;GACL,WAAW,KAAK;GAChB,cAAc,KAAK;GACnB,QAAQ,KAAK;GACb,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,UAAU,KAAK;GACf,aAAa,KAAK;GAClB,WAAW,KAAK;GAChB,cAAc,KAAK;GACnB,OAAO,KAAK;GACZ,UAAU,KAAK;GAChB"}