fixed after refactor

This commit is contained in:
Andrzej Stepien 2023-08-12 11:43:37 +02:00
parent 2dde207707
commit 6914d2473c
11 changed files with 219 additions and 26 deletions

156
package-lock.json generated
View File

@ -14,6 +14,7 @@
"node-cron": "^3.0.2", "node-cron": "^3.0.2",
"pino": "^8.15.0", "pino": "^8.15.0",
"pino-http": "^8.4.0", "pino-http": "^8.4.0",
"pino-pretty": "^10.2.0",
"promised-sqlite3": "^2.1.0", "promised-sqlite3": "^2.1.0",
"undici": "^5.23.0" "undici": "^5.23.0"
}, },
@ -413,8 +414,7 @@
"node_modules/colorette": { "node_modules/colorette": {
"version": "2.0.19", "version": "2.0.19",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
"integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ=="
"dev": true
}, },
"node_modules/commander": { "node_modules/commander": {
"version": "10.0.1", "version": "10.0.1",
@ -467,6 +467,14 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
}, },
"node_modules/dateformat": {
"version": "4.6.3",
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
"integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
"engines": {
"node": "*"
}
},
"node_modules/debug": { "node_modules/debug": {
"version": "2.6.9", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@ -532,6 +540,14 @@
"iconv-lite": "^0.6.2" "iconv-lite": "^0.6.2"
} }
}, },
"node_modules/end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dependencies": {
"once": "^1.4.0"
}
},
"node_modules/env-paths": { "node_modules/env-paths": {
"version": "2.2.1", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
@ -683,6 +699,11 @@
"node": ">= 0.8" "node": ">= 0.8"
} }
}, },
"node_modules/fast-copy": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.1.tgz",
"integrity": "sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA=="
},
"node_modules/fast-redact": { "node_modules/fast-redact": {
"version": "3.3.0", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz", "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz",
@ -691,6 +712,11 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/fast-safe-stringify": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
},
"node_modules/finalhandler": { "node_modules/finalhandler": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
@ -864,6 +890,52 @@
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
}, },
"node_modules/help-me": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz",
"integrity": "sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==",
"dependencies": {
"glob": "^8.0.0",
"readable-stream": "^3.6.0"
}
},
"node_modules/help-me/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/help-me/node_modules/glob": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/help-me/node_modules/minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"node_modules/http-cache-semantics": { "node_modules/http-cache-semantics": {
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
@ -1088,6 +1160,14 @@
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"optional": true "optional": true
}, },
"node_modules/joycon": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
"integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
"engines": {
"node": ">=10"
}
},
"node_modules/knex": { "node_modules/knex": {
"version": "2.5.1", "version": "2.5.1",
"resolved": "https://registry.npmjs.org/knex/-/knex-2.5.1.tgz", "resolved": "https://registry.npmjs.org/knex/-/knex-2.5.1.tgz",
@ -1290,6 +1370,14 @@
"node": "*" "node": "*"
} }
}, },
"node_modules/minimist": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/minipass": { "node_modules/minipass": {
"version": "3.3.6", "version": "3.3.6",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
@ -1683,6 +1771,45 @@
"process-warning": "^2.0.0" "process-warning": "^2.0.0"
} }
}, },
"node_modules/pino-pretty": {
"version": "10.2.0",
"resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.2.0.tgz",
"integrity": "sha512-tRvpyEmGtc2D+Lr3FulIZ+R1baggQ4S3xD2Ar93KixFEDx6SEAUP3W5aYuEw1C73d6ROrNcB2IXLteW8itlwhA==",
"dependencies": {
"colorette": "^2.0.7",
"dateformat": "^4.6.3",
"fast-copy": "^3.0.0",
"fast-safe-stringify": "^2.1.1",
"help-me": "^4.0.1",
"joycon": "^3.1.1",
"minimist": "^1.2.6",
"on-exit-leak-free": "^2.1.0",
"pino-abstract-transport": "^1.0.0",
"pump": "^3.0.0",
"readable-stream": "^4.0.0",
"secure-json-parse": "^2.4.0",
"sonic-boom": "^3.0.0",
"strip-json-comments": "^3.1.1"
},
"bin": {
"pino-pretty": "bin.js"
}
},
"node_modules/pino-pretty/node_modules/readable-stream": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz",
"integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==",
"dependencies": {
"abort-controller": "^3.0.0",
"buffer": "^6.0.3",
"events": "^3.3.0",
"process": "^0.11.10",
"string_decoder": "^1.3.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/pino-std-serializers": { "node_modules/pino-std-serializers": {
"version": "6.2.2", "version": "6.2.2",
"resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz",
@ -1740,6 +1867,15 @@
"node": ">= 0.10" "node": ">= 0.10"
} }
}, },
"node_modules/pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
"node_modules/qs": { "node_modules/qs": {
"version": "6.11.0", "version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
@ -1906,6 +2042,11 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
}, },
"node_modules/secure-json-parse": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz",
"integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="
},
"node_modules/semver": { "node_modules/semver": {
"version": "7.5.4", "version": "7.5.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
@ -2160,6 +2301,17 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/supports-preserve-symlinks-flag": { "node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",

View File

@ -19,6 +19,7 @@
"node-cron": "^3.0.2", "node-cron": "^3.0.2",
"pino": "^8.15.0", "pino": "^8.15.0",
"pino-http": "^8.4.0", "pino-http": "^8.4.0",
"pino-pretty": "^10.2.0",
"promised-sqlite3": "^2.1.0", "promised-sqlite3": "^2.1.0",
"undici": "^5.23.0" "undici": "^5.23.0"
} }

View File

@ -4,16 +4,14 @@ import makeText from "./makeText.mjs"
import insertPublished from "./insertPublished.mjs" import insertPublished from "./insertPublished.mjs"
import logger from "./logger.mjs" import logger from "./logger.mjs"
import todaysPromptAlreadyPublished from "./todaysPromptAlreadyPublished.mjs" import todaysPromptAlreadyPublished from "./todaysPromptAlreadyPublished.mjs"
const maxCount = 30000000
const minCount = 200000
const spamMode = false
export default async function checkAndPublish () { export default async function checkAndPublish () {
logger.trace("checkAndPublish called") logger.trace("checkAndPublish called")
logger.trace(todaysPromptAlreadyPublished()) logger.trace(todaysPromptAlreadyPublished())
if(!await todaysPromptAlreadyPublished()){ if(!await todaysPromptAlreadyPublished()){
try { try {
const prompt = await getNewPrompt({ minCount, maxCount, rarityBias: 0.7 }) const prompt = await getNewPrompt()
try { try {
const text = makeText(prompt) const text = makeText(prompt)
try { try {

6
src/config.mjs Normal file
View File

@ -0,0 +1,6 @@
export default {
maxCount : 30000000,
minCount : 200000,
rarityBias: 0.7,
spamMode : false
}

View File

@ -14,7 +14,7 @@ setGlobalDispatcher(agent)
export default async function createNote(text) { export default async function createNote(text) {
const childLogger = logger.child({text}) const childLogger = logger.child({text})
childLogger.trace("createNote called") childLogger.trace("createNote called")
const url = 'https://localhost:80/api/notes/create' const url = 'http://localhost:3000/api/notes/create'
const params = { const params = {
text: text, text: text,
} }

Binary file not shown.

View File

@ -1,5 +1,6 @@
import logger from "./logger.mjs" import logger from "./logger.mjs"
import { db } from "./db.mjs" import { db } from "./db.mjs"
import config from "./config.mjs"
const blocklist = db.union([ const blocklist = db.union([
db('bad_words').select('word'), db('bad_words').select('word'),
@ -8,14 +9,15 @@ const blocklist = db.union([
]) ])
export default async () => { export default async () => {
logger.trace("getAcceptablePrompt called")
return db('dictionary') return db('dictionary')
.select('*') .select('*')
.where({ .where({
derivative: 0, derivative: 0,
scientific: 0, scientific: 0,
}) })
.andWhere('count', '<', maxCount) .andWhere('count', '<', config.maxCount)
.andWhere('count', '>', minCount) .andWhere('count', '>', config.minCount)
.andWhere('word', 'not in', blocklist) .andWhere('word', 'not in', blocklist)
.whereRaw('length(word) > 3') .whereRaw('length(word) > 3')
.whereNotNull('pronunciation') .whereNotNull('pronunciation')

View File

@ -1,9 +1,9 @@
import logger from "./logger.mjs" import logger from "./logger.mjs"
import getAcceptablePrompts from "./getAcceptablePrompts.mjs" import getAcceptablePrompts from "./getAcceptablePrompts.mjs"
import config from "./config.mjs"
export default async function getNewPrompt({ minCount = 200000, maxCount = 30000000, rarityBias = 0.5 }) { export default async function getNewPrompt() {
const childLogger = logger.child({minCount,maxCount,rarityBias}) logger.trace("getNewPrompt called")
childLogger.trace("getNewPrompt called")
const getBiasedRng = (min, max, bias, influence) => { const getBiasedRng = (min, max, bias, influence) => {
const random = Math.random() * (max - min) + min const random = Math.random() * (max - min) + min
@ -12,7 +12,7 @@ export default async function getNewPrompt({ minCount = 200000, maxCount = 30000
} }
const randomEntry = (array) => { const randomEntry = (array) => {
const random = getBiasedRng(0, 1, rarityBias, 1) const random = getBiasedRng(0, 1, config.rarityBias, 1)
const mix = Math.random() const mix = Math.random()
return array[ return array[
parseInt( parseInt(

View File

@ -3,6 +3,7 @@ import bodyParser from "body-parser";
import logger from "./logger.mjs"; import logger from "./logger.mjs";
import pinoHTTP from 'pino-http' import pinoHTTP from 'pino-http'
import start from "./start.mjs"; import start from "./start.mjs";
import receiveMention from "./social-interaction/receiveMention.mjs";
const app = express() const app = express()
const port = 4000 const port = 4000
app.use(bodyParser.json()) app.use(bodyParser.json())
@ -12,6 +13,7 @@ app.use(
}) })
) )
app.post('/api', (req,res) => { app.post('/api', (req,res) => {
receiveMention(req.body)
logger.info("webhook received:",req.body.body.note.text) logger.info("webhook received:",req.body.body.note.text)
res.sendStatus(200) res.sendStatus(200)
}) })

View File

@ -4,19 +4,25 @@ import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url); const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename); const __dirname = path.dirname(__filename);
const fileTransport = pino.transport({ // const transport = pino.transport({
target: 'pino/file', // targets: [{
options: { destination: `${__dirname}/app.log` }, // level: 'trace',
}); // target: 'pino-pretty' // must be installed separately
// }, {
export default pino({ // level: 'trace',
level: process.env.PINO_LOG_LEVEL || 'trace', // target: 'pino/file',
formatters: { // options: { destination: `${__dirname}/app.log` }
// }]
// })
export default pino(
{
level: 'trace',
formatters: {
level: (label) => { level: (label) => {
return { severity: label.toUpperCase() }; return { level: label.toUpperCase() };
}, },
},
timestamp: pino.stdTimeFunctions.isoTime,
}, },
timestamp: pino.stdTimeFunctions.isoTime, //pino.destination(`${__dirname}/app.log`)
}, );
fileTransport
)

View File

@ -0,0 +1,26 @@
import logger from "../logger.mjs"
import getAcceptablePrompts from "../getAcceptablePrompts.mjs"
import { checkSpelling } from "spellchecker"
export default async function (note) {
const childLogger = logger.child({note})
childLogger.trace("receiveMention called")
const textArray = note.text
.replace(/@[a-z,A-Z,0-9]* /g, "")
.trim()
.match(/[a-z]*/ig)
if(textArray.length===1){
const word = textArray[0]
if(checkSpelling(word)){
if(await getAcceptablePrompts().indexOf(word)!=-1){
}
}
//ETC
}else if(textArray.length>1){
//"Please reply with one word, I'm only a bot etc etc"
}
}