From 073540d1d5070dea11506b72dfc7f2ad6bc626b7 Mon Sep 17 00:00:00 2001 From: Ashley Date: Thu, 22 Aug 2024 16:22:52 +0000 Subject: [PATCH] add toggle command and admin-only command checks --- commands/join.js | 13 +++++++++++++ commands/toggle.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ index.js | 10 ++++++++-- 3 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 commands/join.js create mode 100644 commands/toggle.js diff --git a/commands/join.js b/commands/join.js new file mode 100644 index 0000000..beec0e8 --- /dev/null +++ b/commands/join.js @@ -0,0 +1,13 @@ +import { exec } from "node:child_process"; + +function execute(client, event, args) { + client.joinRoom(args); +} + +export default { + command: "join", + name: "join", + owner: true, + desc: "join a room", + execute +} diff --git a/commands/toggle.js b/commands/toggle.js new file mode 100644 index 0000000..63bfda8 --- /dev/null +++ b/commands/toggle.js @@ -0,0 +1,46 @@ +import { encode } from "html-entities"; + +function execute(client, event, args) { + var name = args.toLowerCase(); + + var command = client.commands.filter(c=>(c.name.toLowerCase()==name || c.command.toLowerCase()==name))[0]; + var module = client.modules.filter(m=>m.name.toLowerCase()==name)[0]; + var specific = command ?? module ?? false; + + var config = client.cache.get(event.sender.roomId) ?? {}; + + if(args != "") { + if(!module) { + client.reply(event, `Module "${args}" not found.\nRun "${process.env.PREFIX}help" for a list of commands and modules.`); + return; + } + + if(config[module.name] !== undefined) + config[module.name] = !config[module.name]; + else + config[module.name] = false; + + var state = (config[module.name] ? "En" : "Dis") + "abled"; + + var reply = state + " " + module.name + "\n"; + var replyHTML = `${state} ${encode(module.name)}
`; + + client.cache.set(event.sender.roomId, config); + client.reply(event, reply, replyHTML); + return; + } + + var enabled = client.modules.map(m => "[" + (config[m.name] !== false ? "x" : " ") + "] " + m.name); + var reply = `enabled modules:\n${enabled.join("\n")}`; + var replyHTML = `enabled modules:
${enabled.join("
")}`; + + client.reply(event, reply, replyHTML); +} + +export default { + command: "toggle", + name: "toggle", + admin: true, + desc: "toggle a module on or off in current channel", + execute +} diff --git a/index.js b/index.js index 53f8ce9..ffa9904 100644 --- a/index.js +++ b/index.js @@ -56,6 +56,10 @@ for (const file of fs.readdirSync(resolve("commands"))) { function doModule(client, event) { client.modules.forEach(m => { if(!m) return; + + var config = client.cache.get(event.sender.roomId) ?? {}; + if(config[m.name] === false) return; + m.hooks?.message(client, event); }); } @@ -66,8 +70,9 @@ function doCommand(client, event, cmd, args) { if(!command) return false; - if(command.owner && event.sender.userId != process.env.OWNER_ID) { - client.reply(event, "nuh uh", 'nuh uh'); + if((command.owner && event.sender.userId != process.env.OWNER_ID) || (command.admin && event.sender.powerLevel != 100 && event.sender.userId != process.env.OWNER_ID)) { + var addl = `Are you sure this command is for you?\nYour power level is ${event.sender.powerLevel}`; + client.reply(event, "nuh uh" + addl, 'nuh uh
' + addl); return true; } @@ -94,6 +99,7 @@ client.on(sdk.RoomEvent.Timeline, async function (event, room, toStartOfTimeline if(event.event.content["m.relates_to"] != null) event.event.content.body = event.event.content.body.substring(event.event.content.body.indexOf("\n\n") + 2); + event.sender = client.getRoom(event.sender.roomId).getMember(event.getSender()); var content = event.event.content.body; var isCommand = false; for(const prefix of prefixes) {