Commit Graph

52 Commits (master)

Author SHA1 Message Date
Noah 9c77bdb62e New Op commands and fixes with blocking admin users
Add moderation rules:

* You can apply rules in the settings.toml to enforce moderator restrictions on
  certain users, e.g. to force their camera to always be NSFW or bar them from
  sharing their webcam at all anymore.

Chat UI improvements around users blocking admin accounts:

* When a main website block is in place, the DMs button in the Who List shows
  as greyed out with a cross through, as if that user had closed their DMs.
* Admin users are always able to watch the camera of people who have blocked
  them. The broadcaster is not notified about the watch.

New operator commands:

* /cut username: to tell a user to turn off their webcam.
* /unmute-all: to lift all mutes on your side, e.g. so your moderator chatbot
  can still see public messages from users who have blocked it.
* /help-advanced: moved the more dangerous admin command documentation here.

Miscellaneous fixes:

* The admin commands now tolerate an @ prefix in front of usernames.
* The /nsfw command won't fire unless the user's camera is actually active and
  not marked as explicit.
2024-05-17 17:15:48 -07:00
Noah 747f4fd5d4 Let channels configure whether to permit photos 2024-05-13 18:51:54 -07:00
Noah 96d61614f4 Add DisconnectNow API endpoint 2024-03-15 15:59:42 -07:00
Noah 0e0aac991d Polling API for the chat room 2023-12-10 18:43:18 -08:00
Noah deb3bb616b Fix webcam freezing issues with mutualOpen video connections 2023-11-18 15:38:02 -08:00
Noah 1e702b0e1e Add channel logging feature 2023-11-11 14:59:49 -08:00
Noah 2ac3e8e128 Fix graceful disconnect commands from the server 2023-10-23 19:05:02 -07:00
Noah 7373882abf Profile Modals + Misc Features
* Add profile modal popups and Webhook support to get more detailed user
  info from your website.
* Add "unboot" command, available in the profile modal.
2023-10-07 13:22:41 -07:00
Noah 15b291826e Make WebSocketSendTimeout configurable 2023-09-30 12:46:45 -07:00
Noah a1b0d2e965 Blocklist improvements + WebSocket timeout tweak 2023-09-30 12:32:09 -07:00
Noah 4b971fcf41 Server side filtering 2023-09-29 19:10:34 -07:00
Noah d01bae9966 Bugfix on booted cams 2023-09-12 20:03:10 -07:00
Noah d8c92800f3 Fixes for admins, VIP and blocking + Frontend tweaks
Changes to the chat server:
* Blocking will not apply to admin user accounts (operators)
* Users who block an admin will instead mute them, but the admin can
  still DM them if required
* Messages to VIP channels are broadcast to admins even if they are not
  VIPs, e.g. so moderator chatbots can see
* On the Who List: VIP-only cameras to highlight with the VIP background
  color on those buttons
2023-09-07 19:43:03 -07:00
Noah a7342988ba Null exception fix 2023-09-05 14:09:07 -07:00
Noah 7ffa6b4dbd More thorough blocking behavior 2023-09-05 13:57:11 -07:00
Noah 940f14e2d6 VIP-only chat channels 2023-09-03 12:48:21 -07:00
Noah 6e2aa517f5 Support for VIP users via JWT Auth 2023-09-03 12:08:23 -07:00
Noah fd82a463f3 Deadlock detection, DND, and Frontend Fixes
* Deadlock detection: the chatbot handlers will spin off a background goroutine
  to ping DMs at itself and test for responsiveness. If the echoes don't return
  for a minute, issue a /api/shutdown command to the HTTP server to force a
  reboot.
* New admin API endpoint: /api/shutdown, equivalent to the operator '/shutdown'
  command sent in chat. Requires your AdminAPIKey to call it. Used by the chatbot
  as part of deadlock detection.
* Adjust some uses of mutexes to hopefully mitigate deadlocks a bit.
* Do Not Disturb: if users opt to "Ignore unsolicited DMs" they will set a DND
  status on the server which will grey-out their DM icon for other chatters.
* Bring back an option for ChatServer to notify you when somebody begins watching
  your camera (on by default).
* Automatically focus the message entry box when changing channels.
* Lower webcam resolution hints to 480p to test performance implications.
2023-08-29 15:54:40 -07:00
Noah 9c05af2c2e BareBot Chatbot Client 2023-08-13 19:21:27 -07:00
Noah 05eb852bb9 Webhooks and Report Users
* Added support for Webhooks and you can configure a Report Message hook
  to let users report messages on chat.
* Add /reconfigure command to dynamically reload the server
  settings.toml
* TODO: documentation for the webhooks.
2023-08-12 21:35:41 -07:00
Noah a6866bd129 Order the Who List by Logged-in Time 2023-08-06 21:06:27 -07:00
Noah 52b1271591 Emojis and gender flags for users 2023-08-05 19:38:04 -07:00
Noah e0dcc33519 Better admin moderator controls over webcams 2023-08-04 19:24:42 -07:00
Noah 029f25029d Cached Blocklist from your website
* New API endpoint: /api/blocklist where your site can pre-deliver muted
  username lists for users before they enter the chat.
* Image sharing in DMs is allowed if either party is an operator.
2023-07-30 10:32:08 -07:00
Noah 84da298c12 Don't lock the subscriber list longer than necessary 2023-07-29 17:54:49 -07:00
Noah 75c7511410 Kick off conflicting usernames + Frontend mobile fixes
* When JWT tokens are used to join the chat and the username conflicts:
  instead of renaming the new user to add a "2" it will disconnect the
  original login (sending a message that they have signed in somewhere
  else and are logged out now)
* When disconnected the text entry box will be greyed out.
* Improvements for the mobile user experience: if you're viewing the
  chat history panel and have unread messages or DMs, a number indicator
  appears on the channels button. It is grey for public channel messages
  or red if any of them are DMs
* Fix the emoji picker drop-down on the first messages of a DM thread
2023-07-17 20:38:07 -07:00
Noah 5f4b14ecc4 Emoji reactions 2023-06-30 20:00:21 -07:00
Noah 2445d45d3f Video Status Bitflags + Improvements
* Consolidate all the Video flags (active, nsfw, mutual, mutualOpen)
  into a bitmask flag (single integer)
* New video flag for when the source has muted their video, to show a
  crossed out grey mic on their camera for other chatters
* Bugfixes around syncing the mute state for self and other videos when
  videos are opened, closed and opened again
* Profile pictures on the DMs list
2023-06-30 18:42:40 -07:00
Noah 0f270a0390 Bugfix with MessageIDs in DM threads 2023-06-24 13:47:20 -07:00
Noah b19a4821e4 Message Takebacks 2023-06-24 13:08:15 -07:00
Noah fb11295168 Re-sign JWT tokens for safer server deployments 2023-04-19 19:55:39 -07:00
Noah 219413ae6d Display names and WIP multiple camera support 2023-04-18 22:18:12 -07:00
Noah 2c2d140e57 Skip non-auth users from Who List 2023-04-01 23:44:15 -07:00
Noah 063b3c2f04 Bugfix when recipient has camera tagged nsfw by the operator 2023-04-01 22:02:53 -07:00
Noah 4a2fc9c923 Sort the WhoList + Mutual Video options
* The who list now sorts alphabetically instead of random
* New user controls when they share video:
  * Require users to also be sharing before they open ours
  * We auto-open a viewer's video when they open ours
2023-03-31 19:46:42 -07:00
Noah 3f6e2193c8 Disable WebSocket compression 2023-03-31 12:40:55 -07:00
Noah 4466bb0ef5 Revert "Disable WebSocket compression and see if it helps with Safari"
This reverts commit f3354f2f1c.
2023-03-31 12:40:15 -07:00
Noah f3354f2f1c Disable WebSocket compression and see if it helps with Safari 2023-03-31 12:36:49 -07:00
Noah e69449124e Chat status updates 2023-03-28 18:09:13 -07:00
Noah 3560e63096 User status and idle detection 2023-03-27 21:13:04 -07:00
Noah c5c8d08c7a Boot and Mute
* Users can now boot viewers off their camera. From the viewer's POV the
  booter has just turned off their camera and it will remain "off" for
  the remainder of the booter's session.
* Users can now mute one another: if you mute a user, you will no longer
  see that user's messages or DMs; and the muted user will never see
  your video as being active (like a boot but revokable if you unmute
  later).
2023-03-22 20:21:04 -07:00
Noah d819a1181d Photo sharing support 2023-03-21 21:29:24 -07:00
Noah 15ebc42bd3 NSFW Cameras and Moderator Commands 2023-02-10 22:46:39 -08:00
Noah a55b4b2b49 A bit more logging to debug WebSocket issues 2023-02-08 20:01:06 -08:00
Noah 9487595e04 Timestamps, Sound Effects & Love 2023-02-06 13:27:29 -08:00
Noah d8de60c990 Volume Controls, Mute/Unmute Video
* Added a top panel to put your video controls in.
* Broadcaster can mute or unmute their own audio input.
* When viewing others' cams, buttons appear to control their video:
  * Their username is displayed in the corner.
  * Mute/unmute button to silence their audio.
  * "X" button to close their camera.
* Button to show what viewers are currently watching your camera.
* Add an "About" page and config for app branding.
* Add dark theme CSS for prefers-dark browsers.
2023-02-05 20:26:00 -08:00
Noah 1ecff195ac JWT Token-based Authentication
* Add support for JWT tokens to authenticate users from your external app.
* JWT backed users can have profile pictures, profile URLs, and operator
  status (admin). Note that no operator features exist yet.
* Add WelcomeMessages to settings.toml for default ChatServer messages to
  write to each public channel directed at a new user logging in.
* Markdown support for chat messages!
2023-02-05 17:42:09 -08:00
Noah 8f60bdba0e Spit and polish
* Add configuration system and default public channels support
* Add support for multiple channels and DM threads with users,
  with unread badge indicators. DMs rearrange themselves by
  most recently updated on top.
* Responsive CSS to work well on mobile devices.
2023-02-05 00:53:50 -08:00
Noah 3f756c5318 Camera connectivity established!
* Two users can activate their cameras locally and then connect them together
  with WebRTC with video and audio support working!
* Limitation: users need to be broadcasting video themselves before they can
  connect to someone's camera. If the offerer doesn't add tracks of their own,
  the SDP offer doesn't request video channels; so even though the answerer
  adds their tracks to the connection, they aren't used by the offerer.
* As currently implemented, the offerer's camera feed will also appear on
  screen for the answerer - every video connection opens the feed both ways.

Compared to the previous commit (where clients shared SDP messages but not
ICE candidates or anything further) the fixes and learnings were:

* The back-end was trying to relay candidate messages, but there was a JSON
  marshalling error (json object casted into a string) - changed the Message
  type to map[string]interface{} and both sides could exchange ICE candidates.
* Both sides needed to add their video tracks to the connection so that there
  was anything of value to be sent over the WebRTC channel.

Other changes:

* Server will send a ping message every minute to connected WebSockets.
2023-02-04 21:00:01 -08:00
Noah 5dbe938780 Initial WebRTC Code
* WebRTC pees exchange local/remote descriptions ("offer" and "answer")
* They don't seem to exchange ICE candidates yet
* Some back and forth happens but the final WebRTC stream connection
  isn't established yet.
2023-01-26 22:54:02 -08:00