forked from ChrisChrome/weather-bot
Add ability to pause/unpause streams
This commit is contained in:
parent
ede9be2509
commit
73125f06e7
50
index.js
50
index.js
|
@ -117,7 +117,7 @@ function getWFOByRoom(room) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Voice funcs
|
// Voice funcs
|
||||||
function JoinChannel(channel, track, volume) {
|
function JoinChannel(channel, track, volume, message) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
connection = dVC.joinVoiceChannel({
|
connection = dVC.joinVoiceChannel({
|
||||||
channelId: channel.id,
|
channelId: channel.id,
|
||||||
|
@ -129,10 +129,10 @@ function JoinChannel(channel, track, volume) {
|
||||||
|
|
||||||
resource = dVC.createAudioResource(track, { inlineVolume: true, silencePaddingFrames: 5 });
|
resource = dVC.createAudioResource(track, { inlineVolume: true, silencePaddingFrames: 5 });
|
||||||
player = dVC.createAudioPlayer();
|
player = dVC.createAudioPlayer();
|
||||||
|
connection.player = player; // So we can access it later to pause/play/stop etc
|
||||||
resource.volume.setVolume(2);
|
resource.volume.setVolume(2);
|
||||||
connection.subscribe(player)
|
connection.subscribe(player)
|
||||||
player.play(resource);
|
player.play(resource);
|
||||||
|
|
||||||
connection.on(dVC.VoiceConnectionStatus.Ready, () => { player.play(resource); })
|
connection.on(dVC.VoiceConnectionStatus.Ready, () => { player.play(resource); })
|
||||||
connection.on(dVC.VoiceConnectionStatus.Disconnected, async (oldState, newState) => {
|
connection.on(dVC.VoiceConnectionStatus.Disconnected, async (oldState, newState) => {
|
||||||
try {
|
try {
|
||||||
|
@ -147,15 +147,17 @@ function JoinChannel(channel, track, volume) {
|
||||||
});
|
});
|
||||||
player.on('error', error => {
|
player.on('error', error => {
|
||||||
console.error(`Error: ${error.message} with resource ${error.resource.metadata.title}`);
|
console.error(`Error: ${error.message} with resource ${error.resource.metadata.title}`);
|
||||||
resolve({status:false, message: error.message});
|
message.channel.send(`Error while streaming. Stopping for now.`);
|
||||||
player.stop();
|
player.stop();
|
||||||
});
|
});
|
||||||
player.on(dVC.AudioPlayerStatus.Playing, () => {
|
player.on(dVC.AudioPlayerStatus.Playing, () => {
|
||||||
resolve({status:true, message: "Playing..."})
|
resolve({status:true, message: "Playing"})
|
||||||
|
message.channel.send(`Playing stream in <#${channel.id}>`);
|
||||||
|
connection.paused = false;
|
||||||
});
|
});
|
||||||
player.on('idle', () => {
|
player.on('idle', () => {
|
||||||
resolve({status:true, message: "Idle"})
|
resolve({status:true, message: "Idle"})
|
||||||
connection.destroy();
|
message.channel.send(`Stream idle.`);
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -172,6 +174,27 @@ function LeaveVoiceChannel(channel) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function toggleVoicePause(channel) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const connection = dVC.getVoiceConnection(channel.guild.id);
|
||||||
|
if (connection) {
|
||||||
|
if (connection.paused) {
|
||||||
|
connection.player.unpause();
|
||||||
|
connection.paused = false;
|
||||||
|
resolve(true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
connection.player.pause();
|
||||||
|
connection.paused = true;
|
||||||
|
resolve(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
resolve(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
const xmpp = client({
|
const xmpp = client({
|
||||||
service: "xmpp://conference.weather.im",
|
service: "xmpp://conference.weather.im",
|
||||||
|
@ -480,6 +503,11 @@ discord.on('ready', async () => {
|
||||||
"required": true
|
"required": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pause",
|
||||||
|
"description": "Pause/Unpause the current stream",
|
||||||
|
"type": 1
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -757,7 +785,17 @@ discord.on("interactionCreate", async (interaction) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case "pause": // Pause/unpause stream
|
||||||
|
channel = interaction.member.voice.channel;
|
||||||
|
if (!channel) return interaction.reply({ content: "You need to be in a voice channel", ephemeral: true });
|
||||||
|
toggleVoicePause(channel).then((res) => {
|
||||||
|
if (res) {
|
||||||
|
interaction.reply({ content: "Toggled pause", ephemeral: true });
|
||||||
|
} else {
|
||||||
|
interaction.reply({ content: "Failed to toggle pause", ephemeral: true });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Discord.InteractionType.MessageComponent:
|
case Discord.InteractionType.MessageComponent:
|
||||||
|
|
Loading…
Reference in a new issue