Changes
- Impliment /voice to change voice on account - Fix migrations (kind of)
This commit is contained in:
parent
a43f291835
commit
fdc05cd165
62
index.js
62
index.js
|
@ -19,12 +19,8 @@ db.on("open", () => {
|
||||||
fs.readdirSync("./migrations").forEach((file) => {
|
fs.readdirSync("./migrations").forEach((file) => {
|
||||||
if (file.endsWith(".sql")) {
|
if (file.endsWith(".sql")) {
|
||||||
const migration = fs.readFileSync(`./migrations/${file}`, "utf8");
|
const migration = fs.readFileSync(`./migrations/${file}`, "utf8");
|
||||||
try {
|
|
||||||
db.run(migration)
|
db.run(migration)
|
||||||
console.log(`${colors.cyan("[DB]")} ${file} ${colors.green("executed")}`);
|
console.log(`${colors.cyan("[DB]")} ${file} ${colors.green("executed")}`);
|
||||||
} catch (error) {
|
|
||||||
console.log(`${colors.red("[DB]")} ${file} ${colors.red("failed")}`);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -134,7 +130,7 @@ function sendDemo(accountNumber, transaction, placeName, systemName, zoneNumber,
|
||||||
}
|
}
|
||||||
// Account exists and is verified
|
// Account exists and is verified
|
||||||
// Send the alert
|
// Send the alert
|
||||||
runCommand(ttsCommands[0].replace("%s", `/tmp/${transaction}.wav`), `Hello. This is an automated call from KCA SecuriNet Monitoring. ${systemName} has reported a ${event}, ZONE ${zoneNumber}, ${zoneName}, at ${placeName}`).then((output) => {
|
runCommand(ttsCommands[0].command.replace("%s", `/tmp/${transaction}.wav`), `Hello. This is an automated call from KCA SecuriNet Monitoring. ${systemName} has reported a ${event}, ZONE ${zoneNumber}, ${zoneName}, at ${placeName}`).then((output) => {
|
||||||
runCommand(`ffmpeg -y -i /tmp/${transaction}.wav -ar 8000 -ac 1 -c:a pcm_s16le /tmp/${transaction}-alert.wav`).then(() => {
|
runCommand(`ffmpeg -y -i /tmp/${transaction}.wav -ar 8000 -ac 1 -c:a pcm_s16le /tmp/${transaction}-alert.wav`).then(() => {
|
||||||
runCommand(`rm /tmp/${transaction}.wav`)
|
runCommand(`rm /tmp/${transaction}.wav`)
|
||||||
// strip extension from filename
|
// strip extension from filename
|
||||||
|
@ -208,7 +204,7 @@ function sendAlert(accountNumber, transaction, placeName, systemName, zoneNumber
|
||||||
|
|
||||||
// Account exists and is verified
|
// Account exists and is verified
|
||||||
// Send the alert
|
// Send the alert
|
||||||
runCommand(ttsCommands[row.ttsOverride].value.replace("%s", `/tmp/${transaction}.wav`), `Hello. This is an automated call from KCA SecuriNet Monitoring. ${systemName} has reported a ${event}, ZONE ${zoneNumber}, ${zoneName}, at ${placeName}`).then((output) => {
|
runCommand(ttsCommands[row.ttsOverride].command.replace("%s", `/tmp/${transaction}.wav`), `Hello. This is an automated call from KCA SecuriNet Monitoring. ${systemName} has reported a ${event}, ZONE ${zoneNumber}, ${zoneName}, at ${placeName}`).then((output) => {
|
||||||
runCommand(`ffmpeg -y -i /tmp/${transaction}.wav -ar 8000 -ac 1 -c:a pcm_s16le /tmp/${transaction}-alert.wav`).then(() => {
|
runCommand(`ffmpeg -y -i /tmp/${transaction}.wav -ar 8000 -ac 1 -c:a pcm_s16le /tmp/${transaction}-alert.wav`).then(() => {
|
||||||
runCommand(`rm /tmp/${transaction}.wav`)
|
runCommand(`rm /tmp/${transaction}.wav`)
|
||||||
// strip extension from filename
|
// strip extension from filename
|
||||||
|
@ -271,7 +267,7 @@ function sendTTS(accountNumber, transaction, text) {
|
||||||
} else if (row) {
|
} else if (row) {
|
||||||
// Account exists and is verified
|
// Account exists and is verified
|
||||||
// Send the alert
|
// Send the alert
|
||||||
runCommand(ttsCommands[row.ttsOverride].value.replace("%s", `/tmp/${transaction}.wav`), `Hello. This is an automated call from KCA SecuriNet Monitoring. ${textFiltered}`).then((output) => {
|
runCommand(ttsCommands[row.ttsOverride].command.replace("%s", `/tmp/${transaction}.wav`), `Hello. This is an automated call from KCA SecuriNet Monitoring. ${textFiltered}`).then((output) => {
|
||||||
runCommand(`ffmpeg -y -i /tmp/${transaction}.wav -ar 8000 -ac 1 -c:a pcm_s16le /tmp/${transaction}-tts.wav`).then(() => {
|
runCommand(`ffmpeg -y -i /tmp/${transaction}.wav -ar 8000 -ac 1 -c:a pcm_s16le /tmp/${transaction}-tts.wav`).then(() => {
|
||||||
runCommand(`rm /tmp/${transaction}.wav`)
|
runCommand(`rm /tmp/${transaction}.wav`)
|
||||||
// strip extension from filename
|
// strip extension from filename
|
||||||
|
@ -337,7 +333,7 @@ function sendVerificationCode(account) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// Send verification code to phone number
|
// Send verification code to phone number
|
||||||
runCommand(ttsCommands[row.ttsOverride].value.replace("%s", `/tmp/${account}-code.wav`), `Hello. This is an automated call from KCA SecuriNet Monitoring. To verify your phone number, use the slash verify command on Discord. Your verification code is ${row.verification_code.split("").join(", ")}. Repeating, your code is ${row.verification_code.split("").join(", ")}. Once again, your code is ${row.verification_code.split("").join(", ")}`).then((output) => {
|
runCommand(ttsCommands[row.ttsOverride].command.replace("%s", `/tmp/${account}-code.wav`), `Hello. This is an automated call from KCA SecuriNet Monitoring. To verify your phone number, use the slash verify command on Discord. Your verification code is ${row.verification_code.split("").join(", ")}. Repeating, your code is ${row.verification_code.split("").join(", ")}. Once again, your code is ${row.verification_code.split("").join(", ")}`).then((output) => {
|
||||||
runCommand(`ffmpeg -y -i /tmp/${account}-code.wav -ar 8000 -ac 1 -c:a pcm_s16le /tmp/${account}-verification.wav`).then(() => {
|
runCommand(`ffmpeg -y -i /tmp/${account}-code.wav -ar 8000 -ac 1 -c:a pcm_s16le /tmp/${account}-verification.wav`).then(() => {
|
||||||
runCommand(`rm /tmp/${account}-code.wav`)
|
runCommand(`rm /tmp/${account}-code.wav`)
|
||||||
// strip extension from filename
|
// strip extension from filename
|
||||||
|
@ -661,29 +657,43 @@ client.on("interactionCreate", async (interaction) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case "voice":
|
||||||
|
accountNumber = interaction.options.getString("account_number");
|
||||||
|
db.get("SELECT * FROM accounts WHERE id = ?;", accountNumber, (err, row) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err)
|
||||||
|
} else if (row) {
|
||||||
|
newVoice = interaction.options.getString("voice")
|
||||||
|
if (!ttsCommands[newVoice]) return interaction.reply({ content: "Thats not a valid option", ephemeral: true });
|
||||||
|
console.log(newVoice)
|
||||||
|
db.run("UPDATE accounts SET ttsOverride = ? WHERE id = ?", newVoice, accountNumber, (row, err) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err)
|
||||||
|
return interaction.reply({ content: "An error occured, Contact system administrator", ephemeral: true });
|
||||||
|
}
|
||||||
|
return interaction.reply({ content: "Changed!", ephemeral: true })
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Discord.InteractionType.ApplicationCommandAutocomplete:
|
case Discord.InteractionType.ApplicationCommandAutocomplete:
|
||||||
switch (interaction.commandName) {
|
// Get all active accounts owned by the user
|
||||||
case "deactivate" || "voice":
|
db.all("SELECT * FROM accounts WHERE discord_id = ? AND verified = 1", interaction.user.id, (err, rows) => {
|
||||||
// Get all active accounts owned by the user
|
if (err) {
|
||||||
db.all("SELECT * FROM accounts WHERE discord_id = ? AND verified = 1", interaction.user.id, (err, rows) => {
|
console.error(err);
|
||||||
if (err) {
|
} else if (rows) {
|
||||||
console.error(err);
|
let accountList = [];
|
||||||
} else if (rows) {
|
rows.forEach((row) => {
|
||||||
let accountList = [];
|
accountList.push({
|
||||||
rows.forEach((row) => {
|
name: `${row.id} - ${row.phone}`,
|
||||||
accountList.push({
|
value: `${row.id}`
|
||||||
name: `${row.id} - ${row.phone}`,
|
});
|
||||||
value: `${row.id}`
|
|
||||||
});
|
|
||||||
});
|
|
||||||
interaction.respond(accountList);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
break;
|
interaction.respond(accountList);
|
||||||
}
|
}
|
||||||
break;
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -5,5 +5,8 @@ CREATE TABLE IF NOT EXISTS 'accounts' (
|
||||||
'verified' INTEGER NOT NULL DEFAULT 0,
|
'verified' INTEGER NOT NULL DEFAULT 0,
|
||||||
'verification_code' TEXT,
|
'verification_code' TEXT,
|
||||||
'code_sent_at' TEXT,
|
'code_sent_at' TEXT,
|
||||||
'discord_id' TEXT
|
'discord_id' TEXT,
|
||||||
|
'ttsOverride' INTEGER NOT NULL DEFAULT 0,
|
||||||
|
'cooldown' TEXT,
|
||||||
|
'armState' INTEGER NOT NULL DEFAULT 0
|
||||||
)
|
)
|
|
@ -1,9 +0,0 @@
|
||||||
-- Add ttsOverride column to the accounts table
|
|
||||||
SELECT COUNT(*)
|
|
||||||
FROM pragma_table_info('accounts')
|
|
||||||
WHERE name = 'ttsOverride';
|
|
||||||
|
|
||||||
-- Step 2: If the count is 0, add the 'cooldown' column
|
|
||||||
ALTER TABLE accounts ADD COLUMN ttsOverride TEXT INTEGER NOT NULL DEFAULT 0;
|
|
||||||
-- Retroactively set ttsOverride to 0 for all accounts that dont have it set at all
|
|
||||||
UPDATE 'accounts' SET 'ttsOverride' = 0 WHERE 'ttsOverride' IS NULL;
|
|
11
tts.json
11
tts.json
|
@ -1,10 +1,17 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "Piper - Amy (Default)",
|
"name": "Piper - Amy (Default)",
|
||||||
"value": "piper -m /opt/alarm-monitoring/tts/en_US-amy-medium.onnx -f %s"
|
"value": "0",
|
||||||
|
"command": "piper -m /opt/alarm-monitoring/tts/en_US-amy-medium.onnx -f %s"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Flite - OG SecuriNet Voice",
|
"name": "Flite - OG SecuriNet Voice",
|
||||||
"value": "flite -o %s"
|
"value": "1",
|
||||||
|
"command": "flite -o %s"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "DECTalk Paul",
|
||||||
|
"value": "2",
|
||||||
|
"command": "/usr/bin/dectalk/say -fo %s -"
|
||||||
}
|
}
|
||||||
]
|
]
|
Loading…
Reference in a new issue