Initial code

This commit is contained in:
Aslan 2025-12-23 07:18:10 -05:00
commit 1f20a611da
26 changed files with 1050 additions and 0 deletions

102
src/modules/module.ts Normal file
View file

@ -0,0 +1,102 @@
import {
MatrixClient,
MatrixEvent,
RoomEvent,
type IContent,
} from "matrix-js-sdk";
import { registerModuleTest } from "./base/base.js";
import type { ICallback, ICallbackStore } from "./types.js";
import { registerModuleAdmin } from "./admin/admin.js";
import { registerModuleUser } from "./user/user.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.startCondition && !text.startsWith(callback.startCondition)) {
return false;
}
if (
callback.includesCondition &&
!text.includes(callback.includesCondition)
) {
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<IContent>();
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);
}
});
});
registerModuleTest(client, callbacks);
registerModuleAdmin(client, callbacks);
registerModuleUser(client, callbacks);
};
export { registerModules };