# 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)

**This module is designed to work with [discord.js/voice](https://www.npmjs.com/package/@discordjs/voice) v0.18. This
package doesn't support older
versions!**

## 👋 Support

Please create an [issue](https://github.com/FrauJulian/DiscordAudioStreamNPM/issues) on github or write [
`fraujulian`](https://discord.com/users/860206216893693973) on discord!

## 📝 Usage

### Install package

```bash
npm install discord-audio-stream opusscript @discordjs/voice ffmpeg-static sodium-native
```

### Create Instance

```js
let audioManager = new AudioManager();
```

or (with parameters)

```js
let audioManager = new AudioManager({
        VoiceChannelId: 0, //voice channel id where to play music
        GuildId: 0, //guild id
        VoiceAdapter: 0 //guild VoiceAdapter
    },
    {
        ResourceType: "", //resource type like link or file
        Resource: "" //auto play link or file name
    });
```

### Properties of the AudioManager

#### Properties

| Callable with     | Type                         | Description                                     |
|-------------------|------------------------------|-------------------------------------------------|
| `VoiceConnection` | **VoiceConnection**          | VoiceConnection instance from discord.js/voice. |
| `AudioPlayer`     | **AudioPlayer**              | AudioPlayer instance from discord.js/voice.     |
| `AudioResource`   | **AudioResource**            | AudioResource instance from discord.js/voice.   |
| `IsActive`        | boolean                      | Variable to check if audio stream is active.    |
| `IsAudioPlaying`  | boolean                      | Variable to check if audio is playing.          |
| `ConnectionData`  | **VoiceConnectionDataModel** | Global variable for connection data.            |
| `AudioData`       | **AudioDataModel**           | Global variable for audio data.                 |

#### Methods

| Callable with                  | Parameters                                                                                             | Return type | Description                                                        |
|--------------------------------|--------------------------------------------------------------------------------------------------------|-------------|--------------------------------------------------------------------|
| `OverrideOptions`              | `connectionData` (type of **VoiceConnectionDataModel**), `audioData` (type of **VoiceAudioDataModel**) | void        | Method to override global variables, connectionData and audioData. |
| `CreateConnection`             | `isRenew` (type of boolean, default value is false)                                                    | void        | Method to join the voice connection.                               |
| `PlayAudioOnConnection`        |                                                                                                        | void        | Method to play audio on the existing voice connection.             |
| `PauseAudio`                   |                                                                                                        | void        | Method to pause the audio.                                         |
| `ResumeAudio`                  |                                                                                                        | void        | Method to resume the audio.                                        |
| `StopAudioOnConnection`        |                                                                                                        | void        | Method to stop the audio without destroying voice connection.      |
| `CreateConnectionAndPlayAudio` |                                                                                                        | void        | Method to join the voice connection and play audio.                |
| `DestroyConnection`            |                                                                                                        | void        | Method to destroy the voice connection.                            |
| `SetVolume`                    | `volume` (type of number, 0 - 100 percent)                                                             | void        | Method to set the audio volume.                                    | Method to set the volume of the audio.                             |
| `SetMaxListeners`              | `maxListeners` (type of number)                                                                        | void        | Method to set the max listeners of the audio stream.               |

##### Types History

- [**VoiceConnection** by discord.js/voice](https://github.com/discordjs/discord.js/blob/main/packages/voice/src/VoiceConnection.ts#L166)
- [**AudioPlayer** by discord.js/voice](https://github.com/discordjs/discord.js/blob/main/packages/voice/src/audio/AudioPlayer.ts#L155)
- [**AudioResource** by discord.js/voice](https://github.com/discordjs/discord.js/blob/main/packages/voice/src/audio/AudioResource.ts#L44)
- [**VoiceConnectionDataModel**](https://github.com/FrauJulian/Discord-Audio-Stream/blob/main/src/Models/VoiceConnectionDataModel.d.ts#L3) (custom type)
- [**VoiceAudioDataModel**](https://github.com/FrauJulian/Discord-Audio-Stream/blob/main/src/Models/VoiceAudioDataModel.d.ts#L1) (custom type)

## 📋 Credits:

~ [**FrauJulian**](https://fraujulian.xyz/).

## 🤝 Enjoy the package?

Give it a star ⭐ on [github](https://github.com/FrauJulian/discord-audio-stream)!