@ryuziii/discord-rpc
v1.0.1-rc.1
Published
A modern, type-safe, and extensible Discord Rich Presence (RPC) library for Node.js and TypeScript. Includes activity templates, progress helpers, animation, multi-client, and more.
Maintainers
Readme
@ryuziii/discord-rpc
A modern, type-safe, and extensible Discord Rich Presence (RPC) library for Node.js and TypeScript. Better than the original, with robust error handling, activity templates, and cross-platform support.
Features
- Modern TypeScript API
- IPC and WebSocket transport
- Strongly typed events and activity
- Custom error classes
- Auto-reconnect and extensibility
- Activity presets/templates
- Progress percent and queue helpers
- Button templates
- Presence animation and scheduler
- Multi-client support
- Raw event hooks
- OAuth2 integration
Installation
npm install @ryuziii/discord-rpcUsage Examples
See the examples/ folder for full code. Here are some highlights:
TypeScript Import
import { DiscordRPCClient, ActivityPresets, ButtonTemplates, DiscordRPCManager } from '@ryuziii/discord-rpc';
const client = new DiscordRPCClient({ clientId: 'YOUR_CLIENT_ID', transport: 'ipc' });
client.on('ready', () => {
client.setProgressBar('Progressing...', 30, { state: 'Step 1/3', largeImageKey: 'progress' });
});
client.connect();JavaScript Require
const { DiscordRPCClient, ActivityPresets, ButtonTemplates, DiscordRPCManager } = require('@ryuziii/discord-rpc');
const client = new DiscordRPCClient({ clientId: 'YOUR_CLIENT_ID', transport: 'ipc' });
client.on('ready', () => {
client.setProgressBar('Progressing...', 30, { state: 'Step 1/3', largeImageKey: 'progress' });
});
client.connect();Activity Presets & Button Templates
client.setActivity({
...ActivityPresets.nowPlaying('Never Gonna Give You Up', 'Rick Astley'),
buttons: [ButtonTemplates.watchStream('https://youtube.com')],
});Queue & Progress Percent
for (let i = 1; i <= 5; i++) {
client.enqueueActivity({ details: `Step ${i}/5`, state: 'Queued update', largeImageKey: 'queue' });
}
client.setProgressPercent('Loading...', 40, 60, { largeImageKey: 'progress' });Animation
const activities = [
{ details: 'First state', largeImageKey: 'anim1' },
{ details: 'Second state', largeImageKey: 'anim2' },
{ details: 'Third state', largeImageKey: 'anim3' },
];
client.animateActivity(activities, 3000);Scheduler
const now = Math.floor(Date.now() / 1000);
client.scheduleActivity({ details: 'Scheduled 1', largeImageKey: 'timer' }, now + 5);
client.scheduleActivity({ details: 'Scheduled 2', largeImageKey: 'timer' }, now + 10);Multi-Client
const manager = new DiscordRPCManager();
const client1 = manager.addClient({ clientId: 'CLIENT_ID_1', transport: 'ipc' });
const client2 = manager.addClient({ clientId: 'CLIENT_ID_2', transport: 'ipc' });
client1.connect();
client2.connect();Raw Event Hooks
client.onRawEvent((op, data) => {
console.log('Raw event:', op, data);
});API Reference
See TypeScript types and JSDoc comments for full API. Highlights:
DiscordRPCClient— main client classDiscordRPCManager— manage multiple clientsActivityPresets,ButtonTemplates— helpers for activities and buttonssetProgressBar,setProgressPercent,enqueueActivity,animateActivity,scheduleActivity, etc.
Troubleshooting
- IPC not connecting? Make sure Discord is running and you have the right client ID.
- Images not showing? Register your image keys in the Discord Developer Portal and use
registerImageKeys. - Rate limited? Use
setActivityRateLimit(ms)to adjust update frequency. - Errors? See error messages for suggestions, or use
on('error', handler).
Contributing
PRs and issues welcome! Please add tests for new features.
License
MIT
