22 KiB
fore.st - Pineapple Express(v1.1-indev)
fore.st is the server software for ourfore.st, a community based chat & synced video embedding site tailored to service the TTN community post-shutdown. The softwre is made freely available both for legal reasons but also as it seems as that is what is best for the community in the advant of another shutdown.
fore.st is a fork of cytube and as such supports all of the same media sources, and carries many of the same features. Modifcations to the software have been/are being made to make the platform a more familiar place for TTN users. Contributions are welcome.
Installation
There is currently no installation guide for the software, however since not much has changed in the backend, you should be fine with official cytube docs.
Contact
You can reach out by bugging rainbownapkin on the ttn discord or ourfore.st, you can also send an email to ourforest(at)420blaze.it
Shoutouts
- Thanks to Simon for making TTN,
- Thanks to our excellent mod team for chat moderation and content aggregation
- Thanks to etchingham for being a community contact while TTN's been winding down, I think all of us see you as a pillar of the community so your support means a lot.
- Thanks to calzoneman for making cytube, that saved our asses.
- Thanks to the core TTN community and everyone else who's ever used it, I was only there for the last handful of years but it was an absolute fuckin' ride. You guys are the best, it isn't TTN but I hope this at least help fills the gap.
Pineapple Express Indev Release Notes
This is the first indev release for fore.st 1.1 Pineapple Express. This is the last push before the codebase is merged upstream with the newest version of cytube. Should probably get that done sooner than later. Heres a check list of the planned/completed features in this revision:
dev goals for 1.1 pineapple express:
-
quick shit & bugfixes ✓
- change markdown filters to require three symbols on each side, quickest fix for filters ✓
- move refresh button to title bar ✓
- delete custom embed button, replace with button under generel "add video" button ✓
- move playlist item count and length next to buttons & compact ui ✓
- hide playlist frame and control from users who don't have permission to view playlist (no one can see the afterparty playlist except mods, why should they have the controls cluttering things up?) ✓
- add "mention" to userlist dropdown menu ✓
- add "toke with" to userlist dropdown menu for shits n gigs ✓
- unlatch sync on pause and scrub, show sync button on titlebar when sync is unlatched, this wont support classic yt at the moment. Invidious support planned ✓
- caption support for raw video (no saving captions in channel history just yet, this will be in the next update which will involve a rework/addition to the database) ✓
- fix bugged airdate after "queue next" ✓
- collapsing playlist items hides pref and airtime by default. Airdate on same line as title, airtime and pref below ✓
- collapse/expand all playlist item button ✓
- close playlist button ✓
- basic ui fixes/tweaks ✓
- disabled !toke link embedding on emote alt text ✓
- fix chatbar resizing on new message notification (might just by cytube+) ✓
- relicense to agpl ✓
- disable/remove unregistered channels ✓
- fix fucked up bottom border on chat/video ✓
- rename "legacy playlist buttons" to compact, fix location. This seems like it could be usable if not better than default ✓
- get res/aspect ratio player.js ✓
- base.coffee ✓
- videojs.coffee(hls,videojs,raw-file,gdrive,rtmp) ✓
- dailymotion ~(this is kinda broken, likely not possible client-side without breaking CORS policy. This can wait until next version when an installation script including nginx and cors-proxy config gets added to support the catbox.moe image upload button which faces the same issue.
- vimeo ✓
-
slide out panel (not an end user feature in and of itself, however a common UI element used for most menus, made to be quick and ezpz ✓
- function for opening, closing ✓
- allow switching menus on panel without having to open/close it ✓
- pretty slide out animation ✓
-
improved poll UI ✓
- poll panel auto-opens when poll starts ✓
- button slides in chatbar from left, slides back after poll done ✓
- on click toggles poll ui on left of chat menu ✓
- improved poll chat announcements ~Original announcement removed. May implement once server whisper implemented.
-
improved emote ui ✓
- slide out emote ui ✓
- search bar ✓
- optional alphabet sort(default) ✓
- optional legacy emote menu available ✓
-
cytube+ ripout ✓
- scroll to current item button ✓
- orientation buttons in title bar ✓
- quick settings(icon next to emote button) ✓
- general pref
- theme ✓
- playback pref ✓
- video orientation ✓
- toggle orientation buttons ✓
- sync threshold (in seconds) ✓
- youtube source (add after degoogling) ~
- chat pref ✓
- use legacy cytube emote menu ✓
- blink title on chat ✓
- chat notification sound ✓
- chat desktop notification ✓
- show timestamps ✓
- show seconds ✓
- general pref
-
trim/tidy default cytube command ✓
- replace / with ! as defualt server-side command indicator to match tokebot and TTN commands. / will be used for future client-side commands ✓
- me ✓
- sp ✓
- afk ✓
- poll ✓
- hpoll ✓
- mute ✓
- smute ✓
- unmute ✓
- kick ✓
- ban ✓
- ipban ✓
- clear ✓
- clean ✓
- cleantitle ✓
- remove/consolidate/add to commands ✓
- say -> announce(change tokebot modflair CSS to announce CSS, make normal modflair for bot/admin rank) ✓
- modflair on announce ✓
- remove kickanons ✓
- remove d (drink) ✓
- add user specific function to clear ('!clear ' to clear chats by said user) ✓
-
Merge Upstream to newest cytube commit ✓
-
improved server-whisper system ✓
- public leave/join messages ✓
- server-whisper target parameter for user specific whispers ✓
- server-whisper name ✓
-
flex layout/legacy layout ripout ✓
- rip out legacy layout system ✓
- chat/player sized to fit canvas with navbar (remove -+ buttons on player) ✓
- theatre mode toggle icon on title bar (hides navbar, player/chat takes up entire screen) ✓
- click to drag chat/player split ✓
- lock videowrap width to aspect ratio ✓
- lock on join ✓
- unlock on split drag ✓
- show lock button on unlock ✓
- hide lock button when locked ✓
- checklock/move split on window move ✓
- checklock/move split on video load ✓
- videojs.coffee(hls,videojs,raw-file,gdrive,rtmp) ✓
- dailymotion ✓
- vimeo ✓
- shade player ✓
- player controls in title bar when video shaded (play/pause, mute, current time/video duration), hidden when video open ✓
- minicont update in videojs ✓
- minicont update in dailymotion ✓
- minicont update in vimeo ✓
- player controls in title bar when video shaded (play/pause, mute, current time/video duration), hidden when video open ✓
- shade chat (hide chat box, message box, send button. chat header bar collapses, retains user count and expansion arrows. Userlist/poll open/close is independent.) ✓
- scroll over mincont dir to scrub vid ✓
- scroll over minicont mutebtn to change vol ✓
- remove legacy cytube themes. If they wheren't compatible after the emote panel, they certainly won't be now lmao ✓
- fix bugs created by flex layout ✓
- fix fpanel width ✓
- fix portrait/mobile mode ✓
- fix user tooltip menu position ✓
-
decaffeinate player.js ✓
- Coffee script was a bad idea then, and it makes even less sense now. ✓
- fuck me its just javascript with worse syntax, no real debugging tools, and build times ✓
- literally fucking why though?(I guess it made sense before ES6 but still fuck me) ✓
-
degoogling ✓
- invidious api or yt-dlp backend for serverside metadata acquisition of youtube videos w/o registered API key or google account
- pull metadata for single video ✓
- pull metadata for playlist ✓
- search function ✓
- potentially leverage yt-dlp backend for other media sources X went with invidious. YT-DLP may make more sense for a total re-write in the future
- implement player.js updates into youtube.coffee
- latching ✓
- getres X Probably not possible without breaking cors policy. (same as DM)
- handleVideoSize on load ✓
- update minicont dur ~ updates with server tick, doesnt look as good as other sources, but YT embeds suck.
- update minicont buttons ✓
- invidious embed support for youtube video playback X not possible with current setup. Reqs either update to invidious allowing embed control, or a cors proxy(will look into this next update, or whenever installation script is created)
- invidious embed alternative: pull raw video link on vid start server side, serve to client ✓
- youtube source in user prefrences (raw link or official yt embed for now) ✓
- invidious api or yt-dlp backend for serverside metadata acquisition of youtube videos w/o registered API key or google account
-
mod/admin panel
- button on chatbar ✓
- auto switch to admin panel ✓
- main panel
- poll creation ✓
- tools
- !announce button/field ✓
- !clear button w/ username dropdown ✓
- mod message (sends message to all active mods) ✓
- preferences ✓
- modflair ✓
- show modflair on chat header ✓
- show shadowmuted messages ✓
- show ips in tooltips ✓
- open playlist below video by default ✓
- nested menu
- new nested menu protoype object ✓
- playlist menu (just the playlist but in fpanel, currently one or the other) ✓
- move playlist between legacy area and fpanel on open/close ✓
- bugfixes ✓
- lock/unlock panel dissapears playlist (suicide by two shots to the back of the head) ✓
- fix scroll to item ✓
- fix scrolling while dragging pl item ✓
- autobump control menu
- tokebot control menu ✓
- mod ✓
- reset cooldown button ✓
- admin ✓
- reload tokes btn ✓
- mod ✓
- tokewhisper filed+btn ✓
- tokesay field+btn ✓
- tokeannounce field+btn ✓
-
merge tokebot into ourfore.st codebase, one server instead of two. ✓
- port chozobot code to cytube module ✓
- tokewhisper (server whisper, can optionally be displayed as PM client side) ✓
- load toke commands from tokes file ✓
- profile and userlist entry ✓
- disable certain options in profile context menu ✓
- mod commands ✓
- reset cooldown command (quiet and loud, quiet by default) ✓
- siteowner commands ✓
- reload tokes command ✓
- tokesay command ✓
- tokeannounce command ✓
- tokewhisper command ✓
- !r to rando-toke ✓
- log tokes w/ date to file. This will be consolidated to a better toke history in mariadb in a future update ✓
- append [tokers],# of tokers,timestamp(epoch) on toke. ✓
- tokefile, list of usernames with toke count. This should eventually be moved to a property of account or user ✓
- json of map ["username", # of tokes] ✓
- load file on startup ✓
- update file every toke ✓
- total tokes listed on profile tooltip ✓
- send toke count with user and set toke count ✓
- display on tooltip ✓
- add toke to profile client side on toke(avoid sending information twice, write after tokes in tooltip) ✓
- include modflair on tokewhisper ✓
- reset toke cooldown every hour at *:19:30 for 4:20 !tokes ✓
- extend toke until *:20:00 if it ends after *:19:30 but before *:20:00 ✓
-
autobump ✓
- Serverside ✓
- Bump Management System ✓
- bump object: name, user(person who made bump, optional), lowername, resettoke bool, id, listname, media item ✓
- bumplist object: name, lowername, bump array ✓
- addBump function for adding bumps to list ✓
- deleteBump function for removing bumps from list ✓
- saveList function for saving list to file ✓
- pack/send lists to mods on start and request ✓
- test callback(dumps bumplist to dev console) ✓
- loadList for re-creating object from file ✓
- loadLists for re-creating objects based on all files in bumps/ folder ✓
- double check perms(look into using rank enums instead of numbers) ✓
- newBump ✓
- deleteBump ✓
- newBumpList ✓
- sendLists ✓
- remove whitespace and non - or _ specials from lowernames ✓
- bump ✓
- bumplist ✓
- Automated Bump Queueing ✓
- base queueing function ✓
- queue bump next ✓
- call from socket ✓
- Active lists ✓
- map of active lists ✓
- add/remove from active lists callback ✓
- list selection method ✓
- smashList ✓
- randomList ✓
- bump selection method: random from last-half, round-robin, full random ✓
- round-robin ✓
- full random ✓
- last-half random ✓
- Set bump/list sel method from packet ✓
-Auto Queue Bump(s) ✓
- agro: passive ✓
- all auto-bumping features disabled ✓
- agro: min ✓
- Auto-clear old/skipped bumps ✓
- after non-bump vid starts if next item is not bump ✓
- if there is nothing queued before/after current item (bump or not) ✓
- agro: mid ✓
- when non-bump vid is added and there are bumps queued next, move new item after the bump block ✓
- notify modules on video add ✓
- when non-bump vid is added and there are bumps queued next, move new item after the bump block ✓
- agro: max ✓
- when a non-bump vid is moved before or inbetween next bump block, move it after the bump block ✓
- notify modules on video move ✓
- when a non-bump vid is moved before or inbetween next bump block, move it after the bump block ✓
- set agro from packet ✓
- dedicated method for automated queueing based on current settings ✓
- agro: passive ✓
- bump frequency (default: 1,3) ✓
- base setting ✓
- set from packet ✓
- minimum length to bump (default: 240 sec) ✓
- base setting ✓
- set from packet ✓
- per-channel config files in bumps/config/.conf, loaded on channel startup for persistent settings(move to db by next major update) ✓
- json object with following values ✓
- active lists ✓
- agro level ✓
- bump frequency ✓
- bump selmed ✓
- list selmed ✓
- min length to bump ✓
- json object with following values ✓
- Add manual only property to bump object(default false). ✓
- add boolean to obj ✓
- add to handleAddBump & its type ✓
- add to packlist ✓
- base queueing function ✓
- do not autoQueue bumps with manualOnly set to true ✓
- round-robin ✓
- full random ✓
- last-half random ✓
- Change packList to send history as array of arrays (lname,id],[lname,id) ✓
- double check perms(all actions should be at least mod+ only) ✓
- reset tokebot when tokebump is played ✓
- Additions/Changes for Clientside ✓
- send list function ✓
- send deleted list name function ✓
- send hist function ✓
- send config function ✓
- send list to all mods on list save ✓
- send deleted list names to all mods on list deletion ✓
- send config to all mods on config save ✓
- send history to all mods when item added to history ✓
- Save list filename as lowername ✓
- Only load lists with filenames that end in .bump ✓
- renameBump socket binding ✓
- changeCreator socket binding ✓
- renameList socket binding ✓
- Bump Management System ✓
- Store config/lists on sendBumplists callback ✓
- Serverside ✓
-
Clientside ✓
- Update Auto-Bump panel on data receive callback (when open) ✓
- sendBumplists ✓
- sendBumplist ✓
- remove list upon deletion ✓
- sendBumpHist ✓
- sendBumpConf ✓
- decorate bumps in playlist with translucent-green diagnal "BUMP" watermark (similiar to temporary lines) ✓
- General Config ✓
- Agro Level ✓
- Bump Frequency ✓
- Minimum Duration ✓
- Bump Selection Method ✓
- List Selection Method ✓
- Bump/List Management ✓
- Add Bump ✓
- Add List ✓
- Lists ✓
- Create function to display/edit bumps inside of array ✓
- bump title ✓
- rename ✓
- media title ✓
- manual only ✓
- toggle ✓
- rtoke ✓
- toggle ✓
- duration ✓
- user ✓
- rename ✓
- CSS ✓
- Show Bump Controls Boolean ✓
- Queue Next ✓
- Delete Bump ✓
- bump title ✓
- Create function to display array of bumplists ✓
- Toggle Active ✓
- Move Add Bump ✓
- Delete Bumplist ✓
- Rename Bumplist ✓
- Display Bumplist ✓
- CSS ✓
- Active Lists (expanded) ✓
- All Lists (collapsed) ✓
- Play History (collapsed) ✓
- Create function to display/edit bumps inside of array ✓
- Update Auto-Bump panel on data receive callback (when open) ✓
-
finishing touches
- Critical Bug Fixes
- video sometimes unlatches if sync delayed on video start.(Fix pre-latch, if not duration check until sync is past 2s?)
- userlist profile & current connected users tooltips are currently broken ✓
- chat does not fill screen in portrait mode (video height being subtracted while video collapsed)
- make serverside commands case insensitive(May have been intentional with cytube, don't give a shit, it's a bug.)
- serverside commands trigger other commands with same letters (!announce triggers !a. may only be an issue with single letter commands, double check this though.)
- fix playlist errors in fpanel
- Unescaped characters when preforming youtube search
- check/fix: make sure we use internal flags instead of matching strings for function calls from tokebot/autobump to playlist/chat
- tokebot
- autobump
- Minor Bug Fixes
- hide "close playlist" button when playlist is in fpanel
- fix fpanel not resizing on video expand/collapse
- fix playlist resizing (both window resize, and video collapse/expand) in fpanel
- Execute serverside commands with whitespace before them while also sending them as normal chat to comform to tokebot behavior in (v1)Panama Red
- disable pm send to tokebot
- dont open playlist if legacy playlist disabled(on perm change)
- add item to end of block when queueing round robin
- remove tokebot from !clear dropdown in mod panel
- don't collapse expanded bumplists when reloading bump panel
- getBumplists when values are undefined at bump panel launch (should only happen on server startup anywho)
- Optimization/Refactor
- Change join/leave message prefix/postfix to single string with replacable user token instead of two vars
- Keep start time as proprety of media object while in playlist instead of in an array in metadata.
- Check and Sanatize input for Tokebot commands
- Check and Sanatize input from autobump panel
- Cytube Feature Changes
- save temporary vids to channel library
- enable/disable scroll on video change(if possible)
- Extras
- call scrollTo() on fpplaylist open
- call scrollTo() on move/queue next
- enable/disable either from mod prefs/qs (both enabled by default)
- getplaylistlinks outputs in fpanel
- display links
- pop mod nmenu
- accept invidious links as youtube links
- start public channels on server start(this makes more sense for fore.st than cytube since we're focused on a handful of site-run channels instead of user-created ones...)
- keep user on same page after failed login
- css variables in theme for ez customizablity
- Preformance test on older machines (not everyone has a high end machine)
- import data from old tokelog
- merge fore.st theme changes to fore.st dusk, consider moving some of them over to cytube.css for easier management
- Critical Bug Fixes
-
extra shit(probs wait til next update, or hotfix)
- check fi urls for "expire/expires/expiring"
- mark media object as expiring
- do not save
- set raw file color back to normal
- add icon to expiring items
- shared tokes across channels
- short chats (acronyms, emoji, single letters/numbers/symbols) pop in over video from left starting at top left, overflow pops in below, instead of in chat box. Chats slide back up into top of vid after 2s. (optional, default on)
- pop out btn
- toggle 4:20 assist from mod panel/chat command
- close nested menu when parent button is thrown in panelbtn
- close fpanel when messagebuffer or userlist is clicked
- enable/disable in userprefs (default enabled)
- basic profile page (in side panel)
- improved mod chat (dedicated pop out to access mod channel chat from any channel)
- user themes
- movie night theme
- tree house theme
- the network theme
- change background to other themes background or img from url(theme background by default)
- click and drag to resize fpanel
- native odysee support (no raw embed) (might save for 1.2)
- fix touch & drag to resize chat/video split on mobile/touch devices
- add player.js updates to twitch/embed/soundcloud
- latching
- getres
- update minicont dur
- update minicont buttons
- treez.one Now Playing in MOTD (these will need coordination with treez.one)
- treez.one tokebot syncronization (ESPECIALLY this one)
- check fi urls for "expire/expires/expiring"
License
Original fore.st code is provided under the Affero General Public License v3 in order to prevent fore.st being used in proprietary software. (see the LICENSE file for the full text.)
Cytube source code originally licensed under MIT license (see the LICENSE file for the full text.)
Bundled source code, such as third-party CSS and JavaScript libraries, are provided under their respective licenses.