UNPKG

telegram-cms

Version:

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

242 lines (207 loc) 8.11 kB
var name = 'sendbox'; var checkRoute = function(option) { var btnsArr = [ fn.mstr[name]['name'], fn.mstr[name].btns['settings'], ]; var result = {} //check text message if(option.text) btnsArr.forEach(btn => { if(option.text === btn) { result.status = true; result.button = btn; result.routting = routting; } }); //check seperate section if(option.speratedSection){ option.speratedSection.forEach(section => { btnsArr.forEach(btn => { if(section === btn){ result.status = true; result.button = btn; result.routting = routting; } }); }); } //return return result; } var show = async function(userid, txt) { var titles = [[ fn.mstr[name].btns['settings'], fn.mstr[name].btns['newmess'] ]]; var items = await fn.db.sendbox.find({}).sort('_id').exec().then(); //make title list if(items.length > 0){ items.forEach(function(element) { titles.push(global.fn.mstr[name]['sendboxSymbol'] + element.title); }, this); } fn.userOper.setSection(userid, fn.mstr[name].name, true); var messtosend = (txt) ? txt : fn.mstr[name].name; var back = fn.str.goToAdmin.back; var markup = global.fn.generateKeyboard({'custom': true, 'grid':false, 'list': titles, 'back':back}, false); global.fn.sendMessage(userid, messtosend, markup); } var showSender = async function (userid, sender) { //create callback keyboard var detailArr = []; var qt = fn.mstr[name].query; var fn_editText = qt['sendbox'] + '-' + qt['text'] + '-' + sender._id; var fn_delete = qt['sendbox'] + '-' + qt['delete'] + '-' + sender._id; var fn_publication = qt['sendbox'] + '-' + qt['send'] + '-' + sender._id; var fn_attachment = qt['sendbox'] + '-' + fn.str.query['attach'] + '-' + sender._id; var fn_vote = qt['sendbox'] + '-' + qt['addVoteitem'] + '-' + sender._id; var fn_voteResult = qt['sendbox'] + '-' + qt['voteresult'] + '-' + sender._id; //edit btns //publication btn detailArr.push([ {'text': 'حذف', 'callback_data': fn_delete}, {'text': 'بستن', 'callback_data': qt['sendbox']}, {'text': 'ارسال', 'callback_data': fn_publication}, {'text': '📝 متن', 'callback_data': fn_editText} ]); //vote detailArr.push([ {'text': 'افزودن ایتم نظرسنجی', 'callback_data': fn_vote}, {'text': 'نمایش نتیجه', 'callback_data': fn_voteResult}, ]); //vote fiels sender.voteOptions.forEach((element, i) => { var fn_removeVoteitem = qt['sendbox'] + '-' + qt['removeVoteitem'] + '-' + sender._id + '-' + i; var row = [ {'text':`❌ ${element}`, 'callback_data':fn_removeVoteitem} ]; detailArr.push(row); }); //attachment detailArr.push([ {'text': 'پیوست', 'callback_data': fn_attachment} ]); //attached fiels sender.attachments.forEach((element, i) => { var fn_removeAttchment = qt['sendbox'] + '-' + fn.str.query['removeAttachment'] + '-' + sender._id + '-' + i; var row = [ {'text':'❌', 'callback_data':fn_removeAttchment}, {'text':element.name, 'callback_data':'nothing'} ]; detailArr.push(row); }); //create senderage var text = sender.title + '\n' + 'ــــــــــــــــ' + '\n' + sender.text + '\n' + '\n' + 'لطفا برای تنظیمات و ارسال نهایی از گزینه های زیر استفاده کنید.'; await global.fn.sendMessage(userid, text, {"reply_markup" : {"inline_keyboard" : detailArr}}); } var create = async function(message) { //check title to not to added already var item = await fn.db.sendbox.findOne({'title': message.text}).exec().then(); if(item) global.fn.sendMessage(message.from.id, fn.mstr[name]['wrongtitle']); else{ var newSendMess = new fn.db.sendbox({ //'date' : fn.time.gettime(), 'title' : message.text, 'text' : 'محتوای پیام' }); newSendMess.save(() => { showSender(message.from.id, newSendMess); show(message.from.id, fn.str['seccess']); }); } } var edit = async function(id, detail, userid) { var sendKey = true; var sender = await fn.db.sendbox.findOne({"_id": id}).exec().then(); if(!sender){ show(userid,'این پیام دیگر وجود ندارد'); return; } if(detail.text) sender.text = detail.text; if(detail.titel) sender.title = detail.title; // vote item // add if(detail.voteOption) sender.voteOptions.push(detail.voteOption); // remove if(detail.removeVoteOption) sender.voteOptions.splice(parseInt(detail.removeVoteOption), 1); // attachment // add if(detail.attachment) { sendKey = false; sender.attachments.push(detail.attachment); } // remove if(detail.removeAttachment) sender.attachments.splice(parseInt(detail.removeAttachment), 1); if(sendKey) { showSender(userid, sender); show(userid, fn.str['seccess']); } await sender.save(); } var routting = async function(message, speratedSection, user) { var btns = fn.mstr[name].btns; var mess = fn.mstr[name].mess; var userid = message.from.id; var text = message.text; var last = speratedSection.length-1; //ask to sendBox section if (text === fn.mstr[name].name || text === fn.mstr[name].back){ console.log('go to sendbox section'); show(userid); } //ask to new message else if (message.text === btns['newmess']) { var markup = fn.generateKeyboard({'section':fn.str.goToAdmin['back']}, true); fn.userOper.setSection(userid, btns['newmess'], true); global.fn.sendMessage(userid, mess['gettitle'], markup); } //get the title of new message else if(speratedSection[3] === btns['newmess']) create(message); //delete all message else if (text === btns['deleteall']) { await fn.db.sendbox.remove().exec().then(); show(userid, fn.str['seccess']); } //edit message - callback query else if(speratedSection[3] === mess['gettext']) edit(speratedSection[last], {'text': text}, userid); //choose an old message else if(message.text.includes(fn.mstr[name]['sendboxSymbol'])) { sendboxMessTitle = message.text.replace(fn.mstr[name]['sendboxSymbol'], '').trim(); //find sender var sender = await fn.db.sendbox.findOne({'title': sendboxMessTitle}).exec().then(); if(sender) showSender(userid, sender); } //ednd attachment else if(speratedSection[last-1] == fn.str['endAttach'] && text == fn.str['endAttach']) { show(userid); var senderid = speratedSection[last]; var sender = await fn.db.sendbox.findOne({'_id': senderid}).exec().then(); showSender(userid, sender); } //add vote option else if (speratedSection[last-1] == mess['getVoteItem']) edit(speratedSection[last], {'voteOption': text}, userid); // go to setting else if(speratedSection[3] === btns['settings'] || text == btns['settings']) settings.routting(message, speratedSection, user, name); } var settings = require('./settings'); var query = require('./query'); var upload = require('./upload'); var send = require('./send'); module.exports = { name, checkRoute, routting, query, show, edit, showSender, upload, send, settings }