Initial code
This commit is contained in:
commit
1f20a611da
26 changed files with 1050 additions and 0 deletions
102
src/modules/module.ts
Normal file
102
src/modules/module.ts
Normal 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 };
|
||||
Loading…
Add table
Add a link
Reference in a new issue