A lightweight Discord currency transfer detector for NovaGolds, LutexBits, and Credits.
npm install coinsnitch



CoinSnitch is a powerful TypeScript library for detecting virtual currency transfers in Discord. Monitor NovaGolds, LutexBits, Credits, and more with type-safe, real-time detection.
Features ⢠Installation ⢠Quick Start ⢠Documentation ⢠Support
---
- š· Full TypeScript Support ā Complete type definitions and IntelliSense
- š± Multi-Currency Detection ā NovaGolds, LutexBits, Credits, and extensible for more
- ā” Real-time Monitoring ā Instant detection via messageCreate and messageUpdate events
- šÆ Flexible Amount Matching ā Support for single or multiple amounts
- š”ļø Type-Safe ā Catch errors at compile time, not runtime
- š Easy Integration ā Works seamlessly with Discord.js v13 & v14
- š§© Modular Architecture ā Import only what you need
- āļø Highly Configurable ā Customizable timeouts and filters
- š¦ Zero Dependencies ā Lightweight and efficient (only peer dependencies)
---
``bash`
npm install coinsnitch
`bash`
yarn add coinsnitch
`bash`
pnpm add coinsnitch
- Node.js 16.x or higher
- Discord.js v13 or v14
- TypeScript 4.7+ (for TypeScript projects)
---
`typescript
import { Client, TextChannel } from 'discord.js';
import { watchNovaGolds } from 'coinsnitch';
const client = new Client({ intents: ['Guilds', 'GuildMessages'] });
client.on('messageCreate', async (message) => {
if (message.content === '!transfer') {
const result = await watchNovaGolds({
channel: message.channel as TextChannel,
botId: '123456789',
userId: message.author.id,
amount: [10, 50, 100],
timeout: 60000
});
if (result) {
message.reply(ā
Transfer detected: $${result.amount});
} else {
message.reply('ā No transfer detected within timeout');
}
}
});
client.login('YOUR_BOT_TOKEN');
`
`javascript
const { Client } = require('discord.js');
const { watchCredits } = require('coinsnitch');
const client = new Client({ intents: ['Guilds', 'GuildMessages'] });
client.on('messageCreate', async (message) => {
const result = await watchCredits({
channel: message.channel,
botId: '987654321',
userId: message.author.id,
amount: 25,
timeout: 30000
});
if (result) {
console.log(Transfer confirmed: $${result.amount});
}
});
client.login('YOUR_BOT_TOKEN');
`
---
#### watchNovaGolds(options)
Monitors NovaGolds currency transfers via messageCreate events.
Options:
`typescript`
interface NovaGoldsWatchOptions {
channel: TextChannel; // Discord channel to monitor
botId: string; // Bot ID that sends transfer confirmations
userId: string; // User ID receiving the transfer
amount: number | number[]; // Amount(s) to detect
timeout?: number; // Max wait time in ms (default: 60000)
}
Returns:
`typescript
Promise
interface WatchResult {
message: Message; // The matched Discord message
amount: number; // The exact amount that was matched
}
`
Example:
`typescript
const result = await watchNovaGolds({
channel: textChannel,
botId: '123456789',
userId: '987654321',
amount: [5, 10, 20],
timeout: 60000
});
if (result) {
console.log(Received ${result.amount} NovaGolds);Message ID: ${result.message.id}
console.log();`
}
---
#### watchCredits(options)
Monitors Credits currency transfers via messageCreate events.
Options:
`typescript`
interface CreditsWatchOptions {
channel: TextChannel;
botId: string;
userId: string;
amount: number | number[];
timeout?: number;
}
Returns: Promise
Example:
`typescript`
const result = await watchCredits({
channel: message.channel as TextChannel,
botId: '555666777',
userId: targetUser.id,
amount: 100
});
---
#### watchLutexBits(options)
Monitors LutexBits currency transfers via messageUpdate events (for edited messages).
Options:
`typescript`
interface LutexBitsWatchOptions {
channel: TextChannel;
client: Client; // Discord.js client instance
userId: string;
amount: number | number[];
timeout?: number;
}
Returns: Promise
Example:
`typescript
const result = await watchLutexBits({
channel: message.channel as TextChannel,
client: client,
userId: '111222333',
amount: [1, 5, 10, 50]
});
if (result) {
await message.reply(LutexBits transfer successful: $${result.amount});`
}
---
#### Multiple Amount Detection
`typescript
// Detect any of these amounts
const result = await watchNovaGolds({
channel: channel,
botId: botId,
userId: userId,
amount: [10, 25, 50, 100, 500]
});
// Returns the actual amount matched
if (result) {
switch(result.amount) {
case 10:
console.log('Small transfer detected');
break;
case 100:
console.log('Medium transfer detected');
break;
case 500:
console.log('Large transfer detected!');
break;
}
}
`
#### Custom Timeout Handling
`typescript
const result = await watchCredits({
channel: channel,
botId: botId,
userId: userId,
amount: 50,
timeout: 30000 // 30 seconds
});
if (!result) {
console.log('Transfer not detected within 30 seconds');
// Handle timeout logic here
}
`
#### Parallel Watching
`typescript
// Watch multiple currencies simultaneously
const [novaResult, creditsResult, lutexResult] = await Promise.all([
watchNovaGolds({ channel, botId, userId, amount: 10 }),
watchCredits({ channel, botId, userId, amount: 10 }),
watchLutexBits({ channel, client, userId, amount: 10 })
]);
const successful = [novaResult, creditsResult, lutexResult]
.filter(Boolean)
.map(r => r!.amount);
console.log(Detected transfers: ${successful.join(', ')});`
---
``
coinsnitch/
āāā src/
ā āāā filters/
ā ā āāā creditsFilter.ts
ā ā āāā lutexBitsFilter.ts
ā ā āāā novaGoldsFilter.ts
ā āāā utils/
ā ā āāā createMessageWatcher.ts
ā āāā watchers/
ā ā āāā watchCredits.ts
ā ā āāā watchLutexBits.ts
ā ā āāā watchNovaGolds.ts
ā āāā index.ts
ā āāā index.d.ts
āāā dist/ # Compiled JavaScript
āāā tsconfig.json
āāā package.json
āāā README.md
āāā LICENSE
---
- š® Economy Bots ā Track in-game currency transactions
- š° Gambling Systems ā Verify bet payments and payouts
- šŖ Shop Bots ā Confirm purchase transactions
- š Giveaway Bots ā Validate prize distributions
- š Transaction Logging ā Monitor and record all transfers
- š Payment Verification ā Ensure secure currency exchanges
---
| Currency | Watcher Function | Event Type |
|----------|-----------------|------------|
| š° Credits | watchCredits() | messageCreate |watchNovaGolds()
| š NovaGolds | | messageCreate |watchLutexBits()
| š§ LutexBits | | messageUpdate |
CoinSnitch is designed to be extensible. You can create custom filters and watchers for any currency format.
---
- LutexBits uses messageUpdate events (requires MESSAGE_CONTENT intent)messageCreate
- NovaGolds and Credits use eventsfalse
- Always ensure your bot has the necessary Discord intents enabled
- Timeouts default to 60 seconds but can be customized
- The library returns on timeout or no match
---
If you're using TypeScript, ensure your tsconfig.json includes:
`json`
{
"compilerOptions": {
"esModuleInterop": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"lib": ["ES2021"]
}
}
---
Contributions are welcome! Please feel free to submit a Pull Request.
1. Fork the repository
2. Create your feature branch (git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature'
3. Commit your changes ()git push origin feature/AmazingFeature`)
4. Push to the branch (
5. Open a Pull Request
---
Need help? Have questions?
- š¬ Join our Discord Server
- š Report Issues
- š§ Contact: support@example.com
---
This project is licensed under the Apache License 2.0 ā see the LICENSE file for details.
---
- Built with ā¤ļø for the Discord.js community
- Special thanks to all contributors and testers
- Powered by TypeScript for enhanced developer experience
---
Made with ā¤ļø by the Nexus Studio Team