import { MatrixClient, MatrixEvent, RoomEvent, type IContent, } from "matrix-js-sdk"; import type { ICallback, ICallbackStore } from "./types.js"; import { registerModuleBase } from "./base/base.js"; import { registerModuleAdmin } from "./admin/admin.js"; import { registerModuleUser } from "./user/user.js"; import { registerModuleAI } from "./ai/ai.js"; import { checkRoles, getUserById } from "../helpers.js"; import { onAnyMessage, onMissingRole } from "./global.js"; import { config } from "../config.js"; const callbacks: ICallbackStore = { messageCallbacks: [], }; const checkMessageCallback = ( client: MatrixClient, text: string, callback: ICallback, roomId: string, sender: string, ) => { if (callback.allowedRooms && !callback.allowedRooms.includes(roomId)) { return false; } if ( callback.startConditions && !callback.startConditions.some((condition) => text.toLowerCase().startsWith(condition), ) ) { return false; } if ( callback.includesConditions && !callback.includesConditions.some((condition) => text.toLowerCase().includes(condition), ) ) { return false; } if (callback.allowedRoles && !checkRoles(callback.allowedRoles, sender)) { onMissingRole(client, getUserById(sender).role, roomId); return false; } return true; }; const registerModules = (client: MatrixClient) => { const startupTime = Date.now(); client.on(RoomEvent.Timeline, (event: MatrixEvent) => { const ts = event.getTs(); if (ts < startupTime) { return; } if (event.getType() !== "m.room.message") { return; } const content = event.getContent(); const body = content?.body; if (!body || !client) { return; } const roomId = event.getRoomId(); const sender = event.getSender(); if (!roomId || !sender) { return; } if (sender === config.userId) { return; } console.log(`Message from ${sender} in ${roomId}: ${body}`); onAnyMessage(client, body.toString(), roomId, sender); callbacks.messageCallbacks.forEach((callback) => { if ( checkMessageCallback( client, body.toString(), callback, roomId, sender, ) ) { callback.callbackFunc(body.toString(), roomId, sender); } }); }); registerModuleBase(client, callbacks); registerModuleAdmin(client, callbacks); registerModuleUser(client, callbacks); registerModuleAI(client, callbacks); }; export { registerModules };