60 lines
2.3 KiB
JavaScript
60 lines
2.3 KiB
JavaScript
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")
|
|
}
|
|
});
|
|
|