Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
alsk1992 avatar

Presence

  • 14 installs
  • 610 repo stars
  • Updated June 26, 2026
  • alsk1992/cloddsbot

presence is a Claude skill that provides a presence service for tracking online status, activity, and multi-device sync in a bot backend.

About

This skill provides a presence service for tracking online status, activity, and multi-device sync. Developers call a TypeScript API or /presence commands to set status, record activity, list who is online, and sync across devices. It supports heartbeats, auto-away after idle, and Redis or in-memory storage. It is a backend building block for a chat or trading bot.

  • Manages online/away/dnd/offline status with custom status messages
  • Tracks activity and syncs presence across multiple devices
  • Redis or in-memory storage with heartbeats and auto-away after idle

Presence by the numbers

  • 14 all-time installs (skills.sh)
  • Ranked #3,507 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

presence capabilities & compatibility

Capabilities
presence tracking · activity log · device sync
Works with
redis
From the docs

What presence says it does

Manage online status, track activity across devices, and sync presence information.
SKILL.md
storage: 'redis', // 'redis' | 'memory'
SKILL.md
npx skills add https://github.com/alsk1992/cloddsbot --skill presence

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs14
repo stars610
Last updatedJune 26, 2026
Repositoryalsk1992/cloddsbot

What it does

Track and sync user online status and activity across devices in a bot backend.

Who is it for?

Adding online-status, activity tracking, and device sync to a bot or chat backend.

When should I use this skill?

A developer needs to show who is online, set a status, or sync presence across devices.

By the numbers

  • 4 status types (online, away, dnd, offline)

Files

SKILL.mdMarkdownGitHub ↗

Presence - Complete API Reference

Manage online status, track activity across devices, and sync presence information.

---

Chat Commands

View Status

/presence                                   Show your status
/presence who                               Who's online
/presence activity                          Recent activity

Set Status

/presence online                            Set online
/presence away                              Set away
/presence dnd                               Do not disturb
/presence offline                           Appear offline
/presence status "In a meeting"             Custom status

Devices

/presence devices                           Your connected devices
/presence sync                              Force sync all devices

---

TypeScript API Reference

Create Presence Service

import { createPresenceService } from 'clodds/presence';

const presence = createPresenceService({
  // Update interval
  heartbeatIntervalMs: 30000,

  // Auto-away after idle
  awayAfterMs: 300000,  // 5 minutes

  // Storage
  storage: 'redis',  // 'redis' | 'memory'
  redisUrl: process.env.REDIS_URL,
});

Get Status

// Get own status
const status = await presence.getStatus(userId);

console.log(`Status: ${status.status}`);  // 'online' | 'away' | 'dnd' | 'offline'
console.log(`Custom: ${status.customStatus}`);
console.log(`Last seen: ${status.lastSeen}`);
console.log(`Device: ${status.activeDevice}`);

// Get multiple users
const statuses = await presence.getStatuses(['user-1', 'user-2', 'user-3']);

Set Status

// Set status
await presence.setStatus(userId, 'online');
await presence.setStatus(userId, 'away');
await presence.setStatus(userId, 'dnd');
await presence.setStatus(userId, 'offline');

// Set custom status message
await presence.setCustomStatus(userId, 'Trading BTC');

// Clear custom status
await presence.clearCustomStatus(userId);

Activity Tracking

// Record activity
await presence.recordActivity(userId, {
  type: 'message',
  channelId: 'telegram-123',
  timestamp: Date.now(),
});

// Get recent activity
const activity = await presence.getActivity(userId, {
  limit: 10,
  since: Date.now() - 3600000,  // Last hour
});

for (const event of activity) {
  console.log(`${event.type} at ${event.timestamp}`);
  console.log(`  Channel: ${event.channelId}`);
}

Device Presence

// Get user's devices
const devices = await presence.getDevices(userId);

for (const device of devices) {
  console.log(`${device.id}: ${device.name}`);
  console.log(`  Status: ${device.status}`);
  console.log(`  Last seen: ${device.lastSeen}`);
  console.log(`  Active: ${device.isActive}`);
}

// Set device status
await presence.setDeviceStatus(userId, deviceId, 'online');

Who's Online

// Get online users
const online = await presence.getOnlineUsers({
  channelId: 'telegram-123',  // Optional: filter by channel
});

for (const user of online) {
  console.log(`${user.name}: ${user.status}`);
}

Event Handlers

// Status changes
presence.on('statusChange', (userId, oldStatus, newStatus) => {
  console.log(`${userId}: ${oldStatus} -> ${newStatus}`);
});

// User came online
presence.on('online', (userId) => {
  console.log(`${userId} is now online`);
});

// User went offline
presence.on('offline', (userId) => {
  console.log(`${userId} went offline`);
});

Sync Across Devices

// Force sync
await presence.sync(userId);

// Get sync status
const syncStatus = await presence.getSyncStatus(userId);
console.log(`Devices synced: ${syncStatus.synced}/${syncStatus.total}`);
console.log(`Last sync: ${syncStatus.lastSync}`);

---

Status Types

StatusDescription
onlineActive and available
awayIdle/inactive
dndDo not disturb
offlineNot available

---

Auto-Away

Presence automatically changes to away after inactivity:

const presence = createPresenceService({
  awayAfterMs: 300000,    // 5 min idle -> away
  offlineAfterMs: 3600000, // 1 hour idle -> offline
});

---

Multi-Device Sync

When user is active on multiple devices:

  • Most recent activity determines primary device
  • Status syncs across all devices
  • Custom status shared everywhere

---

Best Practices

1. Use heartbeats — Keep status accurate 2. Set away appropriately — Don't spam status changes 3. Custom status — Let others know what you're doing 4. Review devices — Keep device list clean 5. DND for focus — Mute notifications during trades

Related skills

FAQ

Where does presence data get stored?

It supports Redis or in-memory storage, configured via the storage option.

Does status change automatically when idle?

Yes, it auto-changes to away after a configurable idle window (awayAfterMs).

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.