3
Timers
Logan Fick edited this page 2026-02-14 15:03:20 -05:00

Timers

The timers module lets moderators create recurring chat messages that fire on a configurable interval with an optional minimum chat activity threshold.

This is a built-in module that ships with Owlbot and is enabled by default.

Quick Start

Create a timer, set its message and interval, then enable it:

!addtimer hydrate
!settimermessage hydrate Remember to stay hydrated!
!settimerinterval hydrate 30m
!enabletimer hydrate

The bot will now send "Remember to stay hydrated!" every 30 minutes.

Commands

Command Aliases Usage Permission Description
!addtimer !addtimer [name] Moderator Create a new empty timer with an optional name.
!settimermessage !settimermessage <id|name> <message> Moderator Set the message text for a timer.
!settimerinterval !settimerinterval <id|name> <interval> Moderator Set the interval (simple duration or cron expression).
!settimerlines !settimerlines <id|name> <count> Moderator Set minimum chat lines between firings. 0 to disable.
!enabletimer !enabletimer <id|name> Moderator Enable a timer.
!disabletimer !disabletimer <id|name> Moderator Disable a timer.
!deletetimer !deletetimer <id|name> Moderator Permanently delete a timer.
!listtimers !listtimers Moderator Send a link to the timer list web page.

Timer Identification

Every timer has a numeric ID assigned when it is created. Timers can also have an optional name (must start with a letter or underscore, followed by letters, numbers, or underscores, max 32 characters). All commands accept either the numeric ID or the name to identify a timer.

Intervals

Timers support two types of intervals:

Simple Durations

A single token combining hours, minutes, and/or seconds. Minimum interval is 30 seconds.

Example Duration
30s 30 seconds
5m 5 minutes
1h 1 hour
1h30m 1 hour 30 minutes
2h30m 2 hours 30 minutes
!settimerinterval hydrate 15m

Cron Expressions

Standard 5-field cron expressions for precise scheduling. Minimum gap between firings is 1 minute. Uses the cronsim library for parsing.

Example Schedule
*/15 * * * * Every 15 minutes
0 * * * * Every hour on the hour
0 */2 * * * Every 2 hours
30 20 * * * Daily at 8:30 PM UTC
!settimerinterval hydrate */15 * * * *

The interval type is auto-detected: values with spaces are parsed as cron, values without spaces are parsed as simple durations.

Minimum Chat Lines

Timers can require a minimum number of chat messages between firings. This prevents timers from firing into an empty chat when no one is talking.

!settimerlines hydrate 5

With this setting, the hydrate timer will only fire if at least 5 chat messages have been sent since it last fired, even if the interval has elapsed. Set to 0 to disable the threshold:

!settimerlines hydrate 0

Bot messages and hidden messages (removed by moderation) are not counted toward the threshold.

Web UI

The module serves a timer list page at /owlbot/timers/list showing all timers in a table with their ID, name, message, interval, minimum lines, status, and last fired time. The !listtimers command sends a link to this page in chat.

Examples

# Create a timer with a name
!addtimer hydrate
!settimermessage hydrate Remember to stay hydrated!
!settimerinterval hydrate 30m
!enabletimer hydrate

# Create a timer without a name (uses ID)
!addtimer
!settimermessage 2 Follow us on social media!
!settimerinterval 2 1h
!settimerlines 2 10
!enabletimer 2

# Use a cron expression for precise scheduling
!addtimer hourly_reminder
!settimermessage hourly_reminder Check out our merch store!
!settimerinterval hourly_reminder 0 * * * *
!enabletimer hourly_reminder

# Disable a timer
!disabletimer hydrate

# Delete a timer
!deletetimer hydrate

# View all timers on the web page
!listtimers