feat: enchance autocompletion & more (#103)
All checks were successful
ci/woodpecker/push/publish Pipeline was successful

- Fixing autocompletion crash
- Increase autocompletion response from 10 to 25
- Remove search constraint introduced in #97

Co-authored-by: Mylloon <kennel.anri@tutanota.com>
Reviewed-on: #103
This commit is contained in:
Mylloon 2023-08-08 22:28:53 +02:00
parent 0904bd0d98
commit d039c064b7
Signed by: Forgejo
GPG key ID: E72245C752A07631
9 changed files with 38 additions and 30 deletions

View file

@ -1,9 +1,9 @@
import { SlashCommandBuilder } from "@discordjs/builders"; import { SlashCommandBuilder } from "@discordjs/builders";
import { Locale } from "discord-api-types/v9"; import { Locale } from "discord-api-types/v9";
import { Client, ChatInputCommandInteraction, EmbedBuilder, Colors } from "discord.js"; import { ChatInputCommandInteraction, Client, Colors, EmbedBuilder } from "discord.js";
import "../../modules/string";
import { getLocale, getLocalizations } from "../../utils/locales"; import { getLocale, getLocalizations } from "../../utils/locales";
import { getFilename } from "../../utils/misc"; import { getFilename } from "../../utils/misc";
import "../../modules/string";
export default { export default {
scope: () => [], scope: () => [],

View file

@ -1,4 +1,5 @@
import { SlashCommandBuilder } from "@discordjs/builders"; import { SlashCommandBuilder } from "@discordjs/builders";
import { Player, SearchResult, useMainPlayer, useQueue } from "discord-player";
import { import {
AutocompleteInteraction, AutocompleteInteraction,
ChatInputCommandInteraction, ChatInputCommandInteraction,
@ -7,10 +8,9 @@ import {
GuildResolvable, GuildResolvable,
VoiceBasedChannel, VoiceBasedChannel,
} from "discord.js"; } from "discord.js";
import { Metadata } from "../../utils/metadata";
import { getLocale, getLocalizations } from "../../utils/locales"; import { getLocale, getLocalizations } from "../../utils/locales";
import { Metadata } from "../../utils/metadata";
import { getFilename } from "../../utils/misc"; import { getFilename } from "../../utils/misc";
import { Player, QueryType, SearchResult, useMainPlayer, useQueue } from "discord-player";
export default { export default {
scope: () => [], scope: () => [],
@ -118,7 +118,6 @@ export default {
const result = await player const result = await player
.search(query, { .search(query, {
requestedBy: interaction.user, requestedBy: interaction.user,
searchEngine: QueryType.YOUTUBE_SEARCH,
}) })
.then((x) => x); .then((x) => x);
@ -151,6 +150,7 @@ export default {
}, },
autocomplete: async (interaction: AutocompleteInteraction) => { autocomplete: async (interaction: AutocompleteInteraction) => {
const loc = getLocale(interaction.client, interaction.locale);
const loc_default = interaction.client.locales.get(interaction.client.config.default_lang); const loc_default = interaction.client.locales.get(interaction.client.config.default_lang);
const filename = getFilename(__filename); const filename = getFilename(__filename);
@ -168,12 +168,12 @@ export default {
const delay = new Promise(function (_, reject) { const delay = new Promise(function (_, reject) {
timeoutId = setTimeout(function () { timeoutId = setTimeout(function () {
reject(new Error()); reject(new Error());
}, 2900); }, 2800);
}); });
/* Create a race between a timeout and the search /* Create a race between a timeout and the search
* At the end, Discord will always receive a response */ * At the end, Discord will always receive a response */
const tracks = await Promise.race([ let tracks = await Promise.race([
delay, delay,
player.search(query, { player.search(query, {
requestedBy: interaction.user, requestedBy: interaction.user,
@ -187,15 +187,22 @@ export default {
return []; return [];
}); });
// Returns a list of songs with their title // If tracks found
return interaction.respond( if (tracks.length > 0) {
tracks.slice(0, 10).map((t) => ({ // Slice the list if needed
name: t.title, if (tracks.length > 25) {
value: t.url, tracks = tracks.slice(0, 25);
})) }
);
} else { // Returns a list of songs with their title and author
return interaction.respond([]); return interaction.respond(
tracks.map((t) => ({
name: `${t.title}${t.author}`,
value: t.url,
}))
);
}
} }
return interaction.respond([{ name: loc.get("c_play9"), value: query }]);
}, },
}; };

View file

@ -1,9 +1,9 @@
import { SlashCommandBuilder } from "@discordjs/builders"; import { SlashCommandBuilder } from "@discordjs/builders";
import { ChatInputCommandInteraction, Client, GuildResolvable } from "discord.js";
import { Metadata } from "../../utils/metadata";
import { getLocale, getLocalizations } from "../../utils/locales";
import { getFilename } from "../../utils/misc";
import { Player, useMainPlayer } from "discord-player"; import { Player, useMainPlayer } from "discord-player";
import { ChatInputCommandInteraction, Client, GuildResolvable } from "discord.js";
import { getLocale, getLocalizations } from "../../utils/locales";
import { Metadata } from "../../utils/metadata";
import { getFilename } from "../../utils/misc";
export default { export default {
scope: () => [], scope: () => [],

View file

@ -1,4 +1,4 @@
import { Client, GuildMember, Message, TextBasedChannel, EmbedBuilder } from "discord.js"; import { Client, EmbedBuilder, GuildMember, Message, TextBasedChannel } from "discord.js";
import { getLocale } from "../../utils/locales"; import { getLocale } from "../../utils/locales";
import { isImage, userWithNickname } from "../../utils/misc"; import { isImage, userWithNickname } from "../../utils/misc";
import { showDate } from "../../utils/time"; import { showDate } from "../../utils/time";

View file

@ -1,8 +1,8 @@
import loadClient, { quit } from "./utils/client";
import loadEvents from "./events/loader";
import loadModals from "./modals/loader";
import loadButtons from "./buttons/loader"; import loadButtons from "./buttons/loader";
import loadCommands from "./commands/loader"; import loadCommands from "./commands/loader";
import loadEvents from "./events/loader";
import loadModals from "./modals/loader";
import loadClient, { quit } from "./utils/client";
import { logStart } from "./utils/misc"; import { logStart } from "./utils/misc";

View file

@ -90,6 +90,7 @@
"c_play6": "Le bot ne joue rien en ce moment.", "c_play6": "Le bot ne joue rien en ce moment.",
"c_play7": "Joue actuellement", "c_play7": "Joue actuellement",
"c_play8": "Demandé par", "c_play8": "Demandé par",
"c_play9": "Aucun résultat trouvé",
"c_stop_name": "stop", "c_stop_name": "stop",
"c_stop_desc": "Stop la musique", "c_stop_desc": "Stop la musique",

View file

@ -1,6 +1,6 @@
import { Client } from "discord.js";
import { readdir } from "fs/promises"; import { readdir } from "fs/promises";
import { removeExtension } from "../utils/misc"; import { removeExtension } from "../utils/misc";
import { Client } from "discord.js";
export default async (client: Client) => { export default async (client: Client) => {
// Dossier des modals // Dossier des modals

View file

@ -1,5 +1,5 @@
import { Collection } from "discord.js";
import { SlashCommandBuilder } from "@discordjs/builders"; import { SlashCommandBuilder } from "@discordjs/builders";
import { Collection } from "discord.js";
import { Database } from "sqlite3"; import { Database } from "sqlite3";
export {}; export {};

View file

@ -1,10 +1,10 @@
import { lyricsExtractor } from "@discord-player/extractor";
import { Player } from "discord-player";
import { Client, Collection, GatewayIntentBits } from "discord.js"; import { Client, Collection, GatewayIntentBits } from "discord.js";
import { readFileSync } from "fs"; import { readFileSync } from "fs";
import { loadLocales } from "./locales";
import "../modules/client";
import { Database } from "sqlite3"; import { Database } from "sqlite3";
import { Player } from "discord-player"; import "../modules/client";
import { lyricsExtractor } from "@discord-player/extractor"; import { loadLocales } from "./locales";
/** Creation of the client and definition of its properties. */ /** Creation of the client and definition of its properties. */
export default async () => { export default async () => {