mirror of
https://github.com/informaticker/discord-jellyfin-bot.git
synced 2024-11-23 18:21:55 +01:00
put api client back to node modules and added some things
This commit is contained in:
parent
6d1ac84be0
commit
5a8ab5dc26
17
index.js
17
index.js
@ -1,17 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
const DISCORD = require('discord.js');
|
|
||||||
|
|
||||||
const JELLYFIN_CLIENT = require('jellyfin-apiclient');
|
|
||||||
|
|
||||||
const CONFIG = require('./config.json');
|
|
||||||
|
|
||||||
|
|
||||||
const DISCORD_CLIENT = new DISCORD.Client();
|
|
||||||
|
|
||||||
client.on('ready', () => {
|
|
||||||
console.log('connected to Discord');
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
client.login('your token here');
|
|
@ -1,13 +0,0 @@
|
|||||||
# Jellyfin Contributors
|
|
||||||
|
|
||||||
- [thornbill](https://github.com/thornbill)
|
|
||||||
- [cvium](https://github.com/cvium)
|
|
||||||
- [Oddstr13](https://github.com/oddstr13)
|
|
||||||
- [Andrei Oanca](https://github.com/OancaAndrei)
|
|
||||||
|
|
||||||
# Emby Contributors
|
|
||||||
|
|
||||||
- [LukePulverenti](https://github.com/LukePulverenti)
|
|
||||||
- [ebr11](https://github.com/ebr11)
|
|
||||||
- [softworkz](https://github.com/softworkz)
|
|
||||||
- [HazCod](https://github.com/HazCod)
|
|
@ -1,22 +0,0 @@
|
|||||||
The MIT License
|
|
||||||
|
|
||||||
Copyright (c) Emby https://emby.media
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
@ -1,71 +0,0 @@
|
|||||||
<h1 align="center">Jellyfin API Client for JavaScript</h1>
|
|
||||||
<h3 align="center">Part of the <a href="https://jellyfin.media">Jellyfin Project</a></h3>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<img alt="Logo Banner" src="https://raw.githubusercontent.com/jellyfin/jellyfin-ux/master/branding/SVG/banner-logo-solid.svg?sanitize=true"/>
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<a href="https://github.com/jellyfin/jellyfin-apiclient-javascript">
|
|
||||||
<img alt="MIT License" src="https://img.shields.io/github/license/jellyfin/jellyfin-apiclient-javascript.svg"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://opencollective.com/jellyfin">
|
|
||||||
<img alt="Donate" src="https://img.shields.io/opencollective/all/jellyfin.svg?label=backers"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://features.jellyfin.org">
|
|
||||||
<img alt="Feature Requests" src="https://img.shields.io/badge/fider-vote%20on%20features-success.svg"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://forum.jellyfin.org">
|
|
||||||
<img alt="Discuss on our Forum" src="https://img.shields.io/discourse/https/forum.jellyfin.org/users.svg"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://matrix.to/#/+jellyfin:matrix.org">
|
|
||||||
<img alt="Chat on Matrix" src="https://img.shields.io/matrix/jellyfin:matrix.org.svg?logo=matrix"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://www.reddit.com/r/jellyfin">
|
|
||||||
<img alt="Join our Subreddit" src="https://img.shields.io/badge/reddit-r%2Fjellyfin-%23FF5700.svg"/>
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
This library is meant to help clients written in JavaScript or TypeScript interact with Jellyfin's REST API.
|
|
||||||
|
|
||||||
## Compatibility
|
|
||||||
|
|
||||||
This library depends on the Fetch and Promise APIs. These will be expected to be polyfilled if used in a browser that doesn't support them.
|
|
||||||
|
|
||||||
## Build Process
|
|
||||||
|
|
||||||
### Dependencies
|
|
||||||
|
|
||||||
- Yarn
|
|
||||||
|
|
||||||
### Getting Started
|
|
||||||
|
|
||||||
1. Clone or download this repository
|
|
||||||
|
|
||||||
```sh
|
|
||||||
git clone https://github.com/jellyfin/jellyfin-apiclient-javascript.git
|
|
||||||
cd jellyfin-apiclient-javascript
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Install build dependencies in the project directory
|
|
||||||
|
|
||||||
```sh
|
|
||||||
yarn install
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Build the library for production
|
|
||||||
|
|
||||||
```sh
|
|
||||||
yarn build
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Build the library for development
|
|
||||||
|
|
||||||
```sh
|
|
||||||
yarn dev
|
|
||||||
```
|
|
||||||
|
|
||||||
## Building Documentation
|
|
||||||
|
|
||||||
This library is documented using [JSDoc](https://jsdoc.app/) style comments. Documentation can be generated in HTML format by running `yarn docs` and viewing the files in any modern browser. The resulting documentation will be saved in the `docs` directory.
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,2 +0,0 @@
|
|||||||
// Add fetch polyfill for jest
|
|
||||||
import 'isomorphic-fetch';
|
|
@ -1,90 +0,0 @@
|
|||||||
{
|
|
||||||
"_from": "jellyfin-apiclient",
|
|
||||||
"_id": "jellyfin-apiclient@1.4.1",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-BTTRucQ4tCLyiZ9kR9nAoxqxYp5/z+MCzkayy9vmMZ5C7jlVVsnxAXuuZjoa+AgXMjohXcM5Ci54myfJM1pRkA==",
|
|
||||||
"_location": "/jellyfin-apiclient",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "tag",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "jellyfin-apiclient",
|
|
||||||
"name": "jellyfin-apiclient",
|
|
||||||
"escapedName": "jellyfin-apiclient",
|
|
||||||
"rawSpec": "",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "latest"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"#USER",
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/jellyfin-apiclient/-/jellyfin-apiclient-1.4.1.tgz",
|
|
||||||
"_shasum": "5e544a19bc001b16669eb7ecf46bb7d652365e41",
|
|
||||||
"_spec": "jellyfin-apiclient",
|
|
||||||
"_where": "/home/kilian/Documents/GitTests/Jellyfin/jellyfin-discord-music-bot",
|
|
||||||
"author": "",
|
|
||||||
"browserslist": [
|
|
||||||
"last 2 Firefox versions",
|
|
||||||
"last 2 Chrome versions",
|
|
||||||
"last 2 ChromeAndroid versions",
|
|
||||||
"last 2 Safari versions",
|
|
||||||
"last 2 iOS versions",
|
|
||||||
"last 2 Edge versions",
|
|
||||||
"Chrome 27",
|
|
||||||
"Chrome 38",
|
|
||||||
"Chrome 47",
|
|
||||||
"Chrome 53",
|
|
||||||
"Chrome 56",
|
|
||||||
"Chrome 63",
|
|
||||||
"Firefox ESR"
|
|
||||||
],
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/jellyfin/jellyfin-apiclient-javascript/issues"
|
|
||||||
},
|
|
||||||
"bundleDependencies": false,
|
|
||||||
"dependencies": {},
|
|
||||||
"deprecated": false,
|
|
||||||
"description": "API client for Jellyfin",
|
|
||||||
"devDependencies": {
|
|
||||||
"@babel/core": "^7.9.6",
|
|
||||||
"@babel/preset-env": "^7.9.6",
|
|
||||||
"@types/jest": "^25.2.1",
|
|
||||||
"@types/node": "^13.13.5",
|
|
||||||
"@typescript-eslint/eslint-plugin": "^2.31.0",
|
|
||||||
"@typescript-eslint/parser": "^2.31.0",
|
|
||||||
"babel-loader": "^8.0.5",
|
|
||||||
"eslint": "^6.8.0",
|
|
||||||
"eslint-plugin-import": "^2.20.2",
|
|
||||||
"eslint-plugin-jest": "^23.9.0",
|
|
||||||
"eslint-plugin-promise": "^4.2.1",
|
|
||||||
"isomorphic-fetch": "^2.2.1",
|
|
||||||
"jest": "^26.0.1",
|
|
||||||
"jest-junit": "^10.0.0",
|
|
||||||
"jsdoc": "^3.6.4",
|
|
||||||
"prettier": "2.0.5",
|
|
||||||
"source-map-loader": "^0.2.4",
|
|
||||||
"ts-jest": "^25.5.0",
|
|
||||||
"ts-loader": "^7.0.3",
|
|
||||||
"typescript": "^3.8.3",
|
|
||||||
"webpack": "^4.43.0",
|
|
||||||
"webpack-cli": "^3.2.1"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/jellyfin/jellyfin-apiclient-javascript#readme",
|
|
||||||
"license": "MIT",
|
|
||||||
"main": "dist/jellyfin-apiclient.js",
|
|
||||||
"name": "jellyfin-apiclient",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/jellyfin/jellyfin-apiclient-javascript.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"build": "webpack --mode production",
|
|
||||||
"dev": "webpack --mode development",
|
|
||||||
"docs": "jsdoc src -r -R README.md -d docs",
|
|
||||||
"lint": "eslint \"src\"",
|
|
||||||
"prepare": "webpack",
|
|
||||||
"test": "jest"
|
|
||||||
},
|
|
||||||
"version": "1.4.1"
|
|
||||||
}
|
|
12
package.json
12
package.json
@ -2,9 +2,11 @@
|
|||||||
"name": "jellyfin-discord-music-bot",
|
"name": "jellyfin-discord-music-bot",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"description": "A Discord Music Bot for the Jellyfin Media Server",
|
"description": "A Discord Music Bot for the Jellyfin Media Server",
|
||||||
"main": "index.js",
|
"main": "src/index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
|
"start": "node src/index.js",
|
||||||
|
"postinstall": "npx patch-package"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -24,6 +26,10 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@discordjs/opus": "^0.3.2",
|
"@discordjs/opus": "^0.3.2",
|
||||||
"discord.js": "^12.3.1",
|
"discord.js": "^12.3.1",
|
||||||
"jellyfin-apiclient": "^1.4.1"
|
"jellyfin-apiclient": "^1.4.1",
|
||||||
|
"node-fetch": "^2.6.0",
|
||||||
|
"nodejs": "0.0.0",
|
||||||
|
"window": "^4.2.7",
|
||||||
|
"ytdl-core": "^3.2.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
11
patches/jellyfin-apiclient+1.4.1.patch
Normal file
11
patches/jellyfin-apiclient+1.4.1.patch
Normal file
File diff suppressed because one or more lines are too long
31
src/index.js
Normal file
31
src/index.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
|
||||||
|
const CONFIG = require('../config.json');
|
||||||
|
|
||||||
|
const jellyfinClientManager=require('./jellyfinclientmanager');
|
||||||
|
|
||||||
|
const discordclientmanager= require('./discordclientmanager');
|
||||||
|
discordclientmanager.init();
|
||||||
|
const discordClient=discordclientmanager.getDiscordClient();
|
||||||
|
|
||||||
|
const {audioDispatcher} = require('./dispachermanager');
|
||||||
|
const {handleChannelMessage}=require('./messagehandler');
|
||||||
|
|
||||||
|
jellyfinClientManager.init();
|
||||||
|
jellyfinClientManager.getJellyfinClient().getPublicSystemInfo().then((response) => {
|
||||||
|
|
||||||
|
jellyfinClientManager.getJellyfinClient().authenticateUserByName(CONFIG["jellyfin-username"],CONFIG["jellyfin-password"]).then((response)=>{
|
||||||
|
console.log(response)
|
||||||
|
jellyfinClientManager.getJellyfinClient().setAuthenticationInfo(response.AccessToken, response.SessionInfo.UserId);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
|
discordClient.on('ready', () => {
|
||||||
|
console.log('connected to Discord');
|
||||||
|
});
|
||||||
|
|
||||||
|
discordClient.on('message', message => {
|
||||||
|
handleChannelMessage(message);
|
||||||
|
});
|
||||||
|
|
||||||
|
discordClient.login(CONFIG.token);
|
19
src/jellyfinclientmanager.js
Normal file
19
src/jellyfinclientmanager.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
const { ApiClient } = require('jellyfin-apiclient');
|
||||||
|
const CONFIG = require('../config.json');
|
||||||
|
const os = require('os');
|
||||||
|
|
||||||
|
var jellyfinClient;
|
||||||
|
|
||||||
|
function init(){
|
||||||
|
jellyfinClient = new ApiClient(CONFIG["server-adress"], CONFIG["jellyfin-app-name"], "0.0.1", os.hostname(), os.hostname());
|
||||||
|
}
|
||||||
|
|
||||||
|
function getJellyfinClient(){
|
||||||
|
return jellyfinClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
getJellyfinClient,
|
||||||
|
init
|
||||||
|
}
|
@ -1,74 +1,146 @@
|
|||||||
const CONFIG = require('../config.json');
|
const CONFIG = require('../config.json');
|
||||||
|
|
||||||
const Discord = require('discord.js');
|
const Discord = require('discord.js');
|
||||||
|
const {
|
||||||
|
checkJellyfinItemIDRegex
|
||||||
|
} = require('./util');
|
||||||
const {
|
const {
|
||||||
getAudioDispatcher,
|
getAudioDispatcher,
|
||||||
setAudioDispatcher
|
setAudioDispatcher
|
||||||
} = require('./dispachermanager');
|
} = require('./dispachermanager');
|
||||||
|
|
||||||
const discordclientmanager = require('./discordclientmanager');
|
const discordclientmanager = require('./discordclientmanager');
|
||||||
|
const jellyfinClientManager = require('./jellyfinclientmanager');
|
||||||
const discordClient = discordclientmanager.getDiscordClient();
|
const discordClient = discordclientmanager.getDiscordClient();
|
||||||
|
|
||||||
|
|
||||||
|
var isSummendByPlay = false;
|
||||||
|
|
||||||
|
|
||||||
//random Color of the Jellyfin Logo Gradient
|
//random Color of the Jellyfin Logo Gradient
|
||||||
function getRandomDiscordColor() {
|
function getRandomDiscordColor() {
|
||||||
function randomNumber(b,a){
|
function randomNumber(b, a) {
|
||||||
return Math.floor((Math.random()*Math.pow(Math.pow((b-a),2),1/2))+(b>a?a:b))
|
return Math.floor((Math.random() * Math.pow(Math.pow((b - a), 2), 1 / 2)) + (b > a ? a : b))
|
||||||
}
|
}
|
||||||
|
|
||||||
const GRANDIENT_START='#AA5CC3';
|
const GRANDIENT_START = '#AA5CC3';
|
||||||
const GRANDIENT_END='#00A4DC';
|
const GRANDIENT_END = '#00A4DC';
|
||||||
|
|
||||||
let rS=GRANDIENT_START.slice(1,3);
|
let rS = GRANDIENT_START.slice(1, 3);
|
||||||
let gS=GRANDIENT_START.slice(3,5);
|
let gS = GRANDIENT_START.slice(3, 5);
|
||||||
let bS=GRANDIENT_START.slice(5,7);
|
let bS = GRANDIENT_START.slice(5, 7);
|
||||||
rS=parseInt(rS,16);
|
rS = parseInt(rS, 16);
|
||||||
gS=parseInt(gS,16);
|
gS = parseInt(gS, 16);
|
||||||
bS=parseInt(bS,16);
|
bS = parseInt(bS, 16);
|
||||||
|
|
||||||
let rE=GRANDIENT_END.slice(1,3);
|
let rE = GRANDIENT_END.slice(1, 3);
|
||||||
let gE=GRANDIENT_END.slice(3,5);
|
let gE = GRANDIENT_END.slice(3, 5);
|
||||||
let bE=GRANDIENT_END.slice(5,7);
|
let bE = GRANDIENT_END.slice(5, 7);
|
||||||
rE=parseInt(rE,16);
|
rE = parseInt(rE, 16);
|
||||||
gE=parseInt(gE,16);
|
gE = parseInt(gE, 16);
|
||||||
bE=parseInt(bE,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));
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function summon(voiceChannel){
|
||||||
|
|
||||||
|
if (!voiceChannel) {
|
||||||
|
return message.reply('please join a voice channel to summon me!');
|
||||||
|
}
|
||||||
|
|
||||||
|
voiceChannel.join()
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleChannelMessage(message) {
|
function handleChannelMessage(message) {
|
||||||
getRandomDiscordColor()
|
getRandomDiscordColor()
|
||||||
|
|
||||||
if (message.content.startsWith(CONFIG["discord-prefix"] + 'summon')) {
|
if (message.content.startsWith(CONFIG["discord-prefix"] + 'summon')) {
|
||||||
if (message.channel.type === 'dm') {
|
if (message.channel.type === 'dm') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const voiceChannel = message.member.voice.channel;
|
summon(message.member.voice.channel);
|
||||||
|
|
||||||
|
|
||||||
if (!voiceChannel) {
|
|
||||||
return message.reply('please join a voice channel to summon me!');
|
|
||||||
}
|
|
||||||
|
|
||||||
voiceChannel.join().then(connection => {
|
|
||||||
const stream = `${CONFIG['server-adress']}/Audio/0751d668d58afb25b755eca639c498ed/universal?UserId=d5ed94520ff542378b368246683ff9de&DeviceId=Jellyfin%20Discord%20Music%20Bot&MaxStreamingBitrate=320000&Container=opus&AudioCodec=opus&api_key=${CONFIG["jellyfin-api-key"]}&TranscodingContainer=ts&TranscodingProtocol=hls`;
|
|
||||||
setAudioDispatcher(connection.play(stream));
|
|
||||||
});
|
|
||||||
} else if (message.content.startsWith(CONFIG["discord-prefix"] + 'disconnect')) {
|
} else if (message.content.startsWith(CONFIG["discord-prefix"] + 'disconnect')) {
|
||||||
discordClient.user.client.voice.connections.forEach((element) => {
|
discordClient.user.client.voice.connections.forEach((element) => {
|
||||||
element.disconnect();
|
element.disconnect();
|
||||||
});
|
});
|
||||||
} else if (message.content.startsWith(CONFIG["discord-prefix"] + 'pause')) {
|
|
||||||
|
|
||||||
|
} else if ((message.content.startsWith(CONFIG["discord-prefix"] + 'pause')) || (message.content.startsWith(CONFIG["discord-prefix"] + 'resume'))) {
|
||||||
if (getAudioDispatcher() !== undefined) {
|
if (getAudioDispatcher() !== undefined) {
|
||||||
if (getAudioDispatcher().paused)
|
if (getAudioDispatcher().paused)
|
||||||
getAudioDispatcher().resume();
|
getAudioDispatcher().resume();
|
||||||
else
|
else
|
||||||
getAudioDispatcher().pause(true);
|
getAudioDispatcher().pause(true);
|
||||||
} else {
|
} else {
|
||||||
console.log("WHYYYYYYY")
|
message.reply("there is nothing playing!")
|
||||||
console.log(getAudioDispatcher());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} else if (message.content.startsWith(CONFIG["discord-prefix"] + 'play')) {
|
||||||
|
|
||||||
|
|
||||||
|
if (discordClient.user.client.voice.connections.size < 1) {
|
||||||
|
discordClient.user.client.voice.connections.size
|
||||||
|
summon(message.member.voice.channel)
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
discordClient.user.client.voice.connections.forEach((element) => {
|
||||||
|
let stream = `${jellyfinClientManager.getJellyfinClient().serverAddress()}/Audio/${itemID}/universal?UserId=${jellyfinClientManager.getJellyfinClient().getCurrentUserId()}&DeviceId=${jellyfinClientManager.getJellyfinClient().deviceId()}&MaxStreamingBitrate=${element.channel.bitrate.toString()}&Container=opus&AudioCodec=opus&api_key=${jellyfinClientManager.getJellyfinClient().accessToken()}&TranscodingContainer=ts&TranscodingProtocol=hls`;
|
||||||
|
setAudioDispatcher(element.play(stream));
|
||||||
|
element.on("error", (error) => {
|
||||||
|
console.error(error);
|
||||||
|
})
|
||||||
|
getAudioDispatcher().on("finish",()=>{
|
||||||
|
if(isSummendByPlay){
|
||||||
|
element.disconnect();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
playThis();
|
||||||
|
|
||||||
|
} else if (message.content.startsWith(CONFIG["discord-prefix"] + 'stop')) {
|
||||||
|
getAudioDispatcher().pause()
|
||||||
|
setAudioDispatcher(undefined)
|
||||||
|
|
||||||
|
|
||||||
} else if (message.content.startsWith(CONFIG["discord-prefix"] + 'help')) {
|
} else if (message.content.startsWith(CONFIG["discord-prefix"] + 'help')) {
|
||||||
const reply = new Discord.MessageEmbed()
|
const reply = new Discord.MessageEmbed()
|
||||||
.setColor(getRandomDiscordColor())
|
.setColor(getRandomDiscordColor())
|
||||||
|
8
src/util.js
Normal file
8
src/util.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
function checkJellyfinItemIDRegex(strgintomatch){
|
||||||
|
let regexresult=strgintomatch.match(/([0-9]|[a-f]){32}/);
|
||||||
|
return regexresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports={
|
||||||
|
checkJellyfinItemIDRegex
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user