telegram-cms
Version:
It is a nodejs application to launch a Telegram bot in seconds with primary components.
238 lines (199 loc) • 8.78 kB
JavaScript
var mainBtnsPermissions = {
'activation': false,
'category': false,
'order': false,
}
var getSettingsInlinesBtns = function(options)
{
var detailArr = [],
mName = options.mName,
qt = fn.mstr[mName].query,
fn_activation = qt[mName] + '-' + qt['admin'] + '-' + qt['settings'] + '-' + qt['activation'] + '-' + qt[mName],
fn_category = qt[mName] + '-' + qt['admin'] + '-' + qt['settings'] + '-' + qt['category'] + '-' + qt[mName],
fn_order = qt[mName] + '-' + qt['admin'] + '-' + qt['settings'] + '-' + qt['order'] + '-' + qt[mName],
tx_activation = fn.str.activation[options.activation],
tx_category = fn.mstr['category'].asoption,
tx_order = fn.str['editOrder'];
var firstrow = [];
if(mainBtnsPermissions.activation) firstrow.push({'text': tx_activation, 'callback_data': fn_activation});
if(mainBtnsPermissions.category) firstrow.push({'text': tx_category, 'callback_data': fn_category});
if(mainBtnsPermissions.order) firstrow.push({'text': tx_order, 'callback_data': fn_order});
detailArr.push(firstrow.reverse());
//data parameters
var datas = Object.keys(fn.mstr[mName].datas);
var row = [];
datas.forEach((item, i) =>
{
var fn_item = qt[mName] + '-' + qt['admin'] + '-' + qt['settings'] + '-' + item + '-' + qt[mName];
var tx_item = fn.mstr[mName].datas[item].name;
row.push({'text': tx_item, 'callback_data': fn_item});
if(row.length == 2 || i == datas.length-1) {
detailArr.push(row);
row = [];
}
});
return detailArr;
}
var getDatsDetail = function(moduleOption, mName)
{
var mess = '';
moduleOption.option.datas.forEach(data => {
var key = (data.key) ? data.key + ', ' : '';
var value = (data.value) ? data.value : '';
mess += '\n' + '✴️ ' + fn.mstr[mName].datas[data.name].name + ': ' + key + value;
});
return mess;
}
var show = function(userid, mName, newcat)
{
var activationtext = '';
var moduleOption = fn.getModuleOption(mName, {'create': true});
//defin activation button
activationtext = (moduleOption.option.active) ? 'disable' : 'enable';
//defin new category
if(newcat) {
moduleOption.option.category = newcat;
var button = fn.getModuleData(mName, 'menuItem');
if(button) moduleOption.option.buttons = [button.value];
global.robot.config.moduleOptions[moduleOption.index] = moduleOption.option;
//save configuration
global.robot.save();
fn.updateBotContent();
}
var detailArr = getSettingsInlinesBtns({'mName':mName,'activation': activationtext});
var messOption = {"reply_markup" : {"inline_keyboard" : detailArr}};
var title = fn.mstr[mName].name;
var category = (moduleOption.option.category) ? moduleOption.option.category : 'نامشخص';
var buttons = (moduleOption.option.buttons) ? moduleOption.option.buttons : 'نامشخص';
var btn_order = (moduleOption.option.btn_order) ? moduleOption.option.btn_order : 'نامشخص';
var active = (moduleOption.option.active) ? '✅ فعال' : '⭕️ غیر فعال';
var datas = getDatsDetail(moduleOption, mName);
var detailMess = 'اطلاعات افزونه ' + title + '\n'
+ datas + '\n'
+ '⚙️';
global.robot.bot.sendMessage(userid, detailMess, messOption);
}
var routting = function(message, speratedSection, user, mName)
{
var text = message.text;
var last = speratedSection.length-1;
//show inbox setting
if (text === fn.mstr[mName].btns['settings'])
show(message.from.id, mName);
//set category
else if(speratedSection[last] == fn.mstr['category'].asoption)
{
console.log('get new category for inbox');
var cat = text.split(' - ')[1];
if(fn.m.category.checkInValidCat(cat)) {
show (message.from.id, mName, cat);
fn.m[mName].show(message.from.id);
}
else global.robot.bot.sendMessage(message.from.id, fn.str['choosethisItems']);
}
//change order
else if(speratedSection[last] === fn.str['editOrder'])
{
var order = parseInt(text);
if(!typeof order === 'number') global.robot.bot.sendMessage(message.from.id, fn.str['editOrder']);
var moduleOption = fn.getModuleOption(fn.mstr[mName]['modulename']);
global.robot.config.moduleOptions[moduleOption.index].btn_order = order;
//save configuration
global.robot.save();
fn.updateBotContent(() => {
show(message.from.id, mName);
fn.m[mName].show(message.from.id);
});
}
//dates
else
{
var mstrdatas = Object.keys(fn.mstr[mName].datas);
var key = false;
mstrdatas.forEach(item => {
if(item === speratedSection[last]) key = true;
});
if(!key) return;
var itemSection = speratedSection[last];
var dataOption = fn.mstr[mName].datas[itemSection];
var key = true;
var value = text;
if(dataOption.items)
{
key = false;
dataOption.items.forEach(element => {
if(element.lable === text) {
key = true;
value = element.name;
}
});
}
if(!key) return;
var datas = [{'name': itemSection, 'value':value}];
fn.putDatasToModuleOption(mName, datas);
global.robot.save();
show (message.from.id, mName);
fn.m[mName].show(message.from.id);
}
}
var query = function(query, speratedQuery, user, mName)
{
var last = speratedQuery.length-1;
var queryTag = fn.mstr[mName].query;
//activation
if(speratedQuery[3] === queryTag['activation'])
{
console.log(`active deactive ${mName}`);
var moduleOption = fn.getModuleOption(mName);
var key = global.robot.config.moduleOptions[moduleOption.index].active;
global.robot.config.moduleOptions[moduleOption.index].active = !key;
//save configuration
global.robot.save();
fn.updateBotContent(() => {
show(query.from.id, mName);
});
}
//setcategory
else if (speratedQuery[3] === queryTag['category'])
{
console.log(`set categori for ${mName}`);
var nSection = fn.str['mainMenu'] + '/' + fn.str.goToAdmin['name'] + '/' + fn.mstr[mName]['name'] + '/' + fn.mstr[mName].btns['settings'] + '/' + fn.mstr['category'].asoption;
var back = fn.mstr[mName]['back'];
var list = [];
global.robot.category.forEach((element) => {
list.push(element.parent + ' - ' + element.name);
});
var markup = fn.generateKeyboard({'custom': true, 'grid':false, 'list': list, 'back':back}, false);
global.robot.bot.sendMessage(query.from.id, fn.str['editCategory'], markup);
fn.userOper.setSection(query.from.id, nSection, false);
}
//order
else if (speratedQuery[3] === queryTag['order'])
{
var nSection = fn.str['mainMenu'] + '/' + fn.str.goToAdmin['name'] + '/' + fn.mstr[mName]['name'] + '/' + fn.mstr[mName].btns['settings'] + '/' + fn.str['editOrder'];
var remarkup = fn.generateKeyboard({'section': fn.mstr[mName]['back']}, true);
global.robot.bot.sendMessage(query.from.id, fn.str['editOrderMess'], remarkup);
fn.userOper.setSection(query.from.id, nSection, false);
}
//datas
else
{
var datas = Object.keys(fn.mstr[mName].datas);
var key = false;
datas.forEach(item => {
if(item === speratedQuery[3]) key = true;
});
if(!key) return;
var itemSection = speratedQuery[3];
var dataOption = fn.mstr[mName].datas[itemSection];
var list = [];
var back = fn.mstr[mName]['back'];
if(dataOption.items) dataOption.items.forEach(element => { list.push(element.lable) });
var mess = dataOption.mess;
var nSection = fn.str['mainMenu'] + '/' + fn.str.goToAdmin['name'] + '/' + fn.mstr[mName]['name'] + '/' + fn.mstr[mName].btns['settings'] + '/' + itemSection;
var remarkup = fn.generateKeyboard({'custom': true, 'grid':false, 'list': list, 'back':back}, false);
global.robot.bot.sendMessage(query.from.id, mess, remarkup);
fn.userOper.setSection(query.from.id, nSection, false);
}
}
module.exports = { routting, query, show }