Seyfert v3.2.0: Developer Experience, Refined
Small release, big impact. Quality of life improvements that make daily development smoother.
June 17, 2025
The Little Things
Not every release needs a headline feature. Sometimes the best updates are the ones that remove friction from your daily workflow.
Seyfert v3.2.0 is a love letter to developer experience.
waitFor: Await Specific Components
Collectors are powerful, but sometimes you just want to wait for that one button click:
const interaction = await collector.waitFor(
(i) => i.customId === 'confirm' && i.user.id === userId,
{ timeout: 30000 }
);
if (interaction) {
await interaction.reply({ content: 'Confirmed!' });
}No more callback soup. Just clean, linear async code.
Awaitable Text Command Responses
deferReplyResponse and reply for text commands are now properly awaitable:
// Before: Fire and forget
ctx.deferReplyResponse();
// After: Wait for it
await ctx.deferReplyResponse();
await ctx.reply({ content: 'Processing complete!' });Better control flow. Fewer race conditions.
RegExp Custom IDs
CommandComponent now accepts regular expressions for customId matching:
import { ComponentCommand, type ComponentContext } from 'seyfert';
export default class ProductHandler extends ComponentCommand {
componentType = 'Button' as const;
customId = /^product-\d+$/; // Matches product-1, product-42, etc.
run(ctx: ComponentContext<typeof this.componentType>) {
const productId = ctx.customId.split('-')[1];
// Handle any product-{number} button
}
}One handler for many buttons. DRY and powerful.
Thread Management
New utility for fetching active threads:
const activeThreads = await client.threads.listGuildActive(guildId);No more workarounds to find what threads are currently active.
Stability Improvements
Worker Heartbeat
Workers now maintain a heartbeat to keep connections alive. No more mysterious disconnections in long-running worker processes.
Bug Fixes
- Thread
parentIdnow correctly returns the parent channel ID (wasundefined) - Gateway properties properly propagate from parent process to child workers
Section.accessorythrows a clear error when missingroles.deleteno longer incorrectly returns a Role object- Locale router handles undefined
langgracefully
Upgrade
pnpm install [email protected]No breaking changes. Just improvements.
Sometimes that's exactly what you need.