1.0.0 • Published 2 years ago

fosscord-gopnik v1.0.0

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

fosscord-gopnik

About

This package monkey-patches the Discord.js library in order to allow it to connect to Fosscord instances.

Install

npm install fosscord-gopnik --save

Usage

Exactly as you would the standard Discord.js package, but instead just import this one.

import Fosscord from "fosscord-gopnik";
const client = new Fosscord.Client({
	intents: ["GUILD_MESSAGES"],

	// New default endpoints:
	http: {
		api: 'https://dev.fosscord.com/api',
		cdn: 'https://cdn.fosscord.com',
		invite: 'https://fosscord.com',
	},
});

client.on("ready", () => {
	console.log(`Logged in as ${client.user?.tag}`);
})

client.on("messageCreate", (msg) => {
	console.log(msg);
})

client.login("token here");	//Token from instance

Instancing ( WIP )

Allows connections to multiple Fosscord/Discord instances. Using mostly the same API as Discord.js Shards.

/* entry point */
import { InstanceManager } from "fosscord-gopnik";

const manager = new InstanceMananger("./bot", {
	instances: [
		{
			token: "bot token for this instance",
			baseUrl: "url of fosscord/discord instance",
			// rather than baseUrl, you may alternatively provide:
			http: {
				api: "fosscord api endpoint",
				cdn: "cdn endpoint",
				invite: "invite endpoint",
			}
		},
		{ ... }
	]
});

// Or:
manager.createChild({ token: "", baseUrl: "", });

manager.on("childCreate", (child) => {
	console.log(`Created instance ${child.instance.baseUrl}`);
});

/* bot.ts */
import Fosscord from "fosscord-gopnik";
const Client = new Fosscord.Client({ ... });

//later:
if (client.instanced) {		//Similar to client.shard
	client.instanced.broadcastEval((client) => console.log("Hi!"));
	client.instanced.fetchClientValues("guilds.cache.size")
		.then(x => console.log(`I am in ${x.reduce((c, p) => c + p)} guilds over all my instances`));
	client.instanced.respawnAll();
	client.instanced.respawn();
	client.instanced.send(message);

	await client.instanced.instanceIdsForGuildId(message.guild.id);	//returns guild, child id and instance id ( currently instance baseUrl )
	await client.instanced.instanceIdsForUserId(message.user.id);	//see above

}

//INSTANCE_TOKEN is set by InstanceMananger for this process.
client.login(process.env.INSTANCE_TOKEN);