Streamlined joining and leaving autocomplete
- Removed custom command builder as it's no longer needed with autocomplete
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
// Modules
|
// Modules
|
||||||
const { customSlashCommandBuilder } = require('../utilities/customSlashCommandBuilder');
|
const { SlashCommandBuilder } = require('discord.js');
|
||||||
const { DebugBuilder } = require("../utilities/debugBuilder");
|
const { DebugBuilder } = require("../utilities/debugBuilder");
|
||||||
const { getMembersInRole, getAllClientIds } = require("../utilities/utils");
|
const { getMembersInRole, getAllClientIds, filterAutocompleteValues } = require("../utilities/utils");
|
||||||
const { requestOptions, sendHttpRequest } = require("../utilities/httpRequests");
|
const { requestOptions, sendHttpRequest } = require("../utilities/httpRequests");
|
||||||
const { getOnlineNodes, updateNodeInfo, addNodeConnection, getConnectionByNodeId } = require("../utilities/mysqlHandler");
|
const { getOnlineNodes, updateNodeInfo, addNodeConnection, getConnectionByNodeId } = require("../utilities/mysqlHandler");
|
||||||
|
|
||||||
@@ -88,15 +88,42 @@ async function joinServerWrapper(presetName, channelId, clientIdsUsed) {
|
|||||||
exports.joinServerWrapper = joinServerWrapper;
|
exports.joinServerWrapper = joinServerWrapper;
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new customSlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('join')
|
.setName('join')
|
||||||
.setDescription('Join the channel you are in with the preset you choose')
|
.setDescription('Join the channel you are in with the preset you choose')
|
||||||
.addAllSystemPresetOptions(),
|
.addStringOption(option =>
|
||||||
|
option.setName("preset")
|
||||||
|
.setDescription("The preset you would like to listen to")
|
||||||
|
.setAutocomplete(true)
|
||||||
|
.setRequired(true)),
|
||||||
example: "join",
|
example: "join",
|
||||||
isPrivileged: false,
|
isPrivileged: false,
|
||||||
requiresTokens: false,
|
requiresTokens: false,
|
||||||
defaultTokenUsage: 0,
|
defaultTokenUsage: 0,
|
||||||
deferInitialReply: true,
|
deferInitialReply: true,
|
||||||
|
async autocomplete(interaction) {
|
||||||
|
const nodeObjects = await new Promise((recordResolve, recordReject) => {
|
||||||
|
getOnlineNodes((nodeRows) => {
|
||||||
|
recordResolve(nodeRows);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
log.DEBUG("Node objects: ", nodeObjects);
|
||||||
|
var presetsAvailable = [];
|
||||||
|
for (const nodeObject of nodeObjects) {
|
||||||
|
log.DEBUG("Node object: ", nodeObject);
|
||||||
|
for (const presetName in nodeObject.nearbySystems) presetsAvailable.push(nodeObject.nearbySystems[presetName]);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.DEBUG("All Presets available: ", presetsAvailable);
|
||||||
|
|
||||||
|
// Remove duplicates
|
||||||
|
options = [...new Set(presetsAvailable)];
|
||||||
|
log.DEBUG("DeDuped Presets available: ", options);
|
||||||
|
|
||||||
|
// Filter the results to what the user is entering
|
||||||
|
filterAutocompleteValues(interaction, options);
|
||||||
|
|
||||||
|
},
|
||||||
async execute(interaction) {
|
async execute(interaction) {
|
||||||
try{
|
try{
|
||||||
const guildId = interaction.guild.id;
|
const guildId = interaction.guild.id;
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
// Modules
|
// Modules
|
||||||
const { customSlashCommandBuilder } = require('../utilities/customSlashCommandBuilder');
|
const { SlashCommandBuilder } = require('discord.js');
|
||||||
const { DebugBuilder } = require("../utilities/debugBuilder");
|
const { DebugBuilder } = require("../utilities/debugBuilder");
|
||||||
const { getAllClientIds, getKeyByArrayValue } = require("../utilities/utils");
|
const { getAllClientIds, getKeyByArrayValue, filterAutocompleteValues } = require("../utilities/utils");
|
||||||
const { requestOptions, sendHttpRequest } = require("../utilities/httpRequests");
|
const { requestOptions, sendHttpRequest } = require("../utilities/httpRequests");
|
||||||
const { checkNodeConnectionByClientId, removeNodeConnectionByNodeId, updateNodeInfo, getConnectedNodes, getAllConnections } = require('../utilities/mysqlHandler');
|
const { checkNodeConnectionByClientId, removeNodeConnectionByNodeId, getAllConnections } = require('../utilities/mysqlHandler');
|
||||||
|
|
||||||
// Global Vars
|
// Global Vars
|
||||||
const log = new DebugBuilder("server", "leave");
|
const log = new DebugBuilder("server", "leave");
|
||||||
const logAC = new DebugBuilder("server", "leave_autocorrect");
|
|
||||||
|
|
||||||
async function leaveServerWrapper(clientIdObject) {
|
async function leaveServerWrapper(clientIdObject) {
|
||||||
if (!clientIdObject.clientId || !clientIdObject.name) return log.ERROR("Tried to leave server without client ID and/or Name");
|
if (!clientIdObject.clientId || !clientIdObject.name) return log.ERROR("Tried to leave server without client ID and/or Name");
|
||||||
@@ -34,7 +33,7 @@ async function leaveServerWrapper(clientIdObject) {
|
|||||||
exports.leaveServerWrapper = leaveServerWrapper;
|
exports.leaveServerWrapper = leaveServerWrapper;
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new customSlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('leave')
|
.setName('leave')
|
||||||
.setDescription('Disconnect a bot from the server')
|
.setDescription('Disconnect a bot from the server')
|
||||||
.addStringOption(option =>
|
.addStringOption(option =>
|
||||||
@@ -48,17 +47,12 @@ module.exports = {
|
|||||||
defaultTokenUsage: 0,
|
defaultTokenUsage: 0,
|
||||||
deferInitialReply: true,
|
deferInitialReply: true,
|
||||||
async autocomplete(interaction) {
|
async autocomplete(interaction) {
|
||||||
const focusedValue = interaction.options.getFocused();
|
|
||||||
const connections = await getAllConnections();
|
const connections = await getAllConnections();
|
||||||
const filtered = connections.filter(conn => String(conn.clientObject.name).startsWith(focusedValue)).map(conn => conn.clientObject.name);
|
const options = connections.map(conn => conn.clientObject.name);
|
||||||
logAC.DEBUG("Focused Value: ", focusedValue, connections, filtered);
|
await filterAutocompleteValues(interaction, options);
|
||||||
await interaction.respond(
|
|
||||||
filtered.map(option => ({ name: option, value: option })),
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
async execute(interaction) {
|
async execute(interaction) {
|
||||||
try{
|
try{
|
||||||
const guildId = interaction.guild.id;
|
|
||||||
const botName = interaction.options.getString('bot');
|
const botName = interaction.options.getString('bot');
|
||||||
log.DEBUG("Bot Name: ", botName)
|
log.DEBUG("Bot Name: ", botName)
|
||||||
const clinetIds = await getAllClientIds();
|
const clinetIds = await getAllClientIds();
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
const { SlashCommandBuilder, SlashCommandStringOption } = require('discord.js');
|
|
||||||
const { DebugBuilder } = require("../utilities/debugBuilder");
|
|
||||||
const { BufferToJson } = require("../utilities/utils");
|
|
||||||
const log = new DebugBuilder("server", "customSlashCommandBuilder");
|
|
||||||
|
|
||||||
const { getAllNodes, getAllNodesSync } = require("../utilities/mysqlHandler");
|
|
||||||
|
|
||||||
exports.customSlashCommandBuilder = class customSlashCommandBuilder extends SlashCommandBuilder {
|
|
||||||
constructor() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
async addAllSystemPresetOptions() {
|
|
||||||
const nodeObjects = await new Promise((recordResolve, recordReject) => {
|
|
||||||
getAllNodes((nodeRows) => {
|
|
||||||
recordResolve(nodeRows);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
log.DEBUG("Node objects: ", nodeObjects);
|
|
||||||
var presetsAvailable = [];
|
|
||||||
for (const nodeObject of nodeObjects) {
|
|
||||||
log.DEBUG("Node object: ", nodeObject);
|
|
||||||
for (const presetName in nodeObject.nearbySystems) presetsAvailable.push(nodeObject.nearbySystems[presetName]);
|
|
||||||
}
|
|
||||||
|
|
||||||
log.DEBUG("All Presets available: ", presetsAvailable);
|
|
||||||
|
|
||||||
// Remove duplicates
|
|
||||||
presetsAvailable = [...new Set(presetsAvailable)];
|
|
||||||
log.DEBUG("DeDuped Presets available: ", presetsAvailable);
|
|
||||||
|
|
||||||
this.addStringOption(option => option.setName("preset").setRequired(true).setDescription("The channels"));
|
|
||||||
for (const preset of presetsAvailable){
|
|
||||||
log.DEBUG("Preset: ", preset);
|
|
||||||
this.options[0].addChoices({
|
|
||||||
'name': String(preset),
|
|
||||||
'value': String(preset)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
log.DEBUG("Preset Options: ", this);
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -3,6 +3,7 @@ const { DebugBuilder } = require("../utilities/debugBuilder");
|
|||||||
const { clientObject } = require("./recordHelper");
|
const { clientObject } = require("./recordHelper");
|
||||||
const { readFileSync } = require('fs');
|
const { readFileSync } = require('fs');
|
||||||
const log = new DebugBuilder("server", "utils");
|
const log = new DebugBuilder("server", "utils");
|
||||||
|
const logAC = new DebugBuilder("server", "command-autocorrect");
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
|
||||||
// Convert a JSON object to a buffer for the DB
|
// Convert a JSON object to a buffer for the DB
|
||||||
@@ -117,3 +118,19 @@ exports.getClientObjectByClientID = (clientId) => {
|
|||||||
}
|
}
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
exports.filterAutocompleteValues = async (interaction, options) => {
|
||||||
|
// Get the command used
|
||||||
|
const command = interaction.command;
|
||||||
|
|
||||||
|
// Find values that start with what the user is entering
|
||||||
|
const focusedValue = interaction.options.getFocused();
|
||||||
|
const filtered = options.filter(preset => preset.startsWith(focusedValue));
|
||||||
|
|
||||||
|
// Give the query response to the user
|
||||||
|
logAC.DEBUG("Focused Value: ", command, focusedValue, options, filtered);
|
||||||
|
await interaction.respond(
|
||||||
|
filtered.map(option => ({ name: option, value: option })),
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user