add functions into classes
This commit is contained in:
parent
a1c6c0765c
commit
4c132d716a
4 changed files with 132 additions and 53 deletions
54
confernceUtils.mjs
Normal file
54
confernceUtils.mjs
Normal file
|
@ -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, '<div role="button" tabindex="0" class="mx_AccessibleButton mx_MemberList_invite"><a href ="' + url + '">Hier der Konferenz beitreten</a></div> ');
|
||||||
|
}
|
||||||
|
|
||||||
|
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'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
60
index.mjs
60
index.mjs
|
@ -1,8 +1,7 @@
|
||||||
import {AutojoinRoomsMixin, MatrixClient, RustSdkCryptoStorageProvider, SimpleFsStorageProvider} from "matrix-bot-sdk";
|
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/");
|
const cryptoProvider = new RustSdkCryptoStorageProvider("./crypto-storage/");
|
||||||
|
|
||||||
// LogService.muteModule("Metrics");
|
// 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
|
// 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).
|
// captcha or terms of service (public servers typically won't work).
|
||||||
const homeserverUrl = MATRIX_URL;
|
const homeserverUrl = MATRIX_URL;
|
||||||
const jitsiAdminServerUrl = JITSI_ADMIN_URL;
|
|
||||||
|
|
||||||
// Use the access token you got from login or registration above.
|
// Use the access token you got from login or registration above.
|
||||||
const accessToken = MATRIX_TOKEN;//"syt_aDJpbnZlbnRib3Q_NCOyzAPnpzQoyfACReZX_09Heja";
|
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.
|
// 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.start().then(() => console.log("Bot started!"));
|
||||||
client.setDisplayName(MATRIX_DISPLAYNAME)
|
client.setDisplayName(MATRIX_DISPLAYNAME)
|
||||||
|
const conferenceUtil = new conferenceUtils(client);
|
||||||
// This is the command handler we registered a few lines up
|
// This is the command handler we registered a few lines up
|
||||||
async function handleCommand(roomId, event) {
|
async function handleCommand(roomId, event) {
|
||||||
// Don't handle unhelpful events (ones that aren't text messages, are redacted, or sent by us)
|
// 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
|
// Check to ensure that the `!hello` command is being run
|
||||||
const body = event['content']['body'];
|
const body = event['content']['body'];
|
||||||
if (body?.startsWith("!jitsi")){
|
if (body?.startsWith("!jitsi")){
|
||||||
await sendMessageWithUrl(client,roomId);
|
await conferenceUtil.sendMessageWithUrl(roomId);
|
||||||
await changeRoomName(client, roomId);
|
await conferenceUtil.changeRoomName(roomId);
|
||||||
}
|
}
|
||||||
if (body?.startsWith("!join")){
|
if (body?.startsWith("!join")){
|
||||||
await sendJoinConfernece(client,roomId);
|
await conferenceUtil.sendJoinConference(roomId);
|
||||||
}
|
}
|
||||||
if (body?.startsWith("!hilfe")){
|
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, '<div role="button" tabindex="0" class="mx_AccessibleButton mx_MemberList_invite"><a href ="'+url+'">Hier der Konferenz beitreten</a></div> ');
|
|
||||||
}
|
|
||||||
|
|
||||||
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'
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
63
package-lock.json
generated
63
package-lock.json
generated
|
@ -11,6 +11,9 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"js-md5": "^0.8.3",
|
"js-md5": "^0.8.3",
|
||||||
"matrix-bot-sdk": "^0.7.0"
|
"matrix-bot-sdk": "^0.7.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"flow-remove-types": "^2.222.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@matrix-org/matrix-sdk-crypto-nodejs": {
|
"node_modules/@matrix-org/matrix-sdk-crypto-nodejs": {
|
||||||
|
@ -657,6 +660,24 @@
|
||||||
"node": ">= 0.8"
|
"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": {
|
"node_modules/forever-agent": {
|
||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
|
||||||
|
@ -827,6 +848,21 @@
|
||||||
"node": ">= 0.4"
|
"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": {
|
"node_modules/html-to-text": {
|
||||||
"version": "9.0.5",
|
"version": "9.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz",
|
||||||
|
@ -1214,6 +1250,15 @@
|
||||||
"node": ">=14.18"
|
"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": {
|
"node_modules/oauth-sign": {
|
||||||
"version": "0.9.0",
|
"version": "0.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||||
|
@ -1305,6 +1350,18 @@
|
||||||
"node": ">=4"
|
"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": {
|
"node_modules/postcss": {
|
||||||
"version": "8.4.31",
|
"version": "8.4.31",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
|
||||||
|
@ -1771,6 +1828,12 @@
|
||||||
"core-util-is": "1.0.2",
|
"core-util-is": "1.0.2",
|
||||||
"extsprintf": "^1.2.0"
|
"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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,12 +4,18 @@
|
||||||
"description": "matrix bot for jitsi-admin",
|
"description": "matrix bot for jitsi-admin",
|
||||||
"main": "index.mjs",
|
"main": "index.mjs",
|
||||||
"scripts": {
|
"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": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"js-md5": "^0.8.3",
|
"js-md5": "^0.8.3",
|
||||||
"matrix-bot-sdk": "^0.7.0"
|
"matrix-bot-sdk": "^0.7.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"flow-remove-types": "^2.222.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue