2
0
mirror of https://github.com/thedevs-network/the-guard-bot synced 2025-08-23 10:28:09 +00:00
the-guard-bot/handlers/regex/runCustomCmd.js

74 lines
1.8 KiB
JavaScript
Raw Normal View History

2017-10-04 20:55:50 +03:30
'use strict';
2023-03-08 14:08:57 +01:00
const {
Telegraf: { hears },
} = require('telegraf');
const R = require('ramda');
2017-10-04 20:55:50 +03:30
// DB
const { getCommand } = require('../../stores/command');
const { scheduleDeletion } = require('../../utils/tg');
const { isMaster } = require('../../utils/config');
2020-03-09 23:27:19 +01:00
const { config } = require('../../utils/config');
const deleteCustom = config.deleteCustom || { longerThan: Infinity };
const capitalize = R.replace(/^./, R.toUpper);
2023-03-08 14:08:57 +01:00
const getRepliedToId = R.path(['reply_to_message', 'message_id']);
2023-03-08 14:08:57 +01:00
const typeToMethod = (type) =>
type === 'text' ? 'replyWithHTML' : `replyWith${capitalize(type)}`;
const autoDelete = ({ content, type }) => {
switch (type) {
2023-03-08 14:08:57 +01:00
case 'text':
return content.length > deleteCustom.longerThan;
case 'copy':
return (content.text || '').length > deleteCustom.longerThan;
default:
return false;
}
};
const hasRole = (role, from) => {
switch (role.toLowerCase()) {
2023-03-08 14:08:57 +01:00
case 'master':
return isMaster(from);
case 'admins':
return from && from.status === 'admin';
default:
return true;
}
};
2017-10-04 20:55:50 +03:30
2020-03-10 22:10:48 +01:00
/** @param { import('../../typings/context').ExtendedContext } ctx */
const runCustomCmdHandler = async (ctx, next) => {
const commandName = ctx.match[1].toLowerCase();
2017-10-04 20:55:50 +03:30
const command = await getCommand({ isActive: true, name: commandName });
if (!command || !hasRole(command.role, ctx.from)) {
2017-10-04 20:55:50 +03:30
return next();
}
const { caption, content, type } = command;
2017-10-04 20:55:50 +03:30
const options = {
2023-03-08 14:08:57 +01:00
...(caption && { caption }),
disable_web_page_preview: true,
reply_to_message_id: getRepliedToId(ctx.message),
};
2023-03-08 14:08:57 +01:00
return ctx[typeToMethod(type)](content, options).then(({ message_id }) =>
scheduleDeletion(autoDelete(command) && deleteCustom.after)({
chat: ctx.chat,
message_id,
})
);
2017-10-04 20:55:50 +03:30
};
2019-04-20 11:40:03 +02:00
module.exports = hears(/^! ?(\w+)/, runCustomCmdHandler);