Add files via upload

This commit is contained in:
2024-07-07 18:48:34 +02:00
committed by GitHub
parent 4ea7a9bf86
commit 5220bf4af4
18 changed files with 3101 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
BSD 3-Clause License
Copyright (c) 2024, Julian Lechner
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+54
View File
@@ -0,0 +1,54 @@
# Discord Audio Stream
[![npm](https://img.shields.io/npm/dw/discord-audio-stream)](http://npmjs.org/package/discord-audio-stream)
![GitHub package.json version](https://img.shields.io/github/package-json/v/FrauJulian/discord-audio-stream)
![GitHub Repo stars](https://img.shields.io/github/stars/FrauJulian/discord-audio-stream?style=social)
<p>This NPM package was created to make it easier to stream audio to Discord.</p>
<p>There is a security feature of discord that stops the stream of audio after some time. This problem can be solved by disconnecting the Discord channel every 1.5 hours for 2 seconds and then reconnecting the channel. (If you use this package!) I recommend using a database to store the data e.g. MySQL, SQLite, json file and other database types.</p>
<p>The package does not fix this error yet. However, it is currently being worked on!</p>
**This module is designed to work with [discord.js](https://discord.js.org/#/) v14. This package doesn't support older versions!**
## 👋 Support
Pease create a bug post on github or write [`fraujulian`](https://discord.com/users/860206216893693973) on discord!
## 📝 Usage
### Install package
```bash
npm i discord-audio-stream
```
or
```bash
yarn add discord-audio-stream
```
### Code Snippet - Start
```js
const Audio = require("discord-audio-stream");
Audio.StreamStart({
imvci: 0, //Voice Channel ID e.g. interaction.member.voice.channel.id
igi: 0, //Guild ID e.g. interaction.guild.id
igv: 0, //Bot Voice Adapter e.g. interaction.guild.voiceAdapterCreator
type: "", //Choose the Stream resource - File or Link or Analyze
Resource: "", //Link to File e.g. ../assets/Stream.mp3 or Link to Audio Stream
})
```
### Code Snippet - Stop
```js
const Audio = require("discord-audio-stream");
Audio.StreamStart({
igi: 0, //Guild ID e.g. interaction.guild.id
})
```
## 🤝 Enjoy the package?
Give it a star ⭐ on [github](https://github.com/FrauJulian/discord-audio-stream) or [donate](https://buymeacoffee.com/fraujuliannn) a hot chocolate!
+17
View File
@@ -0,0 +1,17 @@
type startParameters = {
imvci: number;
igi: number;
igv: number;
type: string;
Resource: string;
};
type stopParameter = {
igi: number;
};
declare function start({ imvci, igi, igv, type, Resource, }: startParameters): void;
declare function stop({ igi, }: stopParameter): void;
export { start, stop };
+17
View File
@@ -0,0 +1,17 @@
type startParameters = {
imvci: number;
igi: number;
igv: number;
type: string;
Resource: string;
};
type stopParameter = {
igi: number;
};
declare function start({ imvci, igi, igv, type, Resource, }: startParameters): void;
declare function stop({ igi, }: stopParameter): void;
export { start, stop };
+128
View File
@@ -0,0 +1,128 @@
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
start: () => start,
stop: () => stop
});
module.exports = __toCommonJS(src_exports);
// src/utility/errorFunc.ts
function ERR(err) {
console.error(" ");
console.error(" ______ _____ _____ ____ _____ \r\n | ____| __ \\| __ \\ / __ \\| __ \\ \r\n | |__ | |__) | |__) | | | | |__) |\r\n | __| | _ /| _ /| | | | _ / \r\n | |____| | \\ \\| | \\ \\| |__| | | \\ \\ \r\n |______|_| \\_\\_| \\_\\\\____/|_| \\_\\");
console.error(" ");
console.error("This error comes from the discord-audio-stream package!");
console.error("This error occurs if you are not using the package correctly, sometimes it can also be bugs in the package.");
console.error(" ");
console.error("See the docs or open a issue post on github.");
console.error(" ");
if (err) {
console.error(err);
}
}
// src/functions/startFunc.ts
var import_node_path = require("path");
var { joinVoiceChannel, createAudioPlayer, createAudioResource } = require("@discordjs/voice");
function start({
imvci,
igi,
igv,
type,
Resource
}) {
try {
let streamFile2 = function(FILE) {
let Audio = createAudioResource((0, import_node_path.join)(__dirname, FILE), { inlineVolume: true });
AudioPlayer.play(Audio);
joinVoiceChannel({
channelId: imvci,
guildId: igi,
adapterCreator: igv
}).subscribe(AudioPlayer);
}, streamLink2 = function(URL) {
let Audio = createAudioResource(URL);
AudioPlayer.play(Audio);
joinVoiceChannel({
channelId: imvci,
guildId: igi,
adapterCreator: igv
}).subscribe(AudioPlayer);
}, LinkValidation2 = function(URL) {
var URLPattern = new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$", "i");
return URLPattern.test(URL);
}, FileValidation2 = function(FILE) {
var FILEPattern = new RegExp("^(.+)/([^/]+)$");
return FILEPattern.test(FILE);
};
var streamFile = streamFile2, streamLink = streamLink2, LinkValidation = LinkValidation2, FileValidation = FileValidation2;
const AudioPlayer = createAudioPlayer();
switch (type) {
case "Link":
if (LinkValidation2(Resource) === true && FileValidation2(Resource) === false) {
streamLink2(Resource);
} else {
ERR();
}
break;
case "File":
if (LinkValidation2(Resource) === false && FileValidation2(Resource) === true) {
streamFile2(Resource);
} else {
ERR();
}
break;
case "Analyze":
if (LinkValidation2(Resource) === true && FileValidation2(Resource) === false) {
streamLink2(Resource);
} else if (LinkValidation2(Resource) === false && FileValidation2(Resource) === true) {
streamFile2(Resource);
} else {
ERR();
}
break;
default:
ERR();
break;
}
} catch (err) {
ERR(err);
}
}
// src/functions/stopFunc.ts
var { getVoiceConnection } = require("@discordjs/voice");
function stop({
igi
}) {
try {
const connection = getVoiceConnection(igi);
connection.destroy();
} catch (err) {
ERR();
}
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
start,
stop
});
+114
View File
@@ -0,0 +1,114 @@
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
}) : x)(function(x) {
if (typeof require !== "undefined") return require.apply(this, arguments);
throw Error('Dynamic require of "' + x + '" is not supported');
});
// node_modules/tsup/assets/esm_shims.js
import { fileURLToPath } from "url";
import path from "path";
var getFilename = () => fileURLToPath(import.meta.url);
var getDirname = () => path.dirname(getFilename());
var __dirname = /* @__PURE__ */ getDirname();
// src/utility/errorFunc.ts
function ERR(err) {
console.error(" ");
console.error(" ______ _____ _____ ____ _____ \r\n | ____| __ \\| __ \\ / __ \\| __ \\ \r\n | |__ | |__) | |__) | | | | |__) |\r\n | __| | _ /| _ /| | | | _ / \r\n | |____| | \\ \\| | \\ \\| |__| | | \\ \\ \r\n |______|_| \\_\\_| \\_\\\\____/|_| \\_\\");
console.error(" ");
console.error("This error comes from the discord-audio-stream package!");
console.error("This error occurs if you are not using the package correctly, sometimes it can also be bugs in the package.");
console.error(" ");
console.error("See the docs or open a issue post on github.");
console.error(" ");
if (err) {
console.error(err);
}
}
// src/functions/startFunc.ts
import { join } from "node:path";
var { joinVoiceChannel, createAudioPlayer, createAudioResource } = __require("@discordjs/voice");
function start({
imvci,
igi,
igv,
type,
Resource
}) {
try {
let streamFile2 = function(FILE) {
let Audio = createAudioResource(join(__dirname, FILE), { inlineVolume: true });
AudioPlayer.play(Audio);
joinVoiceChannel({
channelId: imvci,
guildId: igi,
adapterCreator: igv
}).subscribe(AudioPlayer);
}, streamLink2 = function(URL) {
let Audio = createAudioResource(URL);
AudioPlayer.play(Audio);
joinVoiceChannel({
channelId: imvci,
guildId: igi,
adapterCreator: igv
}).subscribe(AudioPlayer);
}, LinkValidation2 = function(URL) {
var URLPattern = new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$", "i");
return URLPattern.test(URL);
}, FileValidation2 = function(FILE) {
var FILEPattern = new RegExp("^(.+)/([^/]+)$");
return FILEPattern.test(FILE);
};
var streamFile = streamFile2, streamLink = streamLink2, LinkValidation = LinkValidation2, FileValidation = FileValidation2;
const AudioPlayer = createAudioPlayer();
switch (type) {
case "Link":
if (LinkValidation2(Resource) === true && FileValidation2(Resource) === false) {
streamLink2(Resource);
} else {
ERR();
}
break;
case "File":
if (LinkValidation2(Resource) === false && FileValidation2(Resource) === true) {
streamFile2(Resource);
} else {
ERR();
}
break;
case "Analyze":
if (LinkValidation2(Resource) === true && FileValidation2(Resource) === false) {
streamLink2(Resource);
} else if (LinkValidation2(Resource) === false && FileValidation2(Resource) === true) {
streamFile2(Resource);
} else {
ERR();
}
break;
default:
ERR();
break;
}
} catch (err) {
ERR(err);
}
}
// src/functions/stopFunc.ts
var { getVoiceConnection } = __require("@discordjs/voice");
function stop({
igi
}) {
try {
const connection = getVoiceConnection(igi);
connection.destroy();
} catch (err) {
ERR();
}
}
export {
start,
stop
};
+2539
View File
File diff suppressed because it is too large Load Diff
+40
View File
@@ -0,0 +1,40 @@
{
"name": "discord-audio-stream",
"version": "0.2.0",
"description": "🖼️ NPM Package to stream any audio link on discord.",
"main": "./dist/index.js",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"scripts": {
"build": "tsup"
},
"repository": {
"type": "git",
"url": "git+https://github.com/FrauJulian/discord-audio-stream.git"
},
"keywords": [
"discordjs-v14",
"stream",
"audio",
"music"
],
"author": "FrauJulian | Julian Lechner",
"license": "BSD-3-Clause",
"bugs": {
"url": "https://github.com/FrauJulian/discord-audio-stream/issues"
},
"homepage": "https://github.com/FrauJulian/discord-audio-stream#readme",
"devDependencies": {
"@types/ejs": "^3.1.5",
"@types/node": "^20.12.8",
"tsup": "^8.0.2",
"typescript": "^5.4.5"
},
"dependencies": {
"@discordjs/voice": "^0.16.1",
"ffmpeg-static": "^5.2.0",
"fs": "^0.0.1-security",
"libsodium-wrappers": "^0.7.13",
"opusscript": "^0.0.8"
}
}
+86
View File
@@ -0,0 +1,86 @@
const { joinVoiceChannel, createAudioPlayer, createAudioResource } = require("@discordjs/voice");
import { ERR, startParameters } from "../managers/UtilityManager";
import { join } from "node:path";
export function start({
imvci,
igi,
igv,
type,
Resource,
}: startParameters) {
try {
const AudioPlayer = createAudioPlayer();
function streamFile(FILE: string) {
let Audio = createAudioResource(join(__dirname, FILE), { inlineVolume: true });
AudioPlayer.play(Audio);
joinVoiceChannel({
channelId: imvci,
guildId: igi,
adapterCreator: igv
}).subscribe(AudioPlayer);
}
function streamLink(URL: string) {
let Audio = createAudioResource(URL);
AudioPlayer.play(Audio);
joinVoiceChannel({
channelId: imvci,
guildId: igi,
adapterCreator: igv
}).subscribe(AudioPlayer)
}
function LinkValidation(URL: string) {
var URLPattern = new RegExp('^(https?:\\/\\/)?'+
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|'+
'((\\d{1,3}\\.){3}\\d{1,3}))'+
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+
'(\\?[;&a-z\\d%_.~+=-]*)?'+
'(\\#[-a-z\\d_]*)?$','i');
return URLPattern.test(URL);
}
function FileValidation(FILE: string) {
var FILEPattern = new RegExp("^(.+)\/([^\/]+)$");
return FILEPattern.test(FILE);
}
switch (type) {
case "Link":
if(LinkValidation(Resource) === true && FileValidation(Resource) === false) {
streamLink(Resource);
} else {
ERR();
}
break;
case "File":
if(LinkValidation(Resource) === false && FileValidation(Resource) === true) {
streamFile(Resource);
} else {
ERR();
}
break;
case "Analyze":
if(LinkValidation(Resource) === true && FileValidation(Resource) === false) {
streamLink(Resource);
} else if(LinkValidation(Resource) === false && FileValidation(Resource) === true) {
streamFile(Resource)
} else {
ERR();
}
break;
default:
ERR();
break;
}
} catch (err) {
ERR(err);
}
};
+14
View File
@@ -0,0 +1,14 @@
const { getVoiceConnection } = require("@discordjs/voice");
import { ERR, stopParameter } from "../managers/UtilityManager";
export function stop({
igi,
}: stopParameter) {
try {
const connection = getVoiceConnection(igi);
connection.destroy();
} catch (err) {
ERR();
}
};
+1
View File
@@ -0,0 +1 @@
export * from "./managers/FuncManager";
+2
View File
@@ -0,0 +1,2 @@
export * from "../functions/startFunc";
export * from "../functions/stopFunc";
+3
View File
@@ -0,0 +1,3 @@
export * from "../utility/errorFunc";
export * from "../utility/startParameters";
export * from "../utility/stopParameter";
+13
View File
@@ -0,0 +1,13 @@
export function ERR(err?: unknown) {
console.error(" ")
console.error(" ______ _____ _____ ____ _____ \r\n | ____| __ \\| __ \\ \/ __ \\| __ \\ \r\n | |__ | |__) | |__) | | | | |__) |\r\n | __| | _ \/| _ \/| | | | _ \/ \r\n | |____| | \\ \\| | \\ \\| |__| | | \\ \\ \r\n |______|_| \\_\\_| \\_\\\\____\/|_| \\_\\")
console.error(" ")
console.error("This error comes from the discord-audio-stream package!")
console.error("This error occurs if you are not using the package correctly, sometimes it can also be bugs in the package.")
console.error(" ")
console.error("See the docs or open a issue post on github.")
console.error(" ")
if (err) {
console.error(err)
}
}
+7
View File
@@ -0,0 +1,7 @@
export type startParameters = {
imvci: number;
igi: number;
igv: number;
type: string;
Resource: string;
};
+3
View File
@@ -0,0 +1,3 @@
export type stopParameter = {
igi: number;
};
+25
View File
@@ -0,0 +1,25 @@
{
"compilerOptions": {
"strict": true,
"allowJs": true,
"noImplicitAny": true,
"esModuleInterop": true,
"strictNullChecks": true,
"target": "ES2022",
"moduleResolution": "Node",
"module": "CommonJS",
"declaration": true,
"isolatedModules": true,
"noEmit": true,
"outDir": "dist",
"types": [
"node"
],
"typeRoots": [
"node_modules/@types"
]
},
"include": ["src"],
"exclude": ["node_modules"]
}
+10
View File
@@ -0,0 +1,10 @@
import { defineConfig } from "tsup";
export default defineConfig({
format: [ "cjs", "esm" ],
entry: ["./src/index.ts"],
dts: true,
shims: true,
skipNodeModulesBundle: true,
clean: true,
});