diff --git a/.env_example b/.env_example index 41236d3..bb8e7f1 100644 --- a/.env_example +++ b/.env_example @@ -5,4 +5,5 @@ pk_url="https://api.pluralkit.me/v2" token="AAAAAAAAAAAAAAAAAAAA" userId="AAAAAAAAAAAAAAAAAAA" pk_token= "AAAAAAAAAAAAAAAA" -pk_system="AAAAAAAAAAAAAAAA" \ No newline at end of file +pk_system="AAAAAAAAAAAAAAAA" +heartbeat=4500000 \ No newline at end of file diff --git a/index.js b/index.js index 93dc57e..d55675a 100644 --- a/index.js +++ b/index.js @@ -80,7 +80,10 @@ generateResponse = async (target, data) => { axios.post(`${pkUrl}/systems/${config.pk_system}/switches`, JSON.stringify({"members": fronters}), { headers: pkHeader }) - .catch(err => console.error(err.toJSON().message)) + .catch(err => { + if (err.toJSON().status == 400) unknownError400() + else console.error(err.message) + }) response += '' + member.name + ' was added to the front.' return @@ -112,7 +115,10 @@ generateResponse = async (target, data) => { axios.post(`${pkUrl}/systems/${config.pk_system}/switches`, JSON.stringify({ "members": fronters }), { headers: pkHeader }) - .catch(err => console.error(err.message)) + .catch(err => { + if (err.toJSON().status == 400) unknownError400() + else console.error(err.message) + }) response += '' + member.name + ' was removed from the front.' break; @@ -132,7 +138,10 @@ generateResponse = async (target, data) => { axios.post(`${pkUrl}/systems/${config.pk_system}/switches`, JSON.stringify({ "members": fronters }), { headers: pkHeader }) - .catch(err => console.error(err.message)) + .catch(err => { + if (err.toJSON().status == 400) unknownError400() + else console.error(err.message) + }) response += '' + member.name + ' is now the primary fronter.' } } @@ -156,6 +165,10 @@ generateResponse = async (target, data) => { return response } +unknownError400 = () => { + return +} + unknownTarget = (target) => { console.log('::SimplyWS:: Unknown update target: ' + target + '\n::SimplyWS:: Full message: ' + e) } @@ -219,14 +232,10 @@ determineAction = async (eventData, frontData = []) => { } // get the difference between cached history and current front - let diff = calculateDiff(cache.frontHistory, frontData) + let diff = await calculateDiff(cache.frontHistory, frontData) // we handle one thing at a time, although this should be expanded since you can modify multiple custom statuses at once if (diff.length == 1) { - // if there's an endTime, it was a removal event - if (diff[0].content.endTime) { - action = 'remove' - } - else if (diff[0].content.customStatus) { + if (diff[0].content.customStatus) { // check if customStatus value is in cache let foundInCache = Object.keys(cache.frontHistory).filter((key) => { return cache.frontHistory[key] === diff[0].content.customStatus @@ -241,6 +250,12 @@ determineAction = async (eventData, frontData = []) => { console.error('::SimplyWS:: Unrecognized diff: ' + JSON.stringify(diff)) } } + else { + // if there's an endTime, it was a removal event + if (eventData.content.endTime && !eventData.content.live) { + action = 'remove' + } + } return action } @@ -256,17 +271,20 @@ const transform = require('lodash.transform') const isEqual = require('lodash.isequal') const isArray = require('lodash.isarray') const isObject = require('lodash.isobject') -calculateDiff = (origObj, newObj) => { - changes = (newObj, origObj) => { - let arrayIndexCounter = 0 - return transform(newObj, function (result, value, key) { - if (!isEqual(value, origObj[key])) { - let resultKey = isArray(origObj) ? arrayIndexCounter++ : key - result[resultKey] = (isObject(value) && isObject(origObj[key])) ? changes(value, origObj[key]) : value - } - }) - } - return changes(newObj, origObj) +const { PassThrough } = require('stream') +calculateDiff = async (origObj, newObj) => { + return new Promise(function (resolve) { + changes = (newObj, origObj) => { + let arrayIndexCounter = 0 + return transform(newObj, function (result, value, key) { + if (!isEqual(value, origObj[key])) { + let resultKey = isArray(origObj) ? arrayIndexCounter++ : key + result[resultKey] = (isObject(value) && isObject(origObj[key])) ? changes(value, origObj[key]) : value + } + }) + } + resolve(changes(newObj, origObj)) + }) } main() \ No newline at end of file diff --git a/package.json b/package.json index cfbb48a..a2d05aa 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,6 @@ "lodash.isequal": "^4.5.0", "lodash.isobject": "^3.0.2", "lodash.transform": "^4.6.0", - "pkapi.js": "^3.1.0", "ws": "^8.5.0" }, "optionalDependencies": { diff --git a/vercel.json b/vercel.json deleted file mode 100644 index 05d15bc..0000000 --- a/vercel.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "version": 2, - "builds": [ - { - "src": "./index.js", - "use": "@vercel/node" - } - ], - "routes": [ - { - "src": "/(.*)", - "dest": "/" - } - ] -} \ No newline at end of file