Skip to content
This repository has been archived by the owner on Sep 3, 2024. It is now read-only.

Commit

Permalink
feat: better autocomplete by caching and debounce
Browse files Browse the repository at this point in the history
  • Loading branch information
mariusbegby committed Aug 25, 2023
1 parent 68a8274 commit a9a9183
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 14 deletions.
36 changes: 31 additions & 5 deletions src/commands/player/lyrics.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');
const { useMainPlayer, useQueue, QueryType } = require('discord-player');
const { lyricsExtractor } = require('@discord-player/extractor');

const recentQueries = new Map();

module.exports = {
isNew: false,
isBeta: false,
Expand All @@ -26,12 +28,27 @@ module.exports = {
),
autocomplete: async ({ interaction }) => {
const query = interaction.options.getString('query', true);
if (query.length < 2) {
return;

const { lastQuery, result, timestamp } = recentQueries.get(interaction.user.id) || {};

if (lastQuery && (query.startsWith(lastQuery) || lastQuery.startsWith(query)) && Date.now() - timestamp < 500) {
logger.debug(
{ action: 'autocomplete_responded' },
`[Shard ${interaction.guild.shardId}] Guild ${interaction.guild.id}> Autocomplete search responded with results from lastQuery for query: '${query}'`
);
return interaction.respond(result);
}

if (query.length < 3) {
logger.debug(
{ action: 'autocomplete_responded' },
`[Shard ${interaction.guild.shardId}] Guild ${interaction.guild.id}> Autocomplete search responded with empty results due to < 3 length for query '${query}'`
);
return interaction.respond([]);
}

const genius = lyricsExtractor();
const lyricsResult = await genius.search(query).catch(() => null);

let response = [];

if (!lyricsResult) {
Expand All @@ -41,7 +58,7 @@ module.exports = {
name:
`${track.title} [Artist: ${track.author}]`.length > 100
? `${track.title}`.slice(0, 100)
: `${track.title} [Author: ${track.author}]`,
: `${track.title} [Artist: ${track.author}]`,
value: track.title.slice(0, 100)
}));
} else {
Expand All @@ -57,7 +74,16 @@ module.exports = {
return interaction.respond([]);
}

logger.debug(`[Shard ${interaction.guild.shardId}] Autocomplete search responded for query: ${query}`);
recentQueries.set(interaction.user.id, {
lastQuery: query,
result: response,
timestamp: Date.now()
});

logger.debug(
{ action: 'autocomplete_responded' },
`[Shard ${interaction.guild.shardId}] Guild ${interaction.guild.id}> Autocomplete search responded for query: '${query}'`
);
return interaction.respond(response);
},
execute: async ({ interaction }) => {
Expand Down
17 changes: 8 additions & 9 deletions src/commands/player/play.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ module.exports = {

const { lastQuery, results, timestamp } = recentQueries.get(interaction.user.id) || {};

if (lastQuery && query.startsWith(lastQuery) && Date.now() - timestamp < 500) {
if (lastQuery && (query.startsWith(lastQuery) || lastQuery.startsWith(query)) && Date.now() - timestamp < 500) {
logger.debug(
{ action: 'autocomplete_responded' },
`[Shard ${interaction.guild.shardId}] Guild ${interaction.guild.id}> Autocomplete search responded with results from lastQuery for query: '${query}'`
);
return results;
return interaction.respond(results);
}

if (query.length < 3) {
Expand All @@ -57,13 +57,6 @@ module.exports = {
}
const searchResults = await player.search(query);

// Store the query and current timestamp for this user.
recentQueries.set(interaction.user.id, {
lastQuery: query,
results: searchResults.tracks.slice(0, 5),
timestamp: Date.now()
});

let response = [];

response = searchResults.tracks.slice(0, 5).map((track) => {
Expand All @@ -79,6 +72,12 @@ module.exports = {
};
});

recentQueries.set(interaction.user.id, {
lastQuery: query,
results: response,
timestamp: Date.now()
});

if (!response || response.length === 0) {
return interaction.respond([]);
}
Expand Down

0 comments on commit a9a9183

Please # to comment.