From 4c132d716ad0452132c93f15b3e6aa3f245d582c Mon Sep 17 00:00:00 2001 From: Entwicklung Date: Tue, 28 Nov 2023 08:56:55 +0100 Subject: [PATCH] add functions into classes --- confernceUtils.mjs | 54 +++++++++++++++++++++++++++++++++++++++ index.mjs | 60 ++++++------------------------------------- package-lock.json | 63 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 8 +++++- 4 files changed, 132 insertions(+), 53 deletions(-) create mode 100644 confernceUtils.mjs diff --git a/confernceUtils.mjs b/confernceUtils.mjs new file mode 100644 index 0000000..15b8337 --- /dev/null +++ b/confernceUtils.mjs @@ -0,0 +1,54 @@ +import {md5} from "js-md5"; +import {JITSI_ADMIN_URL} from "./config.mjs"; + +export class conferenceUtils { + client; + + constructor(client) { + this.client = client; + } + + async createConference(roomId) { + var roomDescription = await this.client.getRoomStateEvent(roomId, 'm.room.topic'); + roomDescription = roomDescription.topic; + const escapedBaseUrl = JITSI_ADMIN_URL.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + + const regex = new RegExp(escapedBaseUrl + '[^\\s\\n]+'); + const match = roomDescription.match(regex); + if (match) { + return match[0]; + } + + var hash = md5(roomId); + return JITSI_ADMIN_URL + '/m/' + hash; + } + + async sendMessageWithUrl(roomId) { + var url = await this.createConference(roomId); + await this.client.sendText(roomId, 'Die Konferenz für diesen Raum läuft unter dieser URL: ' + url); + } + + async sendJoinConference(roomId) { + var url = await this.createConference(roomId); + await this.client.sendHtmlText(roomId, '
Hier der Konferenz beitreten
'); + } + + async changeRoomName(roomId) { + var roomDescription = await this.client.getRoomStateEvent(roomId, 'm.room.topic'); + roomDescription = roomDescription.topic; + var conferenceUrl = await this.createConference(roomId); + if (!roomDescription.includes(conferenceUrl)) { + await this.client.sendStateEvent(roomId, 'm.room.topic', '', {'topic': roomDescription + "\n\r" + conferenceUrl}) + } + } + + async sendHelp(roomId) { + await this.client.sendText( + roomId, + 'Neue Konferenz erstellen: !jitsi\n\r' + + 'Direkt der Konferenz beitreten: !join\n\r' + + 'Diese Hilfeseite anzeigen: !hilfe\n\r' + ); + } +} + diff --git a/index.mjs b/index.mjs index 665b314..20ee618 100644 --- a/index.mjs +++ b/index.mjs @@ -1,8 +1,7 @@ import {AutojoinRoomsMixin, MatrixClient, RustSdkCryptoStorageProvider, SimpleFsStorageProvider} from "matrix-bot-sdk"; -import {md5} from 'js-md5'; - -import {JITSI_ADMIN_URL, MATRIX_DISPLAYNAME, MATRIX_TOKEN, MATRIX_URL} from './config.mjs' +import {MATRIX_DISPLAYNAME, MATRIX_TOKEN, MATRIX_URL} from './config.mjs' +import {conferenceUtils} from './confernceUtils.mjs' const cryptoProvider = new RustSdkCryptoStorageProvider("./crypto-storage/"); // LogService.muteModule("Metrics"); @@ -12,7 +11,7 @@ const cryptoProvider = new RustSdkCryptoStorageProvider("./crypto-storage/"); // from where the web/chat interface is hosted. The server must support password registration without // captcha or terms of service (public servers typically won't work). const homeserverUrl = MATRIX_URL; -const jitsiAdminServerUrl = JITSI_ADMIN_URL; + // Use the access token you got from login or registration above. const accessToken = MATRIX_TOKEN;//"syt_aDJpbnZlbnRib3Q_NCOyzAPnpzQoyfACReZX_09Heja"; @@ -33,6 +32,7 @@ client.on("room.message", handleCommand); // Now that everything is set up, start the bot. This will start the sync loop and run until killed. client.start().then(() => console.log("Bot started!")); client.setDisplayName(MATRIX_DISPLAYNAME) +const conferenceUtil = new conferenceUtils(client); // This is the command handler we registered a few lines up async function handleCommand(roomId, event) { // Don't handle unhelpful events (ones that aren't text messages, are redacted, or sent by us) @@ -42,57 +42,13 @@ async function handleCommand(roomId, event) { // Check to ensure that the `!hello` command is being run const body = event['content']['body']; if (body?.startsWith("!jitsi")){ - await sendMessageWithUrl(client,roomId); - await changeRoomName(client, roomId); + await conferenceUtil.sendMessageWithUrl(roomId); + await conferenceUtil.changeRoomName(roomId); } if (body?.startsWith("!join")){ - await sendJoinConfernece(client,roomId); + await conferenceUtil.sendJoinConference(roomId); } if (body?.startsWith("!hilfe")){ - sendHelp(client,roomId) + conferenceUtil.sendHelp(roomId) } } - -async function createConference(roomId) { - var roomDescription = await client.getRoomStateEvent(roomId,'m.room.topic'); - roomDescription = roomDescription.topic; - const escapedBaseUrl = jitsiAdminServerUrl.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - - const regex = new RegExp(escapedBaseUrl + '[^\\s\\n]+'); - const match = roomDescription.match(regex); - if (match) { - return match[0]; - } - - var hash = md5(roomId); - return jitsiAdminServerUrl+'/m/'+hash; -} - -async function sendMessageWithUrl(client,roomId) { - var url = await createConference(roomId); - await client.sendText(roomId, 'Die Konferenz für diesen Raum läuft unter dieser URL: '+ url); -} - -async function sendJoinConfernece(client,roomId) { - var url = await createConference(roomId); - await client.sendHtmlText(roomId, '
Hier der Konferenz beitreten
'); -} - -async function changeRoomName(client, roomId){ - var roomDescription = await client.getRoomStateEvent(roomId,'m.room.topic'); - roomDescription = roomDescription.topic; - var conferenceUrl = await createConference(roomId); - if (!roomDescription.includes(conferenceUrl)){ - await client.sendStateEvent(roomId,'m.room.topic','',{'topic':roomDescription+"\n\r"+conferenceUrl}) - } -} -async function sendHelp(client, roomId){ - await client.sendText( - roomId, - 'Neue Konferenz erstellen: !jitsi\n\r' + - 'Direkt der Konferenz beitreten: !join\n\r'+ - 'Diese Hilfeseite anzeigen: !hilfe\n\r' - - ); - -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 345b1d5..33d5f8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,9 @@ "dependencies": { "js-md5": "^0.8.3", "matrix-bot-sdk": "^0.7.0" + }, + "devDependencies": { + "flow-remove-types": "^2.222.0" } }, "node_modules/@matrix-org/matrix-sdk-crypto-nodejs": { @@ -657,6 +660,24 @@ "node": ">= 0.8" } }, + "node_modules/flow-remove-types": { + "version": "2.222.0", + "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.222.0.tgz", + "integrity": "sha512-+ccu7AeAER4aLUdroRtQIv13cr4ZhQfCkk2xmHkwNXtWpXMU95LG5yNVMPg/eJUKRsRaiMSH3JzKoNyUNZMgog==", + "dev": true, + "dependencies": { + "hermes-parser": "0.17.1", + "pirates": "^3.0.2", + "vlq": "^0.2.1" + }, + "bin": { + "flow-node": "flow-node", + "flow-remove-types": "flow-remove-types" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -827,6 +848,21 @@ "node": ">= 0.4" } }, + "node_modules/hermes-estree": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.17.1.tgz", + "integrity": "sha512-EdUJms+eRE40OQxysFlPr1mPpvUbbMi7uDAKlScBw8o3tQY22BZ5yx56OYyp1bVaBm+7Cjc3NQz24sJEFXkPxg==", + "dev": true + }, + "node_modules/hermes-parser": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.17.1.tgz", + "integrity": "sha512-yErtFLMEL6490fFJPurNn23OI2ciGAtaUfKUg9VPdcde9CmItCjOVQkJt1Xzawv5kuRzeIx0RE2E2Q9TbIgdzA==", + "dev": true, + "dependencies": { + "hermes-estree": "0.17.1" + } + }, "node_modules/html-to-text": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", @@ -1214,6 +1250,15 @@ "node": ">=14.18" } }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha512-JMaRS9L4wSRIR+6PTVEikTrq/lMGEZR43a48ETeilY0Q0iMwVnccMFrUM1k+tNzmYuIU0Vh710bCUqHX+/+ctQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -1305,6 +1350,18 @@ "node": ">=4" } }, + "node_modules/pirates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz", + "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 4" + } + }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -1771,6 +1828,12 @@ "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } + }, + "node_modules/vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true } } } diff --git a/package.json b/package.json index 5f99154..533c6b4 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,18 @@ "description": "matrix bot for jitsi-admin", "main": "index.mjs", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "build": "flow-remove-types src/ -d lib/", + "prepublish": "npm run build", + "flow": "flow" }, "author": "", "license": "ISC", "dependencies": { "js-md5": "^0.8.3", "matrix-bot-sdk": "^0.7.0" + }, + "devDependencies": { + "flow-remove-types": "^2.222.0" } }