UNPKG

telegram-cms

Version:

It is a nodejs application to launch a Telegram bot in seconds with primary components.

231 lines (183 loc) 7.42 kB
var showitem = async function (userid, category) { console.log('showitem', category); var menu = await fn.db.rowColumns.findOne({'category': category}).exec().then(); if(!menu) return; //create callback keyboard var detailArr = []; var qt = fn.mstr['settings'].query; var sticker = qt['settings'] + '-' + qt['admin'] + '-' + qt['rowColumns'] + '-' + qt['addRow'] + '-' + menu._id; var fn_delete = qt['settings'] + '-' + qt['admin'] + '-' + qt['rowColumns'] + '-' + qt['delete'] + '-' + menu._id; //edit btns //publication btn detailArr.push([ {'text': 'افزودن سطر', 'callback_data': sticker}, {'text': 'حذف', 'callback_data': fn_delete}, ].reverse()); // rows menu.rows.forEach(r => { let labels = {'r':'سطر', 'c':'ستون'}; r_text = '❌ | ' + `${labels['r']} ${r.rowNumber} | ${r.totalColumns} ${labels['c']}`; r_fn = qt['settings'] + '-' + qt['admin'] + '-' + qt['rowColumns'] + '-' + qt['deleteRow'] + '-' + r.rowNumber + '-' + menu._id; let btn = {'text': r_text, 'callback_data': r_fn}; detailArr.push([btn]); }); //create message var text = 'اطلاعات منو' + '\n' + 'ــــــــــــــــ' + '\n' + `🔶 نام منو: ${menu.category} \n.`; global.fn.sendMessage(userid, text, {"reply_markup" : {"inline_keyboard" : detailArr}}); } var create = async function(userid, category) { var existedCategory = await fn.db.rowColumns.count({'category': category}).exec().then(); // error if(existedCategory || !category.startsWith('-')) { var mess = fn.mstr['settings'].mess['getstickerName']; global.fn.sendMessage(userid, mess); return; } // creat new button var newRow = {'category': category}; await new fn.db.rowColumns(newRow).save().then(); show(userid, fn.mstr['seccess']); } var show = async function(userid, txt) { let btns = fn.mstr['settings'].btns; var titles = [[ btns['addMenu'] ]]; var categories = await fn.db.rowColumns.find({}).limit(35).sort('-_id').exec().then(); //make title list categories.map(item => { titles.push(item.category); }); var section = btns['rowColumns']; var back = fn.mstr['settings']['back']; var mess = (txt) ? txt : section; var markup = global.fn.generateKeyboard({'custom': true, 'grid':false, 'list': titles, 'back':back}, false); global.fn.sendMessage(userid, mess, markup); fn.userOper.setSection(userid, section, true); } var editItem = async function(id, detail, userid, mName) { var menu = await fn.db.rowColumns.findOne({'_id': id}).exec().then(); if(!menu) { show(message,'این دکمه وجود ندارد'); return; } let addRow = function(newRow) { let isAdded = false; menu.rows.forEach((r) => { if(r.rowNumber == newRow.rowNumber) isAdded= true; }); if(!isAdded) menu.rows.push(newRow); } if(detail['row']) { let tRow; let tColumn; let text = detail['row']; let verifyNumbers = function(r, c) { let verified = true; r = parseInt(r); c = parseInt(c); if(isNaN(r) || isNaN(c)) verified = false; //console.log('row & columns are: ', typeof r, typeof c); return verified; } // extract row and column from text try{ tRow = text.split('-')[0]; tColumn = text.split('-')[1]; } catch (e) { console.log('text dosent splited', e); global.fn.sendMessage(userid, fn.mstr[mName].mess['getRow']); return; } // verify numbers if(!verifyNumbers(tRow, tColumn)) { console.log('text isnt a number'); global.fn.sendMessage(userid, fn.mstr[mName].mess['getRow']); return; } // pars numbers tRow = parseInt(tRow); tColumn = parseInt(tColumn); // add row let newRow = { rowNumber: tRow, totalColumns: tColumn }; addRow(newRow); show(userid, fn.str['seccess']); } if(detail['removeRow']) { let removingRow = detail['removeRow']; let rIndex; menu.rows.forEach((r, i) => { if(r.rowNumber == removingRow) rIndex = i }); console.log('removingRow', removingRow, 'rIndex', rIndex); menu.rows.splice(rIndex, 1); } await menu.save().then(); showitem(userid, menu.category); } var routting = function(message, speratedSection, user, mName) { var btns = fn.mstr[mName].btns; var text = message.text; var last = speratedSection.length-1; var userid = message.from.id; //ask to show section if (text === btns['rowColumns'] || text === btns['rowColumns_back']) show(userid); //create new category else if (text === btns['addMenu']) { var mess = fn.mstr['settings'].mess['getCategoryName']; var markup = fn.generateKeyboard({'section':btns['rowColumns_back']}, true); global.fn.sendMessage(userid, mess, markup); fn.userOper.setSection(userid, btns['addMenu'], true); } //get the title of new category else if(speratedSection[4] === btns['addMenu']) create(userid, text); // add row else if(speratedSection[4] === fn.mstr[mName].mess['getRow']) editItem(speratedSection[last], {'row': text}, userid, mName); //choose an button else showitem(userid, text); } var query = async function(query, speratedQuery, user, mName) { var last = speratedQuery.length-1; var queryTag = fn.mstr[mName].query; //add row if(speratedQuery[last-1] === queryTag['addRow']) { var nSection = fn.str['mainMenu'] + '/' + fn.str.goToAdmin['name'] + '/' + fn.mstr[mName].name + '/' + fn.mstr[mName].btns['rowColumns'] + '/' + fn.mstr[mName].mess['getRow'] + '/' + speratedQuery[last]; var markup = fn.generateKeyboard({section: fn.mstr[mName].btns['rowColumns_back']}, true); var mess = fn.mstr[mName].mess['getRow']; global.fn.sendMessage(query.from.id, mess, markup); fn.userOper.setSection(query.from.id, nSection, false); } // delet row if(speratedQuery[last-2] === queryTag['deleteRow']) { let removingRow = parseInt(speratedQuery[last-1]); editItem(speratedQuery[last], {'removeRow': removingRow}, user.userid, mName); } //delete else if (speratedQuery[last-1] === queryTag['delete']) { var id = speratedQuery[last]; await fn.db.rowColumns.remove({'_id': id}).then(); show(query.from.id, fn.str['seccess']); } } var check = async function (category) { var rc = await fn.db.rowColumns.findOne({'category': `-${category}`}).exec().then(); //console.log('check custom rowColumns', category, rc); return rc; } module.exports = { routting, query, check }