mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-15 17:12:59 -04:00
46 lines
1.6 KiB
JavaScript
46 lines
1.6 KiB
JavaScript
// Operator Command Configuration
|
|
// Purpose: Owns transport-neutral command names used by site chat and optional integrations.
|
|
// Scope: Prevents Discord configuration from defining whether core server commands can be parsed.
|
|
const { loadConfig } = require('../../helpers/configLoader');
|
|
|
|
function getCommandConfig(config = loadConfig()) {
|
|
const commandConfig = config.commands || {};
|
|
const prefix = String(commandConfig.prefix || 'rs').trim() || 'rs';
|
|
const timeStatusCommand = commandConfig.timeStatusCommand === null
|
|
? ''
|
|
: String(commandConfig.timeStatusCommand || 'ts').trim();
|
|
|
|
return { prefix, timeStatusCommand };
|
|
}
|
|
|
|
function parseCommandText(text, config = loadConfig()) {
|
|
const clean = String(text || '').trim();
|
|
const lower = clean.toLowerCase();
|
|
const { prefix, timeStatusCommand } = getCommandConfig(config);
|
|
const normalizedPrefix = prefix.toLowerCase();
|
|
const normalizedTimeStatus = timeStatusCommand.toLowerCase();
|
|
|
|
if (normalizedTimeStatus && lower === normalizedTimeStatus) {
|
|
return { matched: true, kind: 'time-status', body: '', action: 'time-status', tokens: [] };
|
|
}
|
|
|
|
if (!lower.startsWith(normalizedPrefix)) return { matched: false };
|
|
const nextCharacter = clean.charAt(prefix.length);
|
|
if (nextCharacter && !/\s/.test(nextCharacter)) return { matched: false };
|
|
|
|
const body = clean.slice(prefix.length).trim();
|
|
const tokens = body ? body.split(/\s+/) : [];
|
|
return {
|
|
matched: true,
|
|
kind: 'prefixed',
|
|
body,
|
|
action: String(tokens[0] || '').toLowerCase(),
|
|
tokens,
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
getCommandConfig,
|
|
parseCommandText,
|
|
};
|