matrix-spam-ml

git clone git://archive.git.mtrnord.blog/MTRNord/matrix-spam-ml.git
Log | Files | Refs | Submodules | README | LICENSE

commit aa9282e06910c6d7d1bc0f6b71780ef23bd5a24d
parent df29ac59f4c7cf4da467b1755ca5d63e4b710cf1
Author: MTRNord <mtrnord1@gmail.com>
Date:   Sat, 10 Dec 2022 20:18:46 +0100

Remove dist folder

Diffstat:
M.gitignore | 1+
Dbot/dist/index.js | 34----------------------------------
Dbot/dist/index.js.map | 2--
Mbot/src/index.ts | 3++-
4 files changed, 3 insertions(+), 37 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -11,3 +11,4 @@ node_modules ml-bot.json config.yaml ml-bot-store +dist diff --git a/bot/dist/index.js b/bot/dist/index.js @@ -1,33 +0,0 @@ -import { MatrixClient, SimpleFsStorageProvider, AutojoinRoomsMixin, MessageEvent, } from "matrix-bot-sdk"; -import { readFile } from "fs/promises"; -import { load } from "js-yaml"; -import * as tf from "@tensorflow/tfjs-node"; -const config = load(await readFile("./config.yaml", "utf8")); -const homeserverUrl = config.homeserver; -const accessToken = config.accessToken; -const storage = new SimpleFsStorageProvider("ml-bot.json"); -const model = await tf.node.loadSavedModel(config.modelPath); -const client = new MatrixClient(homeserverUrl, accessToken, storage); -AutojoinRoomsMixin.setupOnClient(client); -client.on("room.message", handleMessage); -client.start().then(() => console.log("Bot started!")); -async function handleMessage(roomId, event) { - if (event['content']?.['msgtype'] !== 'm.text') - return; - if (event['sender'] === await client.getUserId()) - return; - const body = event['content']['body']; - console.log(`Checking: "${body}"`); - const data = tf.tensor([body]); - const prediction = model.predict(data); - const prediction_data = await prediction.array(); - console.log(`Prediction: ${prediction_data}`); - const message = new MessageEvent(event); - const textEvent = new MessageEvent(message.raw); - if (((prediction_data[0] ?? [])[0] ?? 0) > 0.8) { - await client.unstableApis.addReactionToEvent(roomId, textEvent.eventId, "Classified Spam"); - } - else { - } -} -//# sourceMappingURL=index.js.map -\ No newline at end of file diff --git a/bot/dist/index.js.map b/bot/dist/index.js.map @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,GAGf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAS5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAW,CAAC;AAKvE,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;AAGxC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAKvC,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,aAAa,CAAC,CAAC;AAI3D,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAK7D,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,aAAa,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AACrE,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAGzC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAGzC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AAGvD,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,KAAU;IAEnD,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,QAAQ;QAAE,OAAO;IACvD,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,MAAM,MAAM,CAAC,SAAS,EAAE;QAAE,OAAO;IAEzD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,CAAA;IAGlC,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9B,MAAM,UAAU,GAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAiB,CAAC;IACrE,MAAM,eAAe,GAAe,MAAM,UAAU,CAAC,KAAK,EAAgB,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,eAAe,eAAe,EAAE,CAAC,CAAC;IAG9C,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,YAAY,CAA6B,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5E,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE;QAC5C,MAAM,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAA;KAC7F;SAAM;KAEN;AAGL,CAAC"} -\ No newline at end of file diff --git a/bot/src/index.ts b/bot/src/index.ts @@ -34,6 +34,7 @@ const storage = new SimpleFsStorageProvider("ml-bot.json"); // Broken //const cryptoProvider = new RustSdkCryptoStorageProvider("./ml-bot-store"); +tf.enableProdMode() const model = await tf.node.loadSavedModel(config.modelPath); // Finally, let's create the client and set it to autojoin rooms. Autojoining is typical of bots to ensure @@ -59,7 +60,7 @@ async function handleMessage(roomId: string, event: any) { // Check if spam const data = tf.tensor([body]) - const prediction: Tensor<Rank> = model.predict(data) as Tensor<Rank>; + const prediction: Tensor<Rank.R2> = model.predict(data) as Tensor<Rank.R2>; const prediction_data: number[][] = await prediction.array() as number[][]; console.log(`Prediction: ${prediction_data}`);