Slack Status Auto-Scheduler
Free to download on every platform. Comes pre-installed on BotFone, BotPad and BotFlip — with extra free apps included.
About this app
WHAT IT DOES
This script automatically updates your Slack status based on a schedule you define. Instead of manually changing your status throughout the day, you can create multiple scheduled statuses—for example, ":wave: Working" from 9:00 AM to 5:00 PM, ":lunch: Lunch" from 12:00 PM to 1:00 PM, and ":zzz: Offline" from 5:00 PM to 9:00 AM. The script runs in the background, checking every minute whether the active status should change, and automatically updates your Slack status when a new schedule starts. The panel shows your current status and the next scheduled status, so you always know what's coming next. You can add, edit, delete, or reorder schedules at any time.
WHERE IT RUNS
The script runs on all Slack pages (*.slack.com). It works on the desktop web version and the mobile web version of Slack.
HOW TO USE
After installation, the settings panel appears on the left side of the screen with the gear emoji (⚙️). Open the panel to configure the script:
- The "Enable auto-scheduler" toggle enables or disables the automatic status updates.
- The "Current Status" section shows your active status and the next scheduled change.
- The "Schedules" section lists all your scheduled statuses. Click the ✎ button to edit a schedule, or the ✕ button to delete it.
- To add a new schedule, enter the emoji, status text, start time, and end time, then click "+ Add Schedule."
The scheduler runs automatically when enabled. Your status will be updated at the scheduled times.
TECHNICAL SECTION — REAL MECHANISM
The script detects Slack pages by checking the URL for slack.com. It stores schedules as an array of objects with start, end, emoji, and text properties via GM_setValue. The scheduler checks every minute using setInterval, comparing the current time (in minutes since midnight) against each schedule's start and end times. The isTimeBetween function handles schedules that cross midnight (e.g., 17:00 - 09:00). When an active schedule is found, the script attempts to update the Slack status by finding the status button (using selectors like [aria-label*="Set status"], .p-channel_sidebar__status, and [data-qa="status"]), clicking it to open the status modal, filling in the emoji and text fields, and clicking the Save button. The script uses setTimeout delays to wait for the modal to open and the inputs to be ready. The current and next status displays are updated every minute to show the active schedule and the upcoming change.
THE PANEL
The settings panel is built with BotGentz's BGPanel component. It is draggable via its header, allowing you to reposition it anywhere on the screen. The panel snaps to the left edge by default but can be moved freely. Click the gear emoji to collapse the panel into a small bubble, and click the bubble to expand it again. The panel remembers its position per page session. Press the Escape key to quickly close or minimize the panel. The panel includes a status flash bar that provides visual feedback when settings are changed or actions are performed. All settings and schedules save automatically via GM_setValue.
PLEASE NOTE
This script requires the free BotGentz browser extension to run. It does not function as a standalone Chrome extension and does not use chrome.* APIs. Slack frequently updates its interface, which may affect the selectors used to find the status button and modal fields. If the script stops working, please check for updates. The script uses click simulation to open the status modal and set the status—this requires the Slack page to be visible and the user to be logged in. If you are not on a Slack page, the status will not be updated. The script stores only your schedules and preferences via GM_setValue. No data is sent externally—all data is stored locally in your browser. The script never reads or writes password fields, hidden inputs, or file inputs. All DOM operations use safe methods (style properties, textContent, appendChild) and never use innerHTML.