import config from './config.json' assert {type: "json"}; import { MatrixClient, SimpleFsStorageProvider, AutojoinRoomsMixin } from "matrix-bot-sdk"; import fs from "fs"; import { PythonShell } from 'python-shell'; // import { type } from 'os'; const storage = new SimpleFsStorageProvider("storage.json"); const client = new MatrixClient(config.homeserver, config.token, storage); const pyFile = "generate.py"; AutojoinRoomsMixin.setupOnClient(client); client.start().then(() => console.log(`Client has started!\n`)); const messageCounters = new Map(); // room ID, message count client.on("room.message", (roomId, event) => { if (!event["content"] || event["sender"] === config.user) return; // ? ignore if message sent by bot itself or is empty let messageArray = event["content"]["body"].split(" "); if (!(messageArray[0] === config.prefix)) { messageCounters.set(roomId, (messageCounters.get(roomId) ?? 0) + 1); console.log(`COUNTER:\t${messageCounters.get(roomId)}\t${roomId}\t${event["content"]["body"]}`); fs.appendFile(config.file, event["content"]["body"] + "\n", function (err) { if (err) throw err; }); return; } // ? if message does not start with prefix log it for training messageArray.shift() // ? remove bot's prefix from array // ? send message if: // ? - enough messages have been sent // ? - commanded if (!(messageCounters.get(roomId) % config.frequency) || messageArray[0].toLowerCase() === "speak") { console.log("Generating message..."); const options = { args: [""] }; PythonShell.run(pyFile, options, (err, message) => { if (err) throw err; client.sendText(roomId, message.toString()); console.log("Message sent!"); }); // ? send generated message to room } else if (messageArray[0] === "prompt") { console.log("prompted to generate...") const options = { args: ['prompt', messageArray.join(" ")] }; PythonShell.run(pyFile, options, (err, message) => { if (err) throw err; client.sendText(roomId, message.toString()); console.log("Message sent!"); }); // ? send prompted message to room } else { console.log("Invalid command") } });