An easy to use Discord API Library for Deno and Node.js
- Lightweight and easy to use
- Complete Object-Oriented approach
- Slash Commands supported
- Built-in Commands framework
- Customizable Caching, with Redis support
@decorators
supported- Made with ❤️ in TypeScript
You can import the package from https://deno.land/x/harmony/mod.ts (with latest version) or can add a version too, and raw GitHub URL (latest unpublished version) https://raw.githubusercontent.com/harmonyland/harmony/main/mod.ts too.
We also have a (fancy) custom registry for importing Harmony! It's at code.harmony.rocks, example import URL: https://code.harmony.rocks/v2.6.1
.
You can install and use the NPM package published under @harmonyland/harmony
.
Documentation is available main branch or latest stable version (v2.6.1). You can also check out the guide.
For a quick example, run this:
deno run --allow-net https://deno.land/x/[email protected]/examples/ping.ts
And input your bot's token.
Here is a small example of how to use harmony,
import {
Client,
Message,
GatewayIntents
} from 'https://deno.land/x/[email protected]/mod.ts'
const client = new Client({
intents: [
'GUILDS',
'DIRECT_MESSAGES',
'GUILD_MESSAGES'
],
// token: optionally specify, otherwise DISCORD_TOKEN from env is used
})
// Listen for event when client is ready (Identified through gateway / Resumed)
client.on('ready', () => {
console.log(`Ready! User: ${client.user?.tag}`)
})
// Listen for event whenever a Message is sent
client.on('messageCreate', (msg: Message): void => {
if (msg.content === '!ping') {
msg.channel.send(`Pong! WS Ping: ${client.gateway.ping}`)
}
})
// Connect to gateway
client.connect()
Or with CommandClient!
import {
CommandClient,
Command,
CommandContext,
GatewayIntents
} from 'https://deno.land/x/[email protected]/mod.ts'
const client = new CommandClient({
prefix: '!',
intents: [
'GUILDS',
'DIRECT_MESSAGES',
'GUILD_MESSAGES'
],
// token: optionally specify, otherwise DISCORD_TOKEN from env is used
})
// Listen for event when client is ready (Identified through gateway / Resumed)
client.on('ready', () => {
console.log(`Ready! User: ${client.user?.tag}`)
})
// Create a new Command
class PingCommand extends Command {
name = 'ping'
execute(ctx: CommandContext) {
ctx.message.reply(`pong! Ping: ${ctx.client.gateway.ping}ms`)
}
}
client.commands.add(PingCommand)
// Connect to gateway
client.connect()
Or with Decorators!
import {
event,
CommandClient,
command,
CommandContext,
GatewayIntents
} from 'https://deno.land/x/[email protected]/mod.ts'
class MyClient extends CommandClient {
constructor() {
super({
prefix: ['!', '!!'],
caseSensitive: false,
intents: [
'GUILDS',
'DIRECT_MESSAGES',
'GUILD_MESSAGES'
],
// token: optionally specify, otherwise DISCORD_TOKEN from env is used
})
}
@event()
ready(): void {
console.log(`Logged in as ${this.user?.tag}!`)
}
@command({ aliases: 'pong' })
Ping(ctx: CommandContext): void {
ctx.message.reply('Pong!')
}
}
new MyClient().connect()
Need support? Join our Discord Server!
Pull requests are welcome!
Small note: If editing the README, please conform to the standard-readme specification.