Skip to content

Commit

Permalink
Feat(Player): Added auto-update of player events (#27)
Browse files Browse the repository at this point in the history
  • Loading branch information
JaronZ authored Aug 30, 2021
1 parent 86346c0 commit bfd7452
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 9 deletions.
6 changes: 1 addition & 5 deletions src/bot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,7 @@ for(const file of readdirSync(join(__dirname, "events/player")).filter(file => f
// make a new event if a class is being used
// @ts-ignore
try { event = new event(); } catch {}
if(event.once){
client.player.once(event.name, event.run);
continue;
}
client.player.on(event.name, event.run);
client.player.onCustom(file, event.name, event.run);
}

client.login(process.env.TOKEN);
6 changes: 3 additions & 3 deletions src/client.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Player } from "discord-player";
import { Awaited, Client, ClientEvents, ClientOptions, Collection } from "discord.js";
import { SlashCommand } from "./command";
import { CustomPlayer } from "./player";

/**
* An extended client class
Expand All @@ -13,7 +13,7 @@ class CustomClient<Ready extends boolean = boolean> extends Client<Ready> {
/**
* The player used to play songs
*/
public readonly player: Player;
public readonly player: CustomPlayer;

private readonly events: Collection<string, {
name: string,
Expand All @@ -22,7 +22,7 @@ class CustomClient<Ready extends boolean = boolean> extends Client<Ready> {

constructor(options: ClientOptions){
super(options);
this.player = new Player(this);
this.player = new CustomPlayer(this);
}

public onCustom<K extends keyof ClientEvents>(file: string, event: K, listener: (...args: ClientEvents[K]) => Awaited<void>, once: boolean = false): this {
Expand Down
12 changes: 11 additions & 1 deletion src/events/client/ready.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { ActivityOptions } from "discord.js";
import { watch } from "fs";
import { CustomClient } from "../../client";
import { CustomConsole } from "../../console";
import { ClientEvent } from "../../event";
import { ClientEvent, PlayerEvent } from "../../event";

module.exports = class extends ClientEvent {
constructor(){
Expand All @@ -27,6 +27,16 @@ module.exports = class extends ClientEvent {
try { event = new event(); } catch (error) {}
client.onCustom(file, event.name, (...args) => event.run(...args));
});
watch("dist/events/player", "utf8", (eventType, file) => {
if(eventType != "change") return;
client.player.offCustom(file);
const path = `../player/${file}`;
delete require.cache[require.resolve(path)];
let event: PlayerEvent = require(path);
// @ts-ignore
try { event = new event(); } catch {}
client.player.onCustom(file, event.name, event.run);
});

try {
CustomConsole.log("Setting default permission for guild (/) commands.");
Expand Down
25 changes: 25 additions & 0 deletions src/player.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import Collection from "@discordjs/collection";
import { Player, PlayerEvents } from "discord-player";

class CustomPlayer extends Player {
private readonly events: Collection<string, {
name: keyof PlayerEvents,
listener: PlayerEvents[keyof PlayerEvents]
}> = new Collection();

public onCustom<K extends keyof PlayerEvents>(file: string, event: K, listener: PlayerEvents[K], once: boolean = false): this {
this.events.set(file, {
name: event,
listener
});
return once ? this.once(event, listener) : this.on(event, listener);
}

public offCustom(file: string): this {
const oldEvent = this.events.get(file);
this.events.delete(file);
return this.off(oldEvent.name, oldEvent.listener);
}
}

export {CustomPlayer};

0 comments on commit bfd7452

Please sign in to comment.