add seek command + update README

This commit is contained in:
KGT1 2020-09-23 17:39:41 +02:00
parent f905d65973
commit db6638724c
4 changed files with 42 additions and 7 deletions

View File

@ -14,12 +14,12 @@ summon | Join the channel the author of the message(now you can cast to the Bot
disconnect | Disconnect from all current Voice Channels
play | Play the following item(can be the name of the song or the Stream URL)
pause/resume | Pause/Resume audio
seek | Where to Seek to in seconds or MM:SS
help | Display the help message
### Limitations
- Playlist (soon)
- Seek to functionality (soon)
- [Playing Video Content](https://support.discord.com/hc/en-us/community/posts/360059238512-Add-Go-Live-support-for-API) (if Discord ever adds this, I'll implement it into this Bot)
## Getting Started

View File

@ -6,6 +6,9 @@ const {
const {
getAudioDispatcher
} = require("./dispachermanager");
const {
hmsToSeconds
} = require("./util");
const discordclientmanager = require("./discordclientmanager");
const jellyfinClientManager = require("./jellyfinclientmanager");
@ -41,6 +44,15 @@ function getRandomDiscordColor () {
return ("#" + ("00" + (randomNumber(rS, rE)).toString(16)).substr(-2) + ("00" + (randomNumber(gS, gE)).toString(16)).substr(-2) + ("00" + (randomNumber(bS, bE)).toString(16)).substr(-2));
}
function getDiscordEmbedError(e){
return new Discord.MessageEmbed()
.setColor(0xff0000)
.setTitle("Error!")
.setTimestamp()
.setDescription("<:x:757935515445231651> " + e);
}
// Song Search, return the song itemID
async function searchForItemID (searchString) {
const response = await jellyfinClientManager.getJellyfinClient().getSearchHints({
@ -100,11 +112,7 @@ async function playThis (message) {
try {
itemID = await searchForItemID(argument);
} catch (e) {
const noSong = new Discord.MessageEmbed()
.setColor(0xff0000)
.setTitle("Error!")
.setTimestamp()
.setDescription("<:x:757935515445231651> " + e);
const noSong = getDiscordEmbedError(e);
message.channel.send(noSong);
playbackmanager.stop(isSummendByPlay?discordClient.user.client.voice.connections.first():undefined);
return;
@ -170,6 +178,15 @@ function handleChannelMessage (message) {
} else {
playbackmanager.stop();
}
} else if (message.content.startsWith(CONFIG["discord-prefix"] + "seek")) {
const indexOfArgument = message.content.indexOf(CONFIG["discord-prefix"] + "seek") + (CONFIG["discord-prefix"] + "seek").length + 1;
const argument = message.content.slice(indexOfArgument);
try {
playbackmanager.seek(hmsToSeconds(argument)*10000000);
} catch (error) {
const errorMessage = getDiscordEmbedError(error);
message.channel.send(errorMessage);
}
} else if (message.content.startsWith(CONFIG["discord-prefix"] + "help")) {
/* eslint-disable quotes */
const reply = new Discord.MessageEmbed()
@ -187,6 +204,9 @@ function handleChannelMessage (message) {
}, {
name: `${CONFIG["discord-prefix"]}pause/resume`,
value: "Pause/Resume audio"
}, {
name: `${CONFIG["discord-prefix"]}seek`,
value: "Where to Seek to in seconds or MM:SS"
}, {
name: `${CONFIG["discord-prefix"]}help`,
value: "Display this help message"

View File

@ -52,6 +52,8 @@ function seek (toSeek = 0) {
if (getAudioDispatcher()) {
startPlaying(undefined, undefined, ticksToSeconds(toSeek), _disconnectOnFinish);
jellyfinClientManager.getJellyfinClient().reportPlaybackProgress(getProgressPayload());
}else{
throw Error("No Song Playing");
}
}

View File

@ -7,7 +7,20 @@ function ticksToSeconds (ticks) {
return ticks / 10000000;
}
function hmsToSeconds(str) {
var p = str.split(':'),
s = 0, m = 1;
while (p.length > 0) {
s += m * parseInt(p.pop(), 10);
m *= 60;
}
return s;
}
module.exports = {
checkJellyfinItemIDRegex,
ticksToSeconds
ticksToSeconds,
hmsToSeconds
};