Tagged release & minor clean up.

This commit is contained in:
Vladimir Eremin committed 2022-10-22 03:01:06 +03:00
1 parent 379c9ff9e6
commit 617be0d9a5
10 files changed
+148 -175

No files matched your search

+15
View File
@@ -0,0 +1,15 @@
{
"env": { "browser": true, "es2021": true },
"extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
"parser": "@typescript-eslint/parser",
"parserOptions": { "ecmaVersion": "latest", "sourceType": "module" },
"plugins": ["@typescript-eslint"],
"rules": {
"indent": ["error", 4],
"linebreak-style": ["error", "windows"],
"quotes": ["error", "double"],
"semi": ["error", "always"],
"brace-style": ["error", "stroustrup"],
"arrow-body-style": ["error", "as-needed"]
}
}
-25
View File
@@ -1,25 +0,0 @@
env:
browser: true
es2021: true
extends:
- eslint:recommended
- plugin:@typescript-eslint/recommended
parser: '@typescript-eslint/parser'
parserOptions:
ecmaVersion: latest
sourceType: module
plugins:
- '@typescript-eslint'
rules:
indent:
- error
- 4
linebreak-style:
- error
- windows
quotes:
- error
- double
semi:
- error
- always
+1 -1
View File
@@ -13,7 +13,7 @@ RUN chmod a+rx /usr/src/app/bin/youtube-dl
COPY package*.json ./ COPY package*.json ./
RUN npm install RUN npm ci
COPY . . COPY . .
run npm run build run npm run build
-1
View File
@@ -1 +0,0 @@
worker: npm run start
+14 -5
View File
@@ -1,7 +1,16 @@
# Quetza - 2205.3 <soundrewrite> # Quetza - 2210.1 <soundrewrite>
> _**Higher perfomance - better design.**_ _Neat typescript discord bot._
## About
- Base player features.
- Play music from YouTube and many other sites.
- Lots of different filters _(nightcore, earrape etc.)_.
- Slash commands.
## Links ## Links
**[Licence](https://github.com/unknowableshade/5a0b-bot/blob/master/LICENSE)** - **[Dependencies](https://github.com/unknowableshade/quetza-bot/blob/master/package.json)**
- **[Docker](https://hub.docker.com/repository/docker/unknowableshade/quetza-bot)**
- **[Licence](https://github.com/unknowableshade/5a0b-bot/blob/master/LICENSE)**
+4 -2
View File
@@ -18,13 +18,15 @@ export async function run(client: Client, ctx: CommandInteraction) {
player.connect(channel); player.connect(channel);
await ctx.editReply({ embeds: [I18n.en.okConnected(channel.name)] }); await ctx.editReply({ embeds: [I18n.en.okConnected(channel.name)] });
} else { }
else {
client.modules.music.del(ctx.guild.id); client.modules.music.del(ctx.guild.id);
await ctx.editReply({ embeds: [I18n.en.notConnected()] }); await ctx.editReply({ embeds: [I18n.en.notConnected()] });
return undefined; return undefined;
} }
} else { }
else {
await ctx.editReply({ embeds: [I18n.en.wasConnected()] }); await ctx.editReply({ embeds: [I18n.en.wasConnected()] });
} }
+4 -2
View File
@@ -11,7 +11,8 @@ function argumentsResolver(args: ytdlArgs): string[] {
return options.map(([key, value]) => { return options.map(([key, value]) => {
if (typeof value === "boolean" && value) { if (typeof value === "boolean" && value) {
return `--${key.split(/(?=[A-Z])/).join("-")}`.toLowerCase(); return `--${key.split(/(?=[A-Z])/).join("-")}`.toLowerCase();
} else { }
else {
return `--${key return `--${key
.split(/(?=[A-Z])/) .split(/(?=[A-Z])/)
.join("-")}=${value}`.toLowerCase(); .join("-")}=${value}`.toLowerCase();
@@ -29,7 +30,8 @@ async function ytdlExec(
[query].concat(argumentsResolver(args)) [query].concat(argumentsResolver(args))
); );
return JSON.parse(executable.stdout); return JSON.parse(executable.stdout);
} catch (error) { }
catch (error) {
console.log(error); console.log(error);
return undefined; return undefined;
} }
+98 -133
View File
@@ -7,74 +7,58 @@ import { EmbedBuilder } from "discord.js";
export default class I18n { export default class I18n {
public static en = { public static en = {
nowPlaying: (track: track) => { nowPlaying: (track: track) => new EmbedBuilder()
return new EmbedBuilder() .setColor("LuminousVividPink")
.setColor("LuminousVividPink") .setAuthor({
iconURL: track.requester.avatarURL() || undefined,
name: track.requester.tag,
})
.setTitle(track.title)
.setURL(track.url)
.setDescription("**playing now.**")
.setThumbnail(track.thumbnail),
cleared: (amount: number) => new EmbedBuilder()
.setColor("Green")
.setTitle(
`**♻️ ${amount} tracks have been cleared from the queue.**`
)
.setTimestamp(new Date()),
okConnected: (channel: string) => new EmbedBuilder()
.setColor("Green")
.setTitle(`**✅ Successfuly connected to:** _${channel}_.`),
notConnected: () => new EmbedBuilder()
.setColor("Red")
.setTitle(
"**🚫 Make yourself connected to a voice channel beforehand.**"
),
wasConnected: () => new EmbedBuilder()
.setColor("Yellow")
.setTitle("**⚠️ Already connected to a voice channel.**"),
filtered: (filter?: string) => new EmbedBuilder()
.setColor("Green")
.setTitle(filter ? `**✅ ${filter} was applied to the player.**` : "**✅ All filters were declined.**"),
appended: (track?: track) => !track
? new EmbedBuilder()
.setColor("Red")
.setTitle("**🚫 Could not add track to the queue.**")
: new EmbedBuilder()
.setColor("Green")
.setTitle(track.title)
.setURL(track.url)
.setThumbnail(track.thumbnail)
.setAuthor({ .setAuthor({
iconURL: track.requester.avatarURL() || undefined, iconURL: track.requester.avatarURL() || undefined,
name: track.requester.tag, name: track.requester.tag,
}) })
.setTitle(track.title) .setDescription("**has been added to the queue.**")
.setURL(track.url) .setTimestamp(new Date()),
.setDescription("**playing now.**") jumped: (state: boolean) => state
.setThumbnail(track.thumbnail); ? new EmbedBuilder()
},
cleared: (amount: number) => {
return new EmbedBuilder()
.setColor("Green") .setColor("Green")
.setTitle( .setTitle("_**Perfoming jump.**_")
`**♻️ ${amount} tracks have been cleared from the queue.**` : new EmbedBuilder()
)
.setTimestamp(new Date());
},
okConnected: (channel: string) => {
return new EmbedBuilder()
.setColor("Green")
.setTitle(`**✅ Successfuly connected to:** _${channel}_.`);
},
notConnected: () => {
return new EmbedBuilder()
.setColor("Red") .setColor("Red")
.setTitle( .setTitle("**❗ Bad _jump_ request.**"),
"**🚫 Make yourself connected to a voice channel beforehand.**"
);
},
wasConnected: () => {
return new EmbedBuilder()
.setColor("Yellow")
.setTitle("**⚠️ Already connected to a voice channel.**");
},
filtered: (filter?: string) => {
return new EmbedBuilder()
.setColor("Green")
.setTitle(filter ? `**✅ ${filter} was applied to the player.**` : "**✅ All filters were declined.**");
},
appended: (track?: track) => {
return !track
? new EmbedBuilder()
.setColor("Red")
.setTitle("**🚫 Could not add track to the queue.**")
: new EmbedBuilder()
.setColor("Green")
.setTitle(track.title)
.setURL(track.url)
.setThumbnail(track.thumbnail)
.setAuthor({
iconURL: track.requester.avatarURL() || undefined,
name: track.requester.tag,
})
.setDescription("**has been added to the queue.**")
.setTimestamp(new Date());
},
jumped: (state: boolean) => {
return state
? new EmbedBuilder()
.setColor("Green")
.setTitle("_**Perfoming jump.**_")
: new EmbedBuilder()
.setColor("Red")
.setTitle("**❗ Bad _jump_ request.**");
},
looped: (query: loopOption) => { looped: (query: loopOption) => {
switch (query) { switch (query) {
case "AUTO": { case "AUTO": {
@@ -101,57 +85,43 @@ export default class I18n {
} }
} }
}, },
skipped: () => { skipped: () => new EmbedBuilder()
return new EmbedBuilder() .setColor("Green")
.setTitle("**⏭️ Skipping.**"),
paused: (state: boolean) => state
? new EmbedBuilder()
.setColor("Green") .setColor("Green")
.setTitle("**⏭️ Skipping.**"); .setTitle("_**▶️ Resumed.**_")
}, : new EmbedBuilder()
paused: (state: boolean) => {
return state
? new EmbedBuilder()
.setColor("Green")
.setTitle("_**▶️ Resumed.**_")
: new EmbedBuilder()
.setColor("Yellow")
.setTitle("_**⏸️ Paused.**_");
},
removed: (track?: track) => {
return track
? new EmbedBuilder()
.setColor("Green")
.setTitle(track.title)
.setDescription("**was removed from the queue.**")
.setTimestamp(new Date())
.setURL(track.url)
.setThumbnail(track.thumbnail)
: new EmbedBuilder()
.setColor("Red")
.setTitle("**❗ Bad _remove_ request.**");
},
fastForwarded: (amount: number) => {
return new EmbedBuilder()
.setColor("Blue")
.setTitle(
`**⏩ Fast-forwarding to ${secToISO(
amount
)}**`
);
},
destroyed: () => {
return new EmbedBuilder()
.setColor("Red")
.setTitle("**💀 Destroying the player.**");
},
volumeSet: (amount: number) => {
return new EmbedBuilder()
.setColor("Green")
.setTitle(`**${volumeMoji(amount)} Volume has been set to ${amount}%**`);
},
queueEmpty: () => {
return new EmbedBuilder()
.setColor("Yellow") .setColor("Yellow")
.setTitle("**❎ Queue is empty.**"); .setTitle("_**⏸️ Paused.**_"),
}, removed: (track?: track) => track
? new EmbedBuilder()
.setColor("Green")
.setTitle(track.title)
.setDescription("**was removed from the queue.**")
.setTimestamp(new Date())
.setURL(track.url)
.setThumbnail(track.thumbnail)
: new EmbedBuilder()
.setColor("Red")
.setTitle("**❗ Bad _remove_ request.**"),
fastForwarded: (amount: number) => new EmbedBuilder()
.setColor("Blue")
.setTitle(
`**⏩ Fast-forwarding to ${secToISO(
amount
)}**`
),
destroyed: () => new EmbedBuilder()
.setColor("Red")
.setTitle("**💀 Destroying the player.**"),
volumeSet: (amount: number) => new EmbedBuilder()
.setColor("Green")
.setTitle(`**${volumeMoji(amount)} Volume has been set to ${amount}%**`),
queueEmpty: () => new EmbedBuilder()
.setColor("Yellow")
.setTitle("**❎ Queue is empty.**"),
playerInfo: (player?: Player) => { playerInfo: (player?: Player) => {
if (!player) if (!player)
return new EmbedBuilder() return new EmbedBuilder()
@@ -207,7 +177,8 @@ export default class I18n {
inline: true, inline: true,
}, },
]); ]);
} else { }
else {
return new EmbedBuilder() return new EmbedBuilder()
.setColor("Blue") .setColor("Blue")
.setTitle("💿 Insert the disk...") .setTitle("💿 Insert the disk...")
@@ -289,30 +260,24 @@ export default class I18n {
) )
.setFields( .setFields(
queue.Tracks.slice(page * 10, page * 10 + 10).map( queue.Tracks.slice(page * 10, page * 10 + 10).map(
(value, index) => { (value, index) => ({
return { name: `${
name: `${ page * 10 + index + 1
page * 10 + index + 1 }. ${value.title.padEnd(35)}`,
}. ${value.title.padEnd(35)}`, value: `**[${secToISO(value.duration)}]**`,
value: `**[${secToISO(value.duration)}]**`, })
};
}
) )
); );
}, },
fullyAlone: () => { fullyAlone: () => new EmbedBuilder()
return new EmbedBuilder() .setColor("LuminousVividPink")
.setColor("LuminousVividPink") .setTitle("🥬 I have decided to leave to conserve my energy.")
.setTitle("🥬 I have decided to leave to conserve my energy.") .setDescription(
.setDescription( "_**Since there was nobody in the voice channel.**_"
"_**Since there was nobody in the voice channel.**_" ),
); reshuffle: () => new EmbedBuilder()
}, .setColor("Green")
reshuffle: () => { .setTitle("**✅ Successfuly reshuffled queue.**"),
return new EmbedBuilder()
.setColor("Green")
.setTitle("**✅ Successfuly reshuffled queue.**");
},
ping: (ping?: number) => { ping: (ping?: number) => {
const title = ping ? `I have pinged ${ping} ms late.` : "There is no application."; const title = ping ? `I have pinged ${ping} ms late.` : "There is no application.";
+6 -3
View File
@@ -167,7 +167,8 @@ export default class Player {
requester: requester, requester: requester,
}); });
} }
} else { }
else {
tracks.push({ tracks.push({
url: `https://youtube.com/watch?v=${response.id}`, url: `https://youtube.com/watch?v=${response.id}`,
title: response.title, title: response.title,
@@ -218,7 +219,8 @@ export default class Player {
10_000 10_000
), ),
]); ]);
} catch (error) { }
catch (error) {
this.destroy(); this.destroy();
} }
} }
@@ -307,7 +309,8 @@ export default class Player {
if (this.player.state.status === AudioPlayerStatus.Paused) { if (this.player.state.status === AudioPlayerStatus.Paused) {
this.player.unpause(); this.player.unpause();
return false; return false;
} else { }
else {
this.player.pause(); this.player.pause();
return true; return true;
} }
+6 -3
View File
@@ -34,10 +34,12 @@ export default class Queue {
if (this.position + 1 < this.tracks.length) { if (this.position + 1 < this.tracks.length) {
this.position++; this.position++;
return this.current(); return this.current();
} else if (this.loop === "LOOP") { }
else if (this.loop === "LOOP") {
this.position = 0; this.position = 0;
return this.current(); return this.current();
} else if (this.loop === "NONE") { }
else if (this.loop === "NONE") {
this.position = 0; this.position = 0;
return undefined; return undefined;
} }
@@ -62,7 +64,8 @@ export default class Queue {
public push(tracks: track[], index?: number): track { public push(tracks: track[], index?: number): track {
if (!index || index >= this.tracks.length) { if (!index || index >= this.tracks.length) {
this.tracks = this.tracks.concat(tracks); this.tracks = this.tracks.concat(tracks);
} else { }
else {
this.tracks.splice(Math.max(0, index), 0, ...tracks); this.tracks.splice(Math.max(0, index), 0, ...tracks);
if (this.position >= index) this.position += tracks.length; if (this.position >= index) this.position += tracks.length;
} }