changed Project Stucture - Part1

This commit is contained in:
Julian Lechner
2025-04-06 16:42:30 +02:00
parent ceaf06f853
commit 2085339bdb
14 changed files with 1352 additions and 325 deletions
+2
View File
@@ -1,5 +1,7 @@
.idea
node_modules
src
.gitignore
README.md
tsconfig.json
tsup.config.ts
+5
View File
@@ -0,0 +1,5 @@
import {AudioStreamManager} from "./src";
let temp = new AudioStreamManager("MySql", "frg");
console.log(temp);
+1165 -311
View File
File diff suppressed because it is too large Load Diff
+13 -9
View File
@@ -1,7 +1,7 @@
{
"name": "discord-audio-stream",
"version": "0.4.1",
"description": "Node libary to make discord audio streaming easier.",
"version": "0.5.0",
"description": "Node library to make discord audio streaming easier.",
"main": "./dist/index.js",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
@@ -26,15 +26,19 @@
"homepage": "https://github.com/FrauJulian/DiscordAudioStreamNPM#readme",
"devDependencies": {
"@types/ejs": "^3.1.5",
"@types/node": "^20.12.8",
"tsup": "^8.0.2",
"typescript": "^5.4.5"
"@types/node": "^22.13.16",
"tsup": "^8.4.0",
"typescript": "^5.8.2"
},
"dependencies": {
"@discordjs/voice": "^0.16.1",
"@discordjs/opus": "^0.10.0",
"@discordjs/voice": "^0.18.0",
"@noble/ciphers": "^1.2.1",
"ffmpeg-static": "^5.2.0",
"fs": "^0.0.1-security",
"libsodium-wrappers": "^0.7.13",
"opusscript": "^0.0.8"
"libsodium-wrappers": "^0.7.15",
"mysql2": "^3.14.0",
"node-json-db": "^2.3.1",
"opusscript": "^0.1.1",
"sodium-native": "^5.0.0"
}
}
+6
View File
@@ -0,0 +1,6 @@
import {JsonDatabaseServices} from "../InternalServices/DatabaseServices/JsonDatabaseServices";
import {MySqlDatabaseServices} from "../InternalServices/DatabaseServices/MySqlDatabaseServices";
export class Constants {
public static DatabaseServices: JsonDatabaseServices | MySqlDatabaseServices | null = null;
}
@@ -0,0 +1,31 @@
import {JsonDatabaseServices} from "../../InternalServices/DatabaseServices/JsonDatabaseServices";
import {MySqlDatabaseServices} from "../../InternalServices/DatabaseServices/MySqlDatabaseServices";
import {Constants} from "../../Core/Contants";
export class AudioStreamManager {
constructor(
databaseType: "Json" | "MySql",
databaseOptions: {
Host: string;
Port: number;
Username: string;
Password: string;
Database: string;
} | string) {
if (databaseType === "MySql" &&
databaseOptions &&
typeof databaseOptions === "object") {
console.log("mysql passed")
Constants.DatabaseServices = new MySqlDatabaseServices(databaseOptions);
} else if (databaseType === "Json" &&
databaseOptions &&
typeof databaseOptions === "string") {
console.log("json passed")
Constants.DatabaseServices = new JsonDatabaseServices(databaseOptions);
} else {
console.log("err passed")
throw new Error("Failed validating database.")
}
}
}
@@ -0,0 +1,71 @@
import {DiscordGatewayAdapterCreator, getVoiceConnection, joinVoiceChannel, VoiceConnection} from "@discordjs/voice";
import {IConnectionManager} from "./IConnectionManager";
import {Constants} from "../../Core/Contants";
class ConnectionManager implements IConnectionManager {
constructor() {
if (Constants.DatabaseServices === null) throw Error("Database services were not initialized.");
}
CreateConnection(connectionData: {
VoiceChannelId: number;
GuildId: number;
VoiceAdapter: DiscordGatewayAdapterCreator;
}): VoiceConnection {
return joinVoiceChannel({
channelId: connectionData.VoiceChannelId.toString(),
guildId: connectionData.GuildId.toString(),
adapterCreator: connectionData.VoiceAdapter
})
}
PlayAudioOnConnection(audioData: {
ResourceType: "Link" | "File";
Resource: string;
}, guildId: bigint): VoiceConnection {
throw new Error("Method not implemented.");
}
ConnectAndPlayAudio(connectionData: { VoiceChannelId: number; GuildId: number; VoiceAdapter: DiscordGatewayAdapterCreator; }, audioData: {
ResourceType: "Link" | "File";
Resource: string;
}): VoiceConnection {
throw new Error("Method not implemented.");
}
StopAudioOnConnection(guildId: bigint): VoiceConnection {
let voiceConnection = getVoiceConnection(guildId.toString());
if (!voiceConnection) throw new Error("Voice connection were not found.");
//TODO: MAKE STOP AUDIO WITHOUT DESTROYING CONNECTION
return voiceConnection;
}
DestroyConnection(guildId: bigint): void {
let voiceConnection = getVoiceConnection(guildId.toString());
if (!voiceConnection) throw new Error("Voice connection were not found.");
voiceConnection.destroy();
}
SetMaxListeners(maxListeners: number, guildId: bigint): VoiceConnection {
let voiceConnection = getVoiceConnection(guildId.toString());
if (!voiceConnection) throw new Error("Voice connection were not found.");
voiceConnection.setMaxListeners(maxListeners);
return voiceConnection;
}
SetVolume(volume: number, guildId: bigint): VoiceConnection {
if (volume < 0 || volume > 100) throw new Error("Volume must be between 0 and 100.");
let voiceConnection = getVoiceConnection(guildId.toString());
if (!voiceConnection) throw new Error("Voice connection were not found.");
//TODO: MAKE VOLUME WORK
return voiceConnection;
}
}
@@ -0,0 +1,31 @@
import {DiscordGatewayAdapterCreator, getVoiceConnection, joinVoiceChannel, VoiceConnection} from "@discordjs/voice";
export interface IConnectionManager {
CreateConnection(connectionData: {
VoiceChannelId: number;
GuildId: number;
VoiceAdapter: DiscordGatewayAdapterCreator;
}): VoiceConnection;
SetVolume(volume: number, guildId: bigint): VoiceConnection;
SetMaxListeners(maxListeners: number, guildId: bigint): VoiceConnection;
DestroyConnection(guildId: bigint): void;
StopAudioOnConnection(guildId: bigint): VoiceConnection;
ConnectAndPlayAudio(connectionData: {
VoiceChannelId: number;
GuildId: number;
VoiceAdapter: DiscordGatewayAdapterCreator;
}, audioData: {
ResourceType: "Link" | "File";
Resource: string;
}): VoiceConnection;
PlayAudioOnConnection(audioData: {
ResourceType: "Link" | "File";
Resource: string;
}, guildId: bigint): VoiceConnection;
}
@@ -0,0 +1,3 @@
export interface IDatabaseServices {
}
@@ -0,0 +1,7 @@
import {IDatabaseServices} from "./IDatabaseServices";
export class JsonDatabaseServices implements IDatabaseServices {
constructor(databaseOptions : string) {
// IMPLEMENT DATABASE
}
}
@@ -0,0 +1,14 @@
import {IDatabaseServices} from "./IDatabaseServices";
export class MySqlDatabaseServices implements IDatabaseServices {
constructor(databaseOptions: {
Host: string;
Port: number;
Username: string;
Password: string;
Database: string;
}) {
//IMPLEMENT DATABASE
}
}
+2 -1
View File
@@ -1,4 +1,5 @@
const {joinVoiceChannel, createAudioPlayer, createAudioResource} = require("@discordjs/voice");
const {
joinVoiceChannel, createAudioPlayer, createAudioResource} = require("@discordjs/voice");
const {join} = require("node:path");
import {startMethodOptions} from "../Utils/Options/StartMethodOptions";
+1 -3
View File
@@ -1,3 +1 @@
export * from "./Methods/StartMethod";
export * from "./Methods/StopMethod";
export * from "./Methods/MaxListenerMethod";
export { AudioStreamManager } from "./ExternalServices/AudioStreamManager/AudioStreamManager";
+1 -1
View File
@@ -1,7 +1,7 @@
{
"compilerOptions": {
"strict": true,
"allowJs": true,
"allowJs": false,
"noImplicitAny": true,
"esModuleInterop": true,
"strictNullChecks": true,