About
fosscord.js is a fork of discord.js that allows you to easily interact with the Fosscord API and is backwards compatible to discord.js.
Fosscord.js
- Object-oriented
- Predictable abstractions
- Performant
- 100% coverage of the Fosscord API
Additions
- User only features (video/screenshare)
- Voice support for browser
Installation
Node.js 16.6.0 or newer is required.
npm install fosscord.js
yarn add fosscord.js
pnpm add fosscord.js
Without voice support: npm install fosscord.js
With voice support (@discordjs/opus): npm install fosscord.js @discordjs/opus
With voice support (opusscript): npm install fosscord.js opusscript
Audio engines
The preferred audio engine is @discordjs/opus, as it performs significantly better than opusscript. When both are available, fosscord.js will automatically choose @discordjs/opus. Using opusscript is only recommended for development environments where @discordjs/opus is tough to get working. For production bots, using @discordjs/opus should be considered a necessity, especially if they're going to be running on multiple servers.
Optional packages
- zlib-sync for WebSocket data compression and inflation (
npm install zlib-sync
) - erlpack for significantly faster WebSocket data (de)serialisation (
npm install discord/erlpack
) - bufferutil for a much faster WebSocket connection (
npm install bufferutil
) - utf-8-validate in combination with
bufferutil
for much faster WebSocket processing (npm install utf-8-validate
) - @discordjs/voice for interacting with the Discord Voice API
Example usage
Install all required dependencies:
npm install fosscord.js @discordjs/rest discord-api-types
yarn add fosscord.js @discordjs/rest discord-api-types
pnpm add fosscord.js @discordjs/rest discord-api-types
Register a slash command against the Discord API:
const { REST } = require('@discordjs/rest');
const { Routes } = require('discord-api-types/v9');
const commands = [
{
name: 'ping',
description: 'Replies with Pong!',
},
];
const rest = new REST({ version: '9' }).setToken('token');
(async () => {
try {
console.log('Started refreshing application (/) commands.');
await rest.put(Routes.applicationGuildCommands(CLIENT_ID, GUILD_ID), { body: commands });
console.log('Successfully reloaded application (/) commands.');
} catch (error) {
console.error(error);
}
})();
Afterwards we can create a quite simple example bot:
const { Client, Intents } = require('fosscord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
client.on('interactionCreate', async interaction => {
if (!interaction.isCommand()) return;
if (interaction.commandName === 'ping') {
await interaction.reply('Pong!');
}
});
client.login('token');
Links
- Website (source)
- Documentation (source)
- Fosscord Discord server
- Discord.js Guide (source) - this is still for stable
- fosscord.js Discord server
- GitHub
- NPM
Extensions
Contributing
Before creating an issue, please ensure that it hasn't already been reported/suggested, and double-check the
documentation.
See the contribution guide if you'd like to submit a PR.
Help
If you don't understand something in the documentation, you are experiencing problems, or you just need a gentle nudge in the right direction, please don't hesitate to join our official fossccord.js Server.