discord-jellyfin-bot/src/messagehandler.js

171 lines
5.4 KiB
JavaScript
Raw Normal View History

const CONFIG = require('../config.json');
const Discord = require('discord.js');
const {
checkJellyfinItemIDRegex
} = require('./util');
2020-09-05 08:59:09 +02:00
const {
getAudioDispatcher
2020-09-05 08:59:09 +02:00
} = require('./dispachermanager');
const discordclientmanager = require('./discordclientmanager');
const jellyfinClientManager = require('./jellyfinclientmanager');
const playbackmanager = require('./playbackmanager');
const websocketHanler = require('./websockethandler');
2020-09-05 08:59:09 +02:00
const discordClient = discordclientmanager.getDiscordClient();
var isSummendByPlay = false;
2020-09-05 08:59:09 +02:00
//random Color of the Jellyfin Logo Gradient
function getRandomDiscordColor() {
function randomNumber(b, a) {
return Math.floor((Math.random() * Math.pow(Math.pow((b - a), 2), 1 / 2)) + (b > a ? a : b))
2020-09-05 08:59:09 +02:00
}
const GRANDIENT_START = '#AA5CC3';
const GRANDIENT_END = '#00A4DC';
let rS = GRANDIENT_START.slice(1, 3);
let gS = GRANDIENT_START.slice(3, 5);
let bS = GRANDIENT_START.slice(5, 7);
rS = parseInt(rS, 16);
gS = parseInt(gS, 16);
bS = parseInt(bS, 16);
let rE = GRANDIENT_END.slice(1, 3);
let gE = GRANDIENT_END.slice(3, 5);
let bE = GRANDIENT_END.slice(5, 7);
rE = parseInt(rE, 16);
gE = parseInt(gE, 16);
bE = parseInt(bE, 16);
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));
}
async function searchForItemID(searchString) {
let response = await jellyfinClientManager.getJellyfinClient().getSearchHints({
searchTerm: searchString,
includeItemTypes: "Audio"
})
if (response.TotalRecordCount < 1) {
throw "Found no Song"
} else {
return response.SearchHints[0].ItemId
}
}
2020-09-05 08:59:09 +02:00
function summon(voiceChannel){
voiceChannel.join()
}
2020-09-05 08:59:09 +02:00
function summonMessage(message){
if (!message.member.voice.channel) {
message.reply('please join a voice channel to summon me!');
}else if(message.channel.type === 'dm'){
message.reply('no dms')
}
else{
summon(message.member.voice.channel)
}
2020-09-05 08:59:09 +02:00
}
function handleChannelMessage(message) {
getRandomDiscordColor()
if (message.content.startsWith(CONFIG["discord-prefix"] + 'summon')) {
isSummendByPlay = false;
websocketHanler.openSocket();
summonMessage(message);
} else if (message.content.startsWith(CONFIG["discord-prefix"] + 'disconnect')) {
playbackmanager.stop()
jellyfinClientManager.getJellyfinClient().closeWebSocket();
discordClient.user.client.voice.connections.forEach((element) => {
element.disconnect();
});
} else if ((message.content.startsWith(CONFIG["discord-prefix"] + 'pause')) || (message.content.startsWith(CONFIG["discord-prefix"] + 'resume'))) {
2020-09-05 08:59:09 +02:00
if (getAudioDispatcher() !== undefined) {
playbackmanager.playPause();
2020-09-05 08:59:09 +02:00
} else {
message.reply("there is nothing playing!")
}
} else if (message.content.startsWith(CONFIG["discord-prefix"] + 'play')) {
if (discordClient.user.client.voice.connections.size < 1) {
summonMessage(message)
isSummendByPlay=true
}
async function playThis(){
let indexOfItemID = message.content.indexOf(CONFIG["discord-prefix"] + 'play') + (CONFIG["discord-prefix"] + 'play').length + 1;
let argument = message.content.slice(indexOfItemID);
let itemID;
//check if play command was used with itemID
let regexresults = checkJellyfinItemIDRegex(argument);
if (regexresults) {
itemID = regexresults[0];
} else {
try {
itemID = await searchForItemID(argument);
} catch (e) {
message.reply(e);
2020-09-21 04:44:08 +02:00
playbackmanager.stop(discordClient.user.client.voice.connections.first());
return;
}
}
discordClient.user.client.voice.connections.forEach((element) => {
playbackmanager.startPlaying(element,itemID,isSummendByPlay);
})
}
playThis();
} else if (message.content.startsWith(CONFIG["discord-prefix"] + 'stop')) {
if(isSummendByPlay){
if(discordClient.user.client.voice.connections.size > 0){
playbackmanager.stop(discordClient.user.client.voice.connections.first());
}
}else{
playbackmanager.stop();
}
2020-09-05 08:59:09 +02:00
} else if (message.content.startsWith(CONFIG["discord-prefix"] + 'help')) {
const reply = new Discord.MessageEmbed()
2020-09-05 08:59:09 +02:00
.setColor(getRandomDiscordColor())
.addFields({
name: `${CONFIG['discord-prefix']}summon`,
value: 'Join the channel the author of the message'
}, {
name: `${CONFIG['discord-prefix']}disconnect`,
value: 'Disconnect from all current Voice Channels'
}, {
name: `${CONFIG['discord-prefix']}play`,
value: 'Play the following item'
}, {
name: `${CONFIG['discord-prefix']}pause/resume`,
value: 'Pause/Resume audio'
}, {
name: `${CONFIG['discord-prefix']}help`,
value: 'Display this help message'
})
message.channel.send(reply);
}
}
module.exports = {
handleChannelMessage
}