lavalink-client 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +93 -164
  2. package/dist/cjs/index.d.ts +9 -0
  3. package/dist/cjs/index.js +12 -0
  4. package/dist/cjs/structures/Filters.d.ts +231 -0
  5. package/dist/cjs/structures/Filters.js +481 -0
  6. package/dist/cjs/structures/LavalinkManager.d.ts +124 -0
  7. package/dist/cjs/structures/LavalinkManager.js +168 -0
  8. package/dist/cjs/structures/LavalinkManagerStatics.d.ts +3 -0
  9. package/dist/cjs/structures/LavalinkManagerStatics.js +84 -0
  10. package/dist/cjs/structures/Node.d.ts +245 -0
  11. package/dist/cjs/structures/Node.js +603 -0
  12. package/dist/cjs/structures/NodeManager.d.ts +61 -0
  13. package/dist/cjs/structures/NodeManager.js +35 -0
  14. package/dist/cjs/structures/Player.d.ts +191 -0
  15. package/dist/cjs/structures/Player.js +395 -0
  16. package/dist/cjs/structures/Queue.d.ts +107 -0
  17. package/dist/cjs/structures/Queue.js +215 -0
  18. package/dist/cjs/structures/Track.d.ts +47 -0
  19. package/dist/cjs/structures/Track.js +2 -0
  20. package/dist/cjs/structures/Utils.d.ts +258 -0
  21. package/dist/cjs/structures/Utils.js +179 -0
  22. package/dist/esm/index.d.ts +9 -0
  23. package/dist/esm/index.js +9 -0
  24. package/dist/esm/structures/Filters.d.ts +231 -0
  25. package/dist/esm/structures/Filters.js +477 -0
  26. package/dist/esm/structures/LavalinkManager.d.ts +124 -0
  27. package/dist/esm/structures/LavalinkManager.js +164 -0
  28. package/dist/esm/structures/LavalinkManagerStatics.d.ts +3 -0
  29. package/dist/esm/structures/LavalinkManagerStatics.js +81 -0
  30. package/dist/esm/structures/Node.d.ts +245 -0
  31. package/dist/esm/structures/Node.js +598 -0
  32. package/dist/esm/structures/NodeManager.d.ts +61 -0
  33. package/dist/esm/structures/NodeManager.js +31 -0
  34. package/dist/esm/structures/Player.d.ts +191 -0
  35. package/dist/esm/structures/Player.js +391 -0
  36. package/dist/esm/structures/Queue.d.ts +107 -0
  37. package/dist/esm/structures/Queue.js +208 -0
  38. package/dist/esm/structures/Track.d.ts +47 -0
  39. package/dist/esm/structures/Track.js +1 -0
  40. package/dist/esm/structures/Utils.d.ts +258 -0
  41. package/dist/esm/structures/Utils.js +173 -0
  42. package/dist/index.d.ts +10 -0
  43. package/dist/index.js +13 -0
  44. package/dist/structures/Filters.d.ts +230 -0
  45. package/dist/structures/Filters.js +472 -0
  46. package/dist/structures/LavalinkManager.d.ts +47 -0
  47. package/dist/structures/LavalinkManager.js +36 -0
  48. package/dist/structures/LavalinkManagerStatics.d.ts +3 -0
  49. package/dist/structures/LavalinkManagerStatics.js +76 -0
  50. package/dist/structures/Node.d.ts +171 -0
  51. package/dist/structures/Node.js +462 -0
  52. package/dist/structures/NodeManager.d.ts +58 -0
  53. package/dist/structures/NodeManager.js +25 -0
  54. package/dist/structures/Player.d.ts +101 -0
  55. package/dist/structures/Player.js +232 -0
  56. package/dist/structures/PlayerManager.d.ts +62 -0
  57. package/dist/structures/PlayerManager.js +26 -0
  58. package/dist/structures/Queue.d.ts +93 -0
  59. package/dist/structures/Queue.js +160 -0
  60. package/dist/structures/QueueManager.d.ts +77 -0
  61. package/dist/structures/QueueManager.js +74 -0
  62. package/dist/structures/Track.d.ts +27 -0
  63. package/dist/structures/Track.js +2 -0
  64. package/dist/structures/Utils.d.ts +183 -0
  65. package/dist/structures/Utils.js +43 -0
  66. package/dist/types/index.d.ts +9 -0
  67. package/dist/types/structures/Filters.d.ts +231 -0
  68. package/dist/types/structures/LavalinkManager.d.ts +124 -0
  69. package/dist/types/structures/LavalinkManagerStatics.d.ts +3 -0
  70. package/dist/types/structures/Node.d.ts +245 -0
  71. package/dist/types/structures/NodeManager.d.ts +61 -0
  72. package/dist/types/structures/Player.d.ts +191 -0
  73. package/dist/types/structures/Queue.d.ts +107 -0
  74. package/dist/types/structures/Track.d.ts +47 -0
  75. package/dist/types/structures/Utils.d.ts +258 -0
  76. package/package.json +63 -26
package/README.md CHANGED
@@ -1,187 +1,116 @@
1
1
  # lavalink-client
2
2
  Easy and advanced lavalink client. Use it with lavalink plugins as well as latest lavalink versions
3
3
 
4
-
5
- ### What is Lavalink?
6
- - Lavalink is an open-source Discord Queue Manager and Audioplayer, as well as scraper.
7
-
8
- *Coming soon*
9
-
10
-
11
-
12
- ## How to self Host Lavalink
13
-
14
- <details>
15
- <summary>
16
- 👉 Click here to see how to self host a Lavalink instance
17
- </summary>
18
-
19
- ### Requirements - JAVA
20
- - [v18](https://github.com/Tomato6966/Debian-Cheat-Sheat-Setup/wiki/3.5.7-java-18) - for Lavalink@latest (v3.5+ or rc*)
21
- - [v13](https://github.com/Tomato6966/Debian-Cheat-Sheat-Setup/wiki/3.5.3-java-13) - for Lavalink v3.3-v3.4
22
- - [v11](https://github.com/Tomato6966/Debian-Cheat-Sheat-Setup/wiki/3.5.2-java-11) - for all older Versions
23
-
24
- ### Installation
25
- - First download the [Lavalink executeable File v3.6.2](https://github.com/freyacodes/Lavalink/releases/download/3.6.2/Lavalink.jar): [from the releases page](https://github.com/freyacodes/Lavalink/releases)
26
- ```
27
- wget https://github.com/freyacodes/Lavalink/releases/download/3.6.2/Lavalink.jar
28
- ```
29
- - Then download my [example **configuration File** application.yml](https://raw.githubusercontent.com/Tomato6966/Debian-Cheat-Sheet-Setup/main/application.yml) | [Example application.yml from official repo - LINK](https://github.com/freyacodes/Lavalink/blob/master/LavalinkServer/application.yml.example)
30
- ```
31
- wget https://raw.githubusercontent.com/Tomato6966/Debian-Cheat-Sheet-Setup/main/application.yml
32
- ```
33
- *Make sure the file-name is equal to: `application.yml` and is in the same Directory as the `Lavalink.jar` file*
34
-
35
- **NOTE:** If you don't wanna use the spotify plugin, or any other sources Plugin, then remove it from MY EXAMPLE application.yml
36
- > other wise you'd get errors. as far this is just a note-cheatsheet FOR ME
37
-
38
- # Plugins Example
39
- - In the server config Level of the applicatino.yml for `plugins` you can find all plugins and their versions which will be downloaded
40
-
41
- # Edit Application.yml
42
- make sure to edit:
43
- - **port** to access Lavalink from a different Port
44
- - **password** so that you have a password
45
- - **spotify** -> **clientId** & **clientSecret** [get them from here](https://developer.spotify.com/dashboard/applications)
46
- - **deezer** -> **masterEncryptionKey** [find it out yourself, how to get it](https://github.com/yne/dzr/issues/11)
47
- - All other values to fit your needs
48
-
49
- # Start Lavalink
50
-
51
- in the folder of `Lavalink.jar` and `application.yml` execute the following
52
- ```bash
53
- java -jar Lavalink.jar
54
- ```
55
-
56
- # How to start it 24/7 - 2 Methods
57
-
58
- - pm2:
59
-
60
- ```bash
61
- npm i -g pm2; # add pm2 to the system
62
- pm2 start --name Lavalink --max-memory-restart 4G java -- -jar Lavalink.jar
4
+ # Install
5
+
6
+ Latest stable Version: (currently, unreleased)
7
+ ```
8
+ npm install --save lavalink-client
9
+ ```
10
+ Dev Version: (Current)
11
+ ```
12
+ npm install tomato6966/lavalink-client
63
13
  ```
64
14
 
65
- - screen:
66
- ```bash
67
- apt-get install screen
68
- screen -t Lavalink -s Lavalink
69
- java -jar Lavalink # in the screen window:
15
+ # Features
70
16
 
71
- # strg + alt + a + d -> to exit
72
- # screen -ls to view all screens
73
- # screen -r <ID> to re-enter a screen
17
+ - Player-Destroy Reasons like:
18
+ - Channel got deleted, Player got disconnected...
19
+ - Choose able queue stores (maps, collections, redis, databases, ...)
20
+ - You can create your own queueStore, thus make it easy to sync queues accross multiple connections (e.g. dashboard-bot)
21
+ - Included Filter & Equalizer Management
22
+ - Multiple Player Options
23
+ - onDisconnect -> Player Destroy / auto Reconnect
24
+ - onEmptyQueue -> Player Destroy / leave After x Time
25
+ - instaFixFilter -> seek the player after applying a filter, to instantly apply it's effect (only works for little-durational-songs)
26
+ - applyVolumeAsFilter -> instead of using lavalink.volume, it uses lavalink.filters.volume which is much different!
27
+ - Lavalink Validations
28
+ - It only let's you use the filters / plugins / sources, if Lavalink actually has it enabled
29
+ - Memory friendly and easy style
30
+ - Only the required data is displayed, and the store-way & types match Lavalink#IMPLEMENTATION.md
31
+ - Much much more!
74
32
 
75
- # How to connect to it?
33
+ # Documentation
76
34
 
77
- you need the following information:
78
- - host: `localhost` | `127.0.0.1` | `IPV4 Address` (only works if firewall allows it)
79
- - port: `2333` | `defined_port`
80
- - password: `youshallnotpass` | `defined_port`
35
+ *soon*
81
36
 
37
+ # How to Use
82
38
 
83
- # Recommendation
84
-
85
- Start using ipv6 routating, to prevent an ip ban from youtube!
86
- check [here](https://github.com/freyacodes/Lavalink/issues/369) for more infos and for how to use tunnelbroker to get an ipv6 address-block, if you don't have one
87
-
88
- ## How to do ip routing notes:
89
-
90
- First enable allowments for ipv6
39
+ 1. Import the Manager
91
40
 
41
+ ```ts
42
+ import { LavalinkManager } from "lavalink-client"; // Modular JS / Typescript
92
43
  ```
93
- # Enable now
94
- sysctl -w net.ipv6.ip_nonlocal_bind=1
95
- # Persist for next boot
96
- echo 'net.ipv6.ip_nonlocal_bind = 1' >> /etc/sysctl.conf
97
- ```
98
-
99
- replace `1234:1234:1234::/64` with your BLOCK (e.g. `2a01:12ab:12::/64`), if it's a /48 then it's `1234:1234:1234::/48` ofc.
100
44
 
101
- ```
102
- ip -6 route replace local 1234:1234:1234::/64 dev lo
103
- ```
104
- Don't know how to route it with netplan / interfaces? Ask your provider or do:
105
- ```
106
- ip add add local 1234:1234:1234::/64 dev lo
45
+ ```js
46
+ const { LavalinkManager } = require("lavalink-client"); // Common Js
107
47
  ```
108
48
 
109
- Test the config
49
+ 2. create the Manager
110
50
 
111
- ```
112
- # Test that IPv6 works in the first place
113
- ping6 google.com
114
-
115
- # If you have the IPv6 block 1234:1234:1234::/48
116
- # You should be able to use any of the IPs within that block
117
- ping6 -I 1234:1234:1234:: -c 2 google.com
118
- ping6 -I 1234:1234:1234::1 -c 2 google.com
119
- ping6 -I 1234:1234:1234::2 -c 2 google.com
120
- ping6 -I 1234:1234:1234:dead:beef:1234:1234 -c 2 google.com
51
+ ```ts
52
+ // Suggest it to extend it to the bot Client
53
+ client.lavalink = new LavalinkManager({
54
+ nodes: [
55
+ {
56
+ authorization: "youshallnotpass",
57
+ host: "localhost",
58
+ port: 2333,
59
+ id: "testnode",
60
+ requestTimeout: 10000,
61
+ }
62
+ ],
63
+ sendToShard: (guildId, payload) => client.guilds.cache.get(guildId)?.shard?.send(payload),
64
+ autoSkip: true,
65
+ client: {
66
+ id: envConfig.clientId,
67
+ username: "TESTBOT",
68
+ shards: "auto"
69
+ },
70
+ playerOptions: {
71
+ applyVolumeAsFilter: false,
72
+ clientBasedUpdateInterval: 50,
73
+ defaultSearchPlatform: "dzsearch",
74
+ volumeDecrementer: 0.7
75
+ },
76
+ queueOptions: {
77
+ maxPreviousTracks: 5
78
+ },
79
+ // queueStore: new myCustomStore(client.redis), // OPTIONAL! 'class myCustomStore extends DefaultQueueStore' --> for custom queue stores, e.g. redis, etc. | default is lavalink-client#MiniMap
80
+ // queueChangesWatcher: new myCustomWatcher(), // OPTIONAL! 'class myCustomWatcher extends QueueChangesWatcher' --> for queue action logs!
81
+ });
121
82
  ```
122
83
 
123
- **IF you get could not assign requested address, then it's not routed to your system..**
84
+ 3. **VERY IMPORTANT!** - Register Voice State updates + initialize the Manager
124
85
 
125
- **IF YOU GET 100% PACKET LOSS THEN EVERYTHING IS OKAY DO THE FOLLOWING:**
86
+ ```ts
87
+ client.on("raw", d => client.lavalink.sendRawData(d)); // for voice state updates!
88
+ client.on("ready", async () => {
89
+ console.log("Discord Bot is ready to be Used!");
90
+ // user.id is required, user.shards (not), user.username (not, but recommended for lavalink stats!)
91
+ await client.lavalink.init({ ...client.user!, shards: "auto" });
92
+ });
126
93
  ```
127
- # Install routing proxy
128
- sudo apt-get -y install ndppd
129
- # Create / edit it's config file
130
- nano /etc/ndppd.conf
131
- # Next paste the following: again replace the block with your block
132
-
133
- route-ttl 30000
134
-
135
- proxy enp1s0 { # your interface name
136
- router no # If it should send router bit | default: yes
137
- timeout 500 # How long (in ms) it waits to assign a request address (lower == faster but more unstable) | default: 500
138
- ttl 30000 # How long (in ms) it caches an Ip Address (for lavalink you can def. set this one to 3600000 | default: 30000
139
- rule 1234:1234:1234::/64{
140
- static # to respond immediatelly
141
- }
142
- }
143
- ```
144
-
145
- Before saving replace `enp1s0` with your interface block name
146
94
 
147
- It's findable with: ip addr
148
- there are multiple, just find the name of the one where your ipv6 Block is in!
95
+ 4. **Use it!**
149
96
 
150
- **NOW START ndppd**
151
-
152
- ```
153
- ndppd -d -c /etc/ndppd.conf
154
- # Restart: systemctl restart ndppd
155
- # Stop: systemctl stop ndppd
156
- # Status : systemctl status ndppd
157
- # Start: systemctl start ndppd
158
- ```
159
-
160
- If apt-install fails do this:
161
- ```
162
- wget http://data.vshell.net/files/ndppd-0.2.5.tar.gz
163
- tar -zxvf ndppd-0.2.5.tar.gz
164
- cd ndppd-0.2.5
165
- make
166
- make install
167
- ```
168
-
169
-
170
- How does my /etc/ndppd.conf look like?
171
- ```
172
- route-ttl 3600000
173
- proxy enp1s0 {
174
- router yes
175
- timeout 50
176
- ttl 3600000
177
- rule 2423:2220:123:1234::/64{
178
- static
179
- }
180
- }
181
- ```
182
-
183
- </details>
97
+ ```ts
98
+ // create player
99
+ const player = await client.lavalink.createPlayer({
100
+ guildId: guild.id, voiceChannelId: voice.id, textChannelId: text.id, // in what guild + channel(s)
101
+ selfDeaf: true, selfMute: false, volume: 100 // configuration(s)
102
+ });
103
+ // connect the player to it's vc
104
+ await player.connect();
184
105
 
185
- ## Public Lavalink Services:
186
-
187
- https://lavalink.milrato.com
106
+ const res = await player.search({
107
+ query: `Elton John`, // source: `soundcloud`,
108
+ }, client.user); // search a query (query-search, url search, identifier search, etc.)
109
+
110
+ await player.queue.add(res.tracks); // add 1 track, or an array of tracks
111
+ await player.play(); // you can provide specific track, or let the manager choose the track from the queue!
112
+ ```
113
+
114
+ ## Example (typescript)
115
+
116
+ Can be found in the [/testBot](https://github.com/Tomato6966/lavalink-client/blob/main/testBot/README.md) Directory
@@ -0,0 +1,9 @@
1
+ export * from "./structures/LavalinkManager";
2
+ export * from "./structures/Filters";
3
+ export * from "./structures/LavalinkManagerStatics";
4
+ export * from "./structures/Node";
5
+ export * from "./structures/NodeManager";
6
+ export * from "./structures/Player";
7
+ export * from "./structures/Queue";
8
+ export * from "./structures/Track";
9
+ export * from "./structures/Utils";
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./structures/LavalinkManager"), exports);
5
+ tslib_1.__exportStar(require("./structures/Filters"), exports);
6
+ tslib_1.__exportStar(require("./structures/LavalinkManagerStatics"), exports);
7
+ tslib_1.__exportStar(require("./structures/Node"), exports);
8
+ tslib_1.__exportStar(require("./structures/NodeManager"), exports);
9
+ tslib_1.__exportStar(require("./structures/Player"), exports);
10
+ tslib_1.__exportStar(require("./structures/Queue"), exports);
11
+ tslib_1.__exportStar(require("./structures/Track"), exports);
12
+ tslib_1.__exportStar(require("./structures/Utils"), exports);
@@ -0,0 +1,231 @@
1
+ import { Player } from "./Player";
2
+ export type AudioOutputs = "mono" | "stereo" | "left" | "right";
3
+ export interface FilterManager {
4
+ player: Player;
5
+ }
6
+ export declare class FilterManager {
7
+ equalizerBands: EQBand[];
8
+ filterUpdatedState: number;
9
+ filters: PlayerFilters;
10
+ data: LavalinkFilterData;
11
+ constructor(player: Player);
12
+ applyPlayerFilters(): Promise<void>;
13
+ /**
14
+ * Checks if the filters are correctly stated (active / not-active)
15
+ * @param oldFilterTimescale
16
+ * @returns
17
+ */
18
+ checkFiltersState(oldFilterTimescale?: Partial<TimescaleFilter>): boolean;
19
+ /**
20
+ * Reset all Filters
21
+ */
22
+ resetFilters(): Promise<PlayerFilters>;
23
+ setVolume(volume: number): Promise<boolean>;
24
+ /**
25
+ * Set the AudioOutput Filter
26
+ * @param type
27
+ */
28
+ setAudioOutput(type: AudioOutputs): Promise<AudioOutputs>;
29
+ /**
30
+ * Set custom filter.timescale#speed . This method disabled both: nightcore & vaporwave. use 1 to reset it to normal
31
+ * @param speed
32
+ * @returns
33
+ */
34
+ setSpeed(speed?: number): Promise<boolean>;
35
+ /**
36
+ * Set custom filter.timescale#pitch . This method disabled both: nightcore & vaporwave. use 1 to reset it to normal
37
+ * @param speed
38
+ * @returns
39
+ */
40
+ setPitch(pitch?: number): Promise<boolean>;
41
+ /**
42
+ * Set custom filter.timescale#rate . This method disabled both: nightcore & vaporwave. use 1 to reset it to normal
43
+ * @param speed
44
+ * @returns
45
+ */
46
+ setRate(rate?: number): Promise<boolean>;
47
+ /**
48
+ * Enabels / Disables the rotation effect, (Optional: provide your Own Data)
49
+ * @param rotationHz
50
+ * @returns
51
+ */
52
+ toggleRotation(rotationHz?: number): Promise<boolean>;
53
+ /**
54
+ * Enabels / Disables the Vibrato effect, (Optional: provide your Own Data)
55
+ * @param frequency
56
+ * @param depth
57
+ * @returns
58
+ */
59
+ toggleVibrato(frequency?: number, depth?: number): Promise<boolean>;
60
+ /**
61
+ * Enabels / Disables the Tremolo effect, (Optional: provide your Own Data)
62
+ * @param frequency
63
+ * @param depth
64
+ * @returns
65
+ */
66
+ toggleTremolo(frequency?: number, depth?: number): Promise<boolean>;
67
+ /**
68
+ * Enabels / Disables the LowPass effect, (Optional: provide your Own Data)
69
+ * @param smoothing
70
+ * @returns
71
+ */
72
+ toggleLowPass(smoothing?: number): Promise<boolean>;
73
+ /**
74
+ * Enabels / Disables the Echo effect, IMPORTANT! Only works with the correct Lavalink Plugin installed. (Optional: provide your Own Data)
75
+ * @param delay
76
+ * @param decay
77
+ * @returns
78
+ */
79
+ toggleEcho(delay?: number, decay?: number): Promise<boolean>;
80
+ /**
81
+ * Enabels / Disables the Echo effect, IMPORTANT! Only works with the correct Lavalink Plugin installed. (Optional: provide your Own Data)
82
+ * @param delay
83
+ * @param decay
84
+ * @returns
85
+ */
86
+ toggleReverb(delay?: number, decay?: number): Promise<boolean>;
87
+ /**
88
+ * Enables / Disabels a Nightcore-like filter Effect. Disables/Overwrides both: custom and Vaporwave Filter
89
+ * @param speed
90
+ * @param pitch
91
+ * @param rate
92
+ * @returns
93
+ */
94
+ toggleNightcore(speed?: number, pitch?: number, rate?: number): Promise<boolean>;
95
+ /**
96
+ * Enables / Disabels a Vaporwave-like filter Effect. Disables/Overwrides both: custom and nightcore Filter
97
+ * @param speed
98
+ * @param pitch
99
+ * @param rate
100
+ * @returns
101
+ */
102
+ toggleVaporwave(speed?: number, pitch?: number, rate?: number): Promise<boolean>;
103
+ /**
104
+ * Enable / Disables a Karaoke like Filter Effect
105
+ * @param level
106
+ * @param monoLevel
107
+ * @param filterBand
108
+ * @param filterWidth
109
+ * @returns
110
+ */
111
+ toggleKaraoke(level?: number, monoLevel?: number, filterBand?: number, filterWidth?: number): Promise<boolean>;
112
+ /** Function to find out if currently there is a custom timescamle etc. filter applied */
113
+ isCustomFilterActive(): boolean;
114
+ /**
115
+ * Sets the players equalizer band on-top of the existing ones.
116
+ * @param bands
117
+ */
118
+ setEQ(bands: EQBand | EQBand[]): Promise<this>;
119
+ /** Clears the equalizer bands. */
120
+ clearEQ(): Promise<this>;
121
+ }
122
+ export declare const audioOutputsData: {
123
+ mono: {
124
+ leftToLeft: number;
125
+ leftToRight: number;
126
+ rightToLeft: number;
127
+ rightToRight: number;
128
+ };
129
+ stereo: {
130
+ leftToLeft: number;
131
+ leftToRight: number;
132
+ rightToLeft: number;
133
+ rightToRight: number;
134
+ };
135
+ left: {
136
+ leftToLeft: number;
137
+ leftToRight: number;
138
+ rightToLeft: number;
139
+ rightToRight: number;
140
+ };
141
+ right: {
142
+ leftToLeft: number;
143
+ leftToRight: number;
144
+ rightToLeft: number;
145
+ rightToRight: number;
146
+ };
147
+ };
148
+ export interface PlayerFilters {
149
+ /** Sets nightcore to false, and vaporwave to false */
150
+ custom: boolean;
151
+ /** Sets custom to false, and vaporwave to false */
152
+ nightcore: boolean;
153
+ /** Sets custom to false, and nightcore to false */
154
+ vaporwave: boolean;
155
+ /** only with the custom lavalink filter plugin */
156
+ echo: boolean;
157
+ /** only with the custom lavalink filter plugin */
158
+ reverb: boolean;
159
+ rotation: boolean;
160
+ karaoke: boolean;
161
+ tremolo: boolean;
162
+ vibrato: boolean;
163
+ lowPass: boolean;
164
+ /** audio Output (default stereo, mono sounds the fullest and best for not-stereo tracks) */
165
+ audioOutput: AudioOutputs;
166
+ /** Lavalink Volume FILTER (not player Volume, think of it as a gain booster) */
167
+ volume: boolean;
168
+ }
169
+ export interface EQBand {
170
+ band: number;
171
+ gain: number;
172
+ }
173
+ export interface KaraokeFilter {
174
+ level?: number;
175
+ monoLevel?: number;
176
+ filterBand?: number;
177
+ filterWidth?: number;
178
+ }
179
+ export interface TimescaleFilter {
180
+ speed?: number;
181
+ pitch?: number;
182
+ rate?: number;
183
+ }
184
+ export interface FreqFilter {
185
+ frequency?: number;
186
+ depth?: number;
187
+ }
188
+ export interface RotationFilter {
189
+ rotationHz?: number;
190
+ }
191
+ export interface DistortionFilter {
192
+ sinOffset?: number;
193
+ sinScale?: number;
194
+ cosOffset?: number;
195
+ cosScale?: number;
196
+ tanOffset?: number;
197
+ tanScale?: number;
198
+ offset?: number;
199
+ scale?: number;
200
+ }
201
+ export interface ChannelMixFilter {
202
+ leftToLeft?: number;
203
+ leftToRight?: number;
204
+ rightToLeft?: number;
205
+ rightToRight?: number;
206
+ }
207
+ export interface LowPassFilter {
208
+ smoothing?: number;
209
+ }
210
+ export interface EchoFilter {
211
+ delay: number;
212
+ decay: number;
213
+ }
214
+ export interface ReverbFilter {
215
+ delay: number;
216
+ decay: number;
217
+ }
218
+ export interface LavalinkFilterData {
219
+ volume?: number;
220
+ equalizer?: EQBand[];
221
+ karaoke?: KaraokeFilter;
222
+ timescale?: TimescaleFilter;
223
+ tremolo?: FreqFilter;
224
+ vibrato?: FreqFilter;
225
+ rotation?: RotationFilter;
226
+ distortion?: DistortionFilter;
227
+ channelMix?: ChannelMixFilter;
228
+ lowPass?: LowPassFilter;
229
+ echo: EchoFilter;
230
+ reverb: ReverbFilter;
231
+ }