Background Tasks
SoSad has a built-in task scheduler. Tasks run in the background while your bot is running.
Basic task
from sosad import task
@task(minutes=5)
async def clean_cache() -> None:
"""Clean old cache entries every 5 minutes."""
cache.clear()
logger.info("Cache cleaned")
Task intervals
@task(seconds=30)
async def health_check() -> None:
...
@task(minutes=15)
async def sync_data() -> None:
...
@task(hours=1)
async def backup() -> None:
...
@task(days=1)
async def daily_report() -> None:
...
Accessing bot services
Tasks can access the client via the global registry:
@task(minutes=5)
async def update_status() -> None:
from sosad import get_client
client = get_client()
await client.bot.update_presence(...)
Via the Bot (compat)
bot = discord.Bot(command_prefix="!", intents=..., token="...")
@bot.task(hours=1)
async def clean_temp():
"""Clean temp files every hour."""
...
Scheduler API
from sosad.tasks import TaskScheduler, TaskRegistry
# Create a scheduler
scheduler = TaskScheduler()
# Add a task
@task()
async def my_task():
...
# Start/stop
scheduler.start()
scheduler.stop()
# Check running tasks
registry = TaskRegistry()
for task_meta in registry:
print(task_meta.name)
Use cases
- Cache invalidation — clear caches periodically
- Database maintenance — vacuum, reindex
- Status updates — rotate bot status messages
- Webhook polling — check external APIs
- Daily reports — send scheduled messages
- Data sync — sync with external services