Files
toho-miku/events/autocompleteRequest.js

68 lines
2.9 KiB
JavaScript

const { InteractionType } = require('discord.js');
const { UserUtils, SearchUtils } = require('../util');
const { Character, Group } = require('../models');
module.exports = {
name: "interactionCreate",
async execute (interaction) {
if (interaction.type !== InteractionType.ApplicationCommandAutocomplete) return;
let isRegistered = await UserUtils.registrationCheck(interaction);
if (!isRegistered) return;
console.log(`Autocomplete request from ${interaction.user.tag} (${interaction.user.id}) for ${interaction.commandName} with ${interaction.options.getFocused(true).value}`);
let user = await UserUtils.getUserByDiscordId(interaction.member.id);
let focusedOption = interaction.options.getFocused(true);
let choices = [];
if (interaction.commandName === "burn") {
choices = (await SearchUtils.findCards(focusedOption, { user: user, ownedOnly: true }))["choices"];
}
if (interaction.commandName === "trade") {
if (focusedOption.name === "card") {
choices = (await SearchUtils.findCards(focusedOption, { user: user, ownedOnly: true }))["choices"];
}
}
if (interaction.commandName === 'view') {
const viewType = interaction.options.getString('type');
switch (viewType) {
case 'card':
choices = (await SearchUtils.findCards(focusedOption, { user: user}))["choices"];
break;
case 'character':
choices = (await SearchUtils.findByName(Character, focusedOption.value))["choices"];
break;
case 'group':
choices = (await SearchUtils.findByName(Group, focusedOption.value))["choices"];
break;
}
}
if (interaction.commandName === 'wishlist') {
choices = (await SearchUtils.findByName(Character, focusedOption.value))["choices"];
}
if (interaction.commandName === 'collection') {
const character = interaction.options.getString('character');
const group = interaction.options.getString('group');
const quality = interaction.options.getString('quality');
//TODO: avoid duplicate code hehe
switch (focusedOption.name) {
case 'character':
choices = (await SearchUtils.findByName(Character, focusedOption.value))["choices"];
break;
case 'group':
choices = (await SearchUtils.findByName(Group, focusedOption.value))["choices"];
break;
}
}
if (choices.length > 0) {
choices = choices.splice(0,10);
console.log(choices);
await interaction.respond(choices);
}
return;
},
}