Use ami package
This commit is contained in:
parent
fe26d3fe1e
commit
900c1e976e
84
index.js
84
index.js
|
|
@ -1,5 +1,16 @@
|
|||
require("dotenv").config({quiet: true});
|
||||
const exec = require("child_process").exec;
|
||||
require("dotenv").config({ quiet: true });
|
||||
const AMI = require("ami").AMISocket
|
||||
const sock = new AMI({
|
||||
connect: {
|
||||
host: '127.0.0.1',
|
||||
port: 5038
|
||||
},
|
||||
credentials: {
|
||||
username: process.env.AMI_USER,
|
||||
secret: process.env.AMI_SECRET
|
||||
},
|
||||
events: true
|
||||
})
|
||||
const Discord = require("discord.js");
|
||||
const hook = new Discord.WebhookClient({ url: process.env.DISCORD_WEBHOOK_URL });
|
||||
|
||||
|
|
@ -9,73 +20,10 @@ const cfTypes = {
|
|||
CFU: "Unavailable",
|
||||
}
|
||||
|
||||
const main = async () => {
|
||||
const runAsterisk = (command) =>
|
||||
new Promise((resolve) =>
|
||||
exec(command, (error, stdout, stderr) => resolve({ error, stdout, stderr }))
|
||||
);
|
||||
|
||||
try {
|
||||
var forwards = {};
|
||||
const commands = [
|
||||
'asterisk -x "database show CF"',
|
||||
'asterisk -x "database show CFB"',
|
||||
'asterisk -x "database show CFU"',
|
||||
];
|
||||
for (const command of commands) {
|
||||
const { error, stdout, stderr } = await runAsterisk(command);
|
||||
if (error) {
|
||||
console.error(`Error executing command "${command}": ${error}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
const lines = stdout.split('\n');
|
||||
for (const line of lines) {
|
||||
const match = line.match(/^\/(CF|CFB|CFU)\/(\d+)\s+:\s+(.+)$/);
|
||||
if (match) {
|
||||
const type = match[1];
|
||||
const extension = match[2];
|
||||
const target = match[3];
|
||||
|
||||
forwards[`${type}/${extension}`] = target.replace(/\s+$/, '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Search all forwards for any target that is between 700 and 800. If it exists, log to console and run `asterisk -x "database del CF[U/B] <ext>"` to delete it
|
||||
for (const [key, target] of Object.entries(forwards)) {
|
||||
const targetExt = parseInt(target, 10);
|
||||
if ((targetExt >= 700 && targetExt < 800) || targetExt === 0) { // Also block forwards to 0 (operator line)
|
||||
console.log(`Deleting forward ${key} to target ${target}`);
|
||||
await hook.send(`Fuckass with extension ${key.split('/')[1]} tried to forward to ${target}. ${cfTypes[key.split('/')[0]]} Forward has been deleted.`);
|
||||
const delCommand = `asterisk -x "database del ${key.replace('/', ' ')}"`;
|
||||
const { error, stdout, stderr } = await runAsterisk(delCommand);
|
||||
if (error) {
|
||||
console.error(`Error executing command "${delCommand}": ${error}`);
|
||||
} else {
|
||||
console.log(`Successfully deleted forward ${key}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(`Unexpected error: ${err}`);
|
||||
}
|
||||
setTimeout(main, process.env.CHECK_INTERVAL * 1000); // Run every CHECK_INTERVAL seconds
|
||||
};
|
||||
|
||||
const startup = async () => {
|
||||
// Run `asterisk -x "core show version"` to get the Asterisk version. If it fails, wait 10 seconds before running main again
|
||||
exec('asterisk -x "core show version"', (error, stdout, stderr) => {
|
||||
if (error) {
|
||||
console.error(`Error executing command: ${error}`);
|
||||
console.log("Asterisk is not running. Retrying in 10 seconds...");
|
||||
setTimeout(startup, 10000);
|
||||
return;
|
||||
}
|
||||
const version = stdout.trim();
|
||||
console.log(`Asterisk version: ${version}`);
|
||||
main();
|
||||
});
|
||||
sock.connect().then(() => {
|
||||
console.log(sock.amiVersion)
|
||||
})
|
||||
}
|
||||
|
||||
startup();
|
||||
10
package-lock.json
generated
10
package-lock.json
generated
|
|
@ -9,6 +9,7 @@
|
|||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"ami": "^1.0.0",
|
||||
"discord.js": "^14.24.0",
|
||||
"dotenv": "^17.2.3"
|
||||
}
|
||||
|
|
@ -201,6 +202,15 @@
|
|||
"npm": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ami": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ami/-/ami-1.0.0.tgz",
|
||||
"integrity": "sha512-wkuxJl8ahQ4FYVwXvtJpQ7wuRUAqD30ueVpeJ1t5UyYqjzh+GtmrnaeHrXzzp+KO3ukhHZoMrsZlKB0j91oAlw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/discord-api-types": {
|
||||
"version": "0.38.31",
|
||||
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.31.tgz",
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
"license": "ISC",
|
||||
"type": "commonjs",
|
||||
"dependencies": {
|
||||
"ami": "^1.0.0",
|
||||
"discord.js": "^14.24.0",
|
||||
"dotenv": "^17.2.3"
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue