Skip to content

Viewers never individually marked offline — user:offline event not listened to #3455

@servusrene

Description

@servusrene

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

When a viewer leaves the chat, the ActiveUserHandler emits a user:offline event (triggered by the _onlineUsers NodeCache TTL expiring after 7.5 minutes of inactivity). However, no listener exists for this event, so setChatViewerOffline() is never called for individual viewers.

This means:

  • Viewers remain online: true in the ViewerDB indefinitely until a bulk setAllViewersOffline() call occurs (app restart, chat disconnect)
  • lastSeen keeps updating every minute for stuck-online viewers, showing today's date even if the viewer hasn't been present in days
  • minutesInChannel (View Time) continues to accrue (+15 minutes every 15 minutes) during every live stream for viewers who are no longer watching
  • The Viewer List in the UI shows ghost viewers that are not actually present

Expected Behavior

When a viewer's online TTL expires (7.5 minutes without chat activity or chatter poll presence), they should be individually marked offline in the ViewerDB. Their lastSeen and minutesInChannel should stop updating.

Steps To Reproduce

  1. Start Firebot and go live
  2. Have a viewer chat or appear in the chatter list
  3. Viewer leaves Twitch entirely
  4. Wait >8 minutes (past the 7.5min TTL)
  5. Observe in the Viewers tab: viewer still shows today's date as "Last Seen"
  6. Go live again on another day without restarting Firebot
  7. Observe: viewer's View Time has increased despite not being present

Version

All versions up to and including current master (b646e4d)

What operating system are you using Firebot on?

Linux Distro

Relevant log output

No error logs — the issue is silent. The `user:offline` event fires correctly in `ActiveUserHandler` but there is simply no listener registered for it in `ViewerOnlineStatusManager`.

Contact Details (Optional)

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions