Removed createDiscordJSAdapter

This commit is contained in:
Christer Warén 2021-08-27 01:38:33 +03:00
parent ee13f11f71
commit 0b7da1937b
3 changed files with 32 additions and 79 deletions

View File

@ -4,7 +4,6 @@ const {
getVoiceConnection, getVoiceConnection,
joinVoiceChannel joinVoiceChannel
} = require("@discordjs/voice"); } = require("@discordjs/voice");
const { createDiscordJSAdapter } = require("../utils/adapter");
module.exports = { module.exports = {
name: "play", name: "play",
@ -92,7 +91,7 @@ module.exports = {
radio.station = station; radio.station = station;
radio.textChannel = interaction.channel; radio.textChannel = interaction.channel;
play(interaction, interaction.guild, client, url); play(interaction, interaction.guild, client, url, Discord);
return; return;
} }
@ -101,6 +100,7 @@ module.exports = {
textChannel: interaction.channel, textChannel: interaction.channel,
voiceChannel: voiceChannel, voiceChannel: voiceChannel,
connection: null, connection: null,
message: null,
audioPlayer: createAudioPlayer(), audioPlayer: createAudioPlayer(),
station: station station: station
}; };
@ -112,12 +112,12 @@ module.exports = {
joinVoiceChannel({ joinVoiceChannel({
channelId: voiceChannel.id, channelId: voiceChannel.id,
guildId: voiceChannel.guild.id, guildId: voiceChannel.guild.id,
adapterCreator: createDiscordJSAdapter(voiceChannel) adapterCreator: voiceChannel.guild.voiceAdapterCreator
}); });
construct.connection = connection; construct.connection = connection;
let date = new Date(); let date = new Date();
construct.startTime = date.getTime(); construct.startTime = date.getTime();
play(interaction, interaction.guild, client, url); play(interaction, interaction.guild, client, url, Discord);
client.datastore.checkEntry(interaction.guild.id); client.datastore.checkEntry(interaction.guild.id);
construct.currentGuild = client.datastore.getEntry(interaction.guild.id); construct.currentGuild = client.datastore.getEntry(interaction.guild.id);
@ -136,7 +136,7 @@ module.exports = {
} }
}; };
function play(interaction, guild, client, url) { async function play(interaction, guild, client, url, Discord) {
let message = {}; let message = {};
const radio = client.radio.get(guild.id); const radio = client.radio.get(guild.id);
const resource = createAudioResource(url); const resource = createAudioResource(url);
@ -163,8 +163,32 @@ function play(interaction, guild, client, url) {
return interaction.reply(client.messages.errorPlaying); return interaction.reply(client.messages.errorPlaying);
}); });
message.play = client.messages.play.replace("%radio.station.name%", radio.station.name); message.nowplayingDescription = client.messages.nowplayingDescription.replace("%radio.station.name%", radio.station.name);
interaction.reply(client.messageEmojis["play"] + message.play); message.nowplayingDescription = message.nowplayingDescription.replace("%radio.station.owner%", radio.station.owner);
message.nowplayingDescription = message.nowplayingDescription.replace("%client.funcs.msToTime(completed)%", "--:--");
const embed = new Discord.MessageEmbed()
.setTitle("RadioX")
.setThumbnail("https://cdn.discordapp.com/emojis/" + client.messageEmojis["play"].replace(/[^0-9]+/g, ''))
.setColor(client.config.embedColor)
.setDescription(message.nowplayingDescription)
.setFooter(client.messages.footerText, "https://cdn.discordapp.com/emojis/" + client.messageEmojis["eximiabots"].replace(/[^0-9]+/g, ''));
if(!radio.message){
radio.message = await radio.textChannel.send({ embeds: [embed] });
} else {
radio.message.edit({ embeds: [embed] });
}
setTimeout(function() {
message.play = client.messages.play.replace("%radio.station.name%", radio.station.name);
interaction.reply({
content: client.messageEmojis["play"] + message.play,
ephemeral: true
});
}, 1500)
} }
function searchStation(key, client) { function searchStation(key, client) {

View File

@ -2,7 +2,6 @@ const {
getVoiceConnection, getVoiceConnection,
joinVoiceChannel joinVoiceChannel
} = require("@discordjs/voice"); } = require("@discordjs/voice");
const { createDiscordJSAdapter } = require("../utils/adapter");
module.exports = { module.exports = {
name: "voiceStateUpdate", name: "voiceStateUpdate",
@ -30,7 +29,7 @@ module.exports = {
radio.connection = joinVoiceChannel({ radio.connection = joinVoiceChannel({
channelId: oldState.channel.id, channelId: oldState.channel.id,
guildId: oldState.channel.guild.id, guildId: oldState.channel.guild.id,
adapterCreator: createDiscordJSAdapter(oldState.channel) adapterCreator: oldState.channel.guild.voiceAdapterCreator
}) })
//radio.connection = await oldState.channel.join() //radio.connection = await oldState.channel.join()
), ),

View File

@ -1,70 +0,0 @@
import { DiscordGatewayAdapterCreator, DiscordGatewayAdapterLibraryMethods } from '@discordjs/voice';
import { VoiceChannel, Snowflake, Client, Constants, WebSocketShard, Guild, StageChannel } from 'discord.js';
import { GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateDispatchData } from 'discord-api-types/v9';
const adapters = new Map<Snowflake, DiscordGatewayAdapterLibraryMethods>();
const trackedClients = new Set<Client>();
/**
* Tracks a Discord.js client, listening to VOICE_SERVER_UPDATE and VOICE_STATE_UPDATE events.
* @param client - The Discord.js Client to track
*/
function trackClient(client: Client) {
if (trackedClients.has(client)) return;
trackedClients.add(client);
client.ws.on(Constants.WSEvents.VOICE_SERVER_UPDATE, (payload: GatewayVoiceServerUpdateDispatchData) => {
adapters.get(payload.guild_id)?.onVoiceServerUpdate(payload);
});
client.ws.on(Constants.WSEvents.VOICE_STATE_UPDATE, (payload: GatewayVoiceStateUpdateDispatchData) => {
if (payload.guild_id && payload.session_id && payload.user_id === client.user?.id) {
adapters.get(payload.guild_id)?.onVoiceStateUpdate(payload);
}
});
}
const trackedGuilds = new Map<WebSocketShard, Set<Snowflake>>();
function cleanupGuilds(shard: WebSocketShard) {
const guilds = trackedGuilds.get(shard);
if (guilds) {
for (const guildID of guilds.values()) {
adapters.get(guildID)?.destroy();
}
}
}
function trackGuild(guild: Guild) {
let guilds = trackedGuilds.get(guild.shard);
if (!guilds) {
const cleanup = () => cleanupGuilds(guild.shard);
guild.shard.on('close', cleanup);
guild.shard.on('destroyed', cleanup);
guilds = new Set();
trackedGuilds.set(guild.shard, guilds);
}
guilds.add(guild.id);
}
/**
* Creates an adapter for a Voice Channel
* @param channel - The channel to create the adapter for
*/
export function createDiscordJSAdapter(channel: VoiceChannel | StageChannel): DiscordGatewayAdapterCreator {
return (methods) => {
adapters.set(channel.guild.id, methods);
trackClient(channel.client);
trackGuild(channel.guild);
return {
sendPayload(data) {
if (channel.guild.shard.status === Constants.Status.READY) {
channel.guild.shard.send(data);
return true;
}
return false;
},
destroy() {
return adapters.delete(channel.guild.id);
},
};
};
}