Auto Reply | Skills Pool
Auto Reply Automatic response rules, patterns, and scheduled messages
alsk1992 180 stars Feb 10, 2026 Auto-Reply - Complete API Reference
Create rules for automatic responses based on patterns, keywords, and conditions.
Chat Commands
List Rules
/autoreply list List all rules
/autoreply active Show active rules only
/autoreply stats Rule statistics
Create Rules
/autoreply add <pattern> <response> Simple keyword match
/autoreply add-regex <regex> <response> Regex pattern
/autoreply add-keywords <kw1,kw2> <resp> Keyword rule
Manage Rules
npx skillvault add alsk1992/alsk1992-cloddsbot-src-skills-bundled-auto-reply-skill-md
stars 180
Updated Feb 10, 2026
Occupation /autoreply enable <id> Enable rule
/autoreply disable <id> Disable rule
/autoreply remove <id> Remove rule
/autoreply edit <id> <new-response> Update response
/autoreply get <id> Rule details
Testing /autoreply test <message> Test which rules match
/autoreply simulate <message> Preview response
Advanced /autoreply cooldown <id> <seconds> Set cooldown
/autoreply schedule <id> <start-end> Active hours (e.g. 9-17)
/autoreply priority <id> <number> Set priority (higher first)
/autoreply channel <id> <channel> Restrict to channel
/autoreply clear-cooldowns Clear all cooldowns
/autoreply reload Reload rules from disk
TypeScript API Reference
Create Auto-Reply Manager import { createAutoReplyManager } from 'clodds/auto-reply';
const autoReply = createAutoReplyManager({
// Storage
storage: 'sqlite',
dbPath: './auto-reply.db',
// Defaults
defaultCooldownMs: 0,
defaultPriority: 0,
// Limits
maxRulesPerUser: 100,
maxResponseLength: 2000,
});
Add Simple Rule // Keyword match
await autoReply.addRule({
name: 'greeting',
pattern: {
type: 'keyword',
value: 'hello',
caseSensitive: false,
},
response: 'Hi there! How can I help?',
});
Add Regex Rule // Regex pattern
await autoReply.addRule({
name: 'price-query',
pattern: {
type: 'regex',
value: /price\s+(btc|eth|sol)/i,
},
response: async (match, ctx) => {
const symbol = match[1].toUpperCase();
const price = await getPrice(symbol);
return `${symbol} price: $${price}`;
},
});
Add Conditional Rule // With conditions
await autoReply.addRule({
name: 'trading-hours',
pattern: {
type: 'keyword',
value: 'trade',
},
conditions: [
// Only during market hours
{
type: 'time',
start: '09:30',
end: '16:00',
timezone: 'America/New_York',
},
// Only on weekdays
{
type: 'day',
days: ['mon', 'tue', 'wed', 'thu', 'fri'],
},
// Only for certain users
{
type: 'user',
userIds: ['user-123', 'user-456'],
},
],
response: 'Markets are open! What would you like to trade?',
elseResponse: 'Markets are closed. Try again during trading hours.',
});
Add Cooldown // Prevent spam
await autoReply.addRule({
name: 'faq',
pattern: {
type: 'keyword',
value: 'faq',
},
response: 'Check our FAQ at https://...',
cooldown: {
perUser: 60000, // 60s per user
perChannel: 10000, // 10s per channel
global: 5000, // 5s global
},
});
Dynamic Responses // Response with variables
await autoReply.addRule({
name: 'welcome',
pattern: {
type: 'exact',
value: '!welcome',
},
response: 'Welcome {{user.name}}! You joined {{user.joinDate}}.',
variables: {
'user.name': (ctx) => ctx.user.displayName,
'user.joinDate': (ctx) => ctx.user.createdAt.toDateString(),
},
});
// Response with API call
await autoReply.addRule({
name: 'portfolio',
pattern: {
type: 'keyword',
value: 'portfolio',
},
response: async (match, ctx) => {
const portfolio = await getPortfolio(ctx.user.id);
return `Your portfolio: $${portfolio.totalValue.toFixed(2)}`;
},
});
List Rules const rules = await autoReply.listRules();
for (const rule of rules) {
console.log(`${rule.id}: ${rule.name}`);
console.log(` Pattern: ${rule.pattern.value}`);
console.log(` Enabled: ${rule.enabled}`);
console.log(` Triggers: ${rule.triggerCount}`);
}
Test Rule // Test which rules would match
const matches = await autoReply.test('hello world', {
userId: 'user-123',
channelId: 'telegram-456',
});
for (const match of matches) {
console.log(`Rule: ${match.rule.name}`);
console.log(`Response: ${match.response}`);
}
Enable/Disable await autoReply.enable('rule-id');
await autoReply.disable('rule-id');
Delete Rule await autoReply.deleteRule('rule-id');
Pattern Types Type Example Description keywordhelloContains keyword exact!helpExact match only regex/price\s+\w+/iRegular expression startsWith!Starts with prefix endsWith?Ends with suffix
Condition Types Type Description timeActive during time window dayActive on specific days userOnly for specific users channelOnly in specific channels roleOnly for users with role customCustom function
Response Variables Variable Description {{user.name}}User display name {{user.id}}User ID {{channel.name}}Channel name {{match[0]}}Full regex match {{match[1]}}First capture group {{date}}Current date {{time}}Current time
Best Practices
Use priorities — Important rules first
Set cooldowns — Prevent spam
Test patterns — Verify before enabling
Use conditions — Context-aware responses
Monitor triggers — Check rule effectiveness
02
Chat Commands