pairing

Pairing - Complete API Reference

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "pairing" with this command: npx skills add alsk1992/cloddsbot/alsk1992-cloddsbot-pairing

Pairing - Complete API Reference

Pair new users to Clodds, manage trust levels, and control access across channels.

Chat Commands

Pairing (New Users)

/pair Request pairing (generates code) /pair-code ABC123 Enter pairing code /unpair Remove your pairing

Admin Commands

/pairing list List pending requests /pairing approve <code> Approve pairing request /pairing reject <code> Reject pairing request /pairing users List paired users /pairing remove <user> Remove user pairing

Trust Management

/trust <user> owner Grant owner trust /trust <user> paired Standard trust /trust list List trust levels

TypeScript API Reference

Create Pairing Service

import { createPairingService } from 'clodds/pairing';

const pairing = createPairingService({ // Code settings codeLength: 8, codeExpiryMinutes: 60, maxPendingPerChannel: 3,

// Auto-approve settings autoApproveLocal: true, // Auto-approve localhost autoApproveTailscale: true, // Auto-approve Tailscale IPs autoApproveOwners: true, // Owners auto-approve their requests

// Storage storage: 'sqlite', dbPath: './pairing.db', });

Create Pairing Request

// User requests pairing const request = await pairing.createPairingRequest({ channelId: 'telegram-123', userId: 'telegram-user-456', username: 'johndoe', displayName: 'John Doe', });

console.log(Pairing code: ${request.code}); console.log(Expires: ${request.expiresAt}); console.log(Share this code with an admin to get approved);

Validate Code

// Check if code is valid const valid = await pairing.validateCode({ code: 'ABC123XY', });

if (valid) { console.log(Valid code for user: ${valid.username}); console.log(Channel: ${valid.channelId}); }

Approve Request

// Admin approves pairing await pairing.approveRequest({ code: 'ABC123XY', approvedBy: 'admin-user-id', trustLevel: 'paired', });

Reject Request

// Admin rejects pairing await pairing.rejectRequest({ code: 'ABC123XY', rejectedBy: 'admin-user-id', reason: 'Unknown user', });

Check Pairing Status

// Check if user is paired const isPaired = await pairing.isPaired({ channelId: 'telegram-123', userId: 'telegram-user-456', });

if (isPaired) { console.log('User is paired and can use Clodds'); }

Get Trust Level

const trust = await pairing.getTrustLevel({ channelId: 'telegram-123', userId: 'telegram-user-456', });

console.log(Trust level: ${trust}); // 'owner' | 'paired' | 'stranger'

// Check specific permission if (trust === 'owner') { console.log('Full admin access'); } else if (trust === 'paired') { console.log('Standard trading access'); } else { console.log('No access - must pair first'); }

List Pending Requests

const pending = await pairing.listPendingRequests({ channelId: 'telegram-123', // Optional: filter by channel });

for (const req of pending) { console.log(Code: ${req.code}); console.log(User: ${req.username} (${req.displayName})); console.log(Requested: ${req.createdAt}); console.log(Expires: ${req.expiresAt}); }

List Paired Users

const users = await pairing.listPairedUsers({ channelId: 'telegram-123', // Optional: filter by channel });

for (const user of users) { console.log(${user.username}: ${user.trustLevel}); console.log( Paired: ${user.pairedAt}); console.log( Approved by: ${user.approvedBy}); }

Check Owner Status

const isOwner = await pairing.isOwner({ channelId: 'telegram-123', userId: 'telegram-user-456', });

if (isOwner) { console.log('User has owner privileges'); }

Remove Pairing

// Remove user's pairing await pairing.removePairing({ channelId: 'telegram-123', userId: 'telegram-user-456', });

Trust Levels

Level Access

owner Full admin: approve users, manage settings, trading

paired Standard: trading, portfolio, queries

stranger None: must pair first

Pairing Code Format

  • Length: 8 characters

  • Characters: Uppercase letters + numbers

  • Excludes: 0, O, 1, I, L (avoid confusion)

  • Example: ABC234XY

Auto-Approve Rules

Condition Behavior

Localhost Auto-approve with owner trust

Tailscale IP Auto-approve with owner trust

Owner request Auto-approve their other channels

Security Features

Feature Description

Code expiry Codes expire after 1 hour

Rate limiting Max 3 pending per channel

Unambiguous codes No confusable characters

Audit trail Who approved/rejected when

CLI Admin Commands

List pending pairing requests

clodds pairing list telegram

Approve a request

clodds pairing approve ABC234XY

List paired users

clodds pairing users telegram

Add user directly (bypass code)

clodds pairing add telegram user-123

Remove user

clodds pairing remove telegram user-123

Best Practices

  • Share codes securely — Don't post in public channels

  • Set expiry appropriately — Shorter for sensitive systems

  • Review pending regularly — Don't let requests pile up

  • Use owner sparingly — Most users only need 'paired'

  • Audit periodically — Review who has access

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

binance-futures

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

trading-futures

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

tts

No summary provided by upstream source.

Repository SourceNeeds Review