2 Commits

Author SHA1 Message Date
Logan Cusano
b4e27162aa Update to mysql2 2023-06-17 18:40:09 -04:00
Logan Cusano
bfda15866e Streamlined joining and leaving autocomplete
- Removed custom command builder as it's no longer needed with autocomplete
2023-06-17 17:55:27 -04:00
8 changed files with 60 additions and 68 deletions

View File

@@ -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;

View File

@@ -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 =>
@@ -47,18 +46,13 @@ module.exports = {
requiresTokens: false, requiresTokens: false,
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();

View File

@@ -5,7 +5,7 @@ const { FeedStorage, PostStorage } = require("./libStorage");
const libUtils = require("./libUtils"); const libUtils = require("./libUtils");
const { DebugBuilder } = require("./utilities/debugBuilder"); const { DebugBuilder } = require("./utilities/debugBuilder");
const log = new DebugBuilder("server", "libCore"); const log = new DebugBuilder("server", "libCore");
const mysql = require("mysql"); const mysql = require("mysql2");
const UserAgent = require("user-agents"); const UserAgent = require("user-agents");
process.env.USER_AGENT_STRING = new UserAgent({ platform: 'Win32' }).toString(); process.env.USER_AGENT_STRING = new UserAgent({ platform: 'Win32' }).toString();

View File

@@ -8,7 +8,7 @@ const { RSSSourceRecord, RSSPostRecord } = require("./utilities/recordHelper");
// Storage Specific Modules // Storage Specific Modules
// MySQL // MySQL
const mysql = require("mysql"); const mysql = require("mysql2");
const rssFeedsTable = process.env.DB_RSS_FEEDS_TABLE; const rssFeedsTable = process.env.DB_RSS_FEEDS_TABLE;
const rssPostsTable = process.env.DB_RSS_POSTS_TABLE; const rssPostsTable = process.env.DB_RSS_POSTS_TABLE;

View File

@@ -21,7 +21,7 @@
"jsdoc": "^4.0.2", "jsdoc": "^4.0.2",
"jsonfile": "^6.1.0", "jsonfile": "^6.1.0",
"morgan": "^1.10.0", "morgan": "^1.10.0",
"mysql": "^2.18.1", "mysql2": "^3.3.5",
"node-html-markdown": "^1.3.0", "node-html-markdown": "^1.3.0",
"node-html-parser": "^6.1.5", "node-html-parser": "^6.1.5",
"openai": "^3.2.1", "openai": "^3.2.1",

View File

@@ -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;
}
}

View File

@@ -1,5 +1,5 @@
require('dotenv').config(); require('dotenv').config();
const mysql = require('mysql'); const mysql = require('mysql2');
const utils = require('./utils'); const utils = require('./utils');
const { nodeObject, clientObject, connectionObject } = require("./recordHelper"); const { nodeObject, clientObject, connectionObject } = require("./recordHelper");
const { DebugBuilder } = require("../utilities/debugBuilder"); const { DebugBuilder } = require("../utilities/debugBuilder");

View File

@@ -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
@@ -116,4 +117,20 @@ 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 })),
);
} }