{"version":3,"file":"roomstate.mjs","names":[],"sources":["../../../src/message/twitch-types/roomstate.ts"],"sourcesContent":["import type { IRCMessageData } from \"../irc/irc-message\";\nimport { ChannelIRCMessage, type Channel } from \"../irc/channel-irc-message\";\nimport { tagParserFor } from \"../parser/tag-values\";\nimport { pickBy } from \"~/utils/pick-by\";\n\nexport interface RoomState {\n  emoteOnly: boolean;\n  emoteOnlyRaw: string;\n\n  /**\n   * followers-only duration in minutes\n   */\n  followersOnlyDuration: number;\n  followersOnlyDurationRaw: string;\n\n  r9k: boolean;\n  r9kRaw: string;\n\n  slowModeDuration: number;\n  slowModeDurationRaw: string;\n\n  subscribersOnly: boolean;\n  subscribersOnlyRaw: string;\n}\n\nexport function hasAllStateTags(\n  partialRoomState: Partial<RoomState>,\n): partialRoomState is RoomState {\n  return (\n    partialRoomState.emoteOnly != null &&\n    partialRoomState.followersOnlyDuration != null &&\n    partialRoomState.r9k != null &&\n    partialRoomState.slowModeDuration != null &&\n    partialRoomState.subscribersOnly != null\n  );\n}\n\nexport class RoomstateMessage extends ChannelIRCMessage {\n  private readonly _channelRoomId: string;\n\n  public readonly emoteOnly: boolean | undefined;\n  public readonly emoteOnlyRaw: string | undefined;\n\n  public readonly followersOnlyDuration: number | undefined;\n  public readonly followersOnlyDurationRaw: string | undefined;\n\n  public readonly r9k: boolean | undefined;\n  public readonly r9kRaw: string | undefined;\n\n  public readonly slowModeDuration: number | undefined;\n  public readonly slowModeDurationRaw: string | undefined;\n\n  public readonly subscribersOnly: boolean | undefined;\n  public readonly subscribersOnlyRaw: string | undefined;\n\n  public override get channel(): Channel & { readonly id: string } {\n    return {\n      login: this._channelLogin,\n      username: this._channelLogin,\n      id: this._channelRoomId,\n    };\n  }\n\n  // ---- Deprecated aliases ----\n\n  /** @deprecated Use {@link channel.id} instead. */\n  public get channelID(): string {\n    return this._channelRoomId;\n  }\n\n  public constructor(message: IRCMessageData) {\n    super(message);\n\n    const tagParser = tagParserFor(this.ircTags);\n    this._channelRoomId = tagParser.requireString(\"room-id\");\n\n    this.emoteOnly = tagParser.getBoolean(\"emote-only\");\n    this.emoteOnlyRaw = tagParser.getString(\"emote-only\");\n\n    this.followersOnlyDuration = tagParser.getInt(\"followers-only\");\n    this.followersOnlyDurationRaw = tagParser.getString(\"followers-only\");\n\n    this.r9k = tagParser.getBoolean(\"r9k\");\n    this.r9kRaw = tagParser.getString(\"r9k\");\n\n    this.slowModeDuration = tagParser.getInt(\"slow\");\n    this.slowModeDurationRaw = tagParser.getString(\"slow\");\n\n    this.subscribersOnly = tagParser.getBoolean(\"subs-only\");\n    this.subscribersOnlyRaw = tagParser.getString(\"subs-only\");\n  }\n\n  public extractRoomState(): Partial<RoomState> {\n    // this object has \"undefined\" mapped for missing properties,\n    // but we want to return an object where those keys are not\n    // even present.\n    const fullObject = {\n      emoteOnly: this.emoteOnly,\n      emoteOnlyRaw: this.emoteOnlyRaw,\n\n      followersOnlyDuration: this.followersOnlyDuration,\n      followersOnlyDurationRaw: this.followersOnlyDurationRaw,\n\n      r9k: this.r9k,\n      r9kRaw: this.r9kRaw,\n\n      slowModeDuration: this.slowModeDuration,\n      slowModeDurationRaw: this.slowModeDurationRaw,\n\n      subscribersOnly: this.subscribersOnly,\n      subscribersOnlyRaw: this.subscribersOnlyRaw,\n    };\n\n    return pickBy(fullObject, (v) => v != null);\n  }\n}\n"],"mappings":";;;;AAyBA,SAAgB,gBACd,kBAC+B;AAC/B,QACE,iBAAiB,aAAa,QAC9B,iBAAiB,yBAAyB,QAC1C,iBAAiB,OAAO,QACxB,iBAAiB,oBAAoB,QACrC,iBAAiB,mBAAmB;;AAIxC,IAAa,mBAAb,cAAsC,kBAAkB;CACtD;CAEA;CACA;CAEA;CACA;CAEA;CACA;CAEA;CACA;CAEA;CACA;CAEA,IAAoB,UAA6C;AAC/D,SAAO;GACL,OAAO,KAAK;GACZ,UAAU,KAAK;GACf,IAAI,KAAK;GACV;;;CAMH,IAAW,YAAoB;AAC7B,SAAO,KAAK;;CAGd,YAAmB,SAAyB;AAC1C,QAAM,QAAQ;EAEd,MAAM,YAAY,aAAa,KAAK,QAAQ;AAC5C,OAAK,iBAAiB,UAAU,cAAc,UAAU;AAExD,OAAK,YAAY,UAAU,WAAW,aAAa;AACnD,OAAK,eAAe,UAAU,UAAU,aAAa;AAErD,OAAK,wBAAwB,UAAU,OAAO,iBAAiB;AAC/D,OAAK,2BAA2B,UAAU,UAAU,iBAAiB;AAErE,OAAK,MAAM,UAAU,WAAW,MAAM;AACtC,OAAK,SAAS,UAAU,UAAU,MAAM;AAExC,OAAK,mBAAmB,UAAU,OAAO,OAAO;AAChD,OAAK,sBAAsB,UAAU,UAAU,OAAO;AAEtD,OAAK,kBAAkB,UAAU,WAAW,YAAY;AACxD,OAAK,qBAAqB,UAAU,UAAU,YAAY;;CAG5D,mBAA8C;AAqB5C,SAAO,OAjBY;GACjB,WAAW,KAAK;GAChB,cAAc,KAAK;GAEnB,uBAAuB,KAAK;GAC5B,0BAA0B,KAAK;GAE/B,KAAK,KAAK;GACV,QAAQ,KAAK;GAEb,kBAAkB,KAAK;GACvB,qBAAqB,KAAK;GAE1B,iBAAiB,KAAK;GACtB,oBAAoB,KAAK;GAC1B,GAE0B,MAAM,KAAK,KAAK"}