From 900c1e976ede1cdf6c9931e174e3878dd4133dcd Mon Sep 17 00:00:00 2001 From: ChrisChrome Date: Tue, 28 Oct 2025 07:16:00 -0600 Subject: [PATCH] Use ami package --- index.js | 90 ++++++++++------------------------------------- package-lock.json | 10 ++++++ package.json | 1 + 3 files changed, 30 insertions(+), 71 deletions(-) diff --git a/index.js b/index.js index 146a8a0..74149ca 100644 --- a/index.js +++ b/index.js @@ -1,81 +1,29 @@ -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 }); const cfTypes = { - CF: "Unconditional", - CFB: "Busy", - CFU: "Unavailable", + CF: "Unconditional", + CFB: "Busy", + 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] "` 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(); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 60f06ee..52dd274 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index 1019a64..46daa54 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "license": "ISC", "type": "commonjs", "dependencies": { + "ami": "^1.0.0", "discord.js": "^14.24.0", "dotenv": "^17.2.3" }