v0
This commit is contained in:
		
							
								
								
									
										83
									
								
								config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								config.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,83 @@ | ||||
| const fs = require('fs'); | ||||
| const Parser = require('rss-parser'); | ||||
| const parser = new Parser(); | ||||
|  | ||||
| const Markup = require('telegraf/markup'); | ||||
| const Extra = require('telegraf/extra'); | ||||
|  | ||||
| const db_js = require('./db.js'); | ||||
|  | ||||
|  | ||||
| var db = new db_js("rss_chan"); | ||||
|  | ||||
| //=== TOOL FUNCTIONS | ||||
|  | ||||
| const get_rss = function(url,min_id){ | ||||
| 	return parser.parseURL(url).then(feed=>feed.items | ||||
| 		.sort((a, b)=>(parseInt(a.guid)-parseInt(b.guid))) | ||||
| 		.filter((v)=>(parseInt(v.guid)>min_id))); | ||||
| } | ||||
|  | ||||
| const article_to_mess = function(art){ | ||||
| 	return `*${art.title.replace('\r\n','').trim()}*\n\n${art.content}\n\n[Read More](${art.link})`; | ||||
| } | ||||
|  | ||||
| //=== MAIN MODULE CONFIG | ||||
|  | ||||
| const rssi = [ | ||||
| 	{ | ||||
| 		chat:'CHAT_ID', | ||||
| 		url: 'RSS_URL', | ||||
| 	} | ||||
| ]; | ||||
|  | ||||
| module.exports = function(rssi){ | ||||
| 	this.rssi = rssi; | ||||
| 	return { | ||||
| 		name : "RSS-FEED", | ||||
| 		key : "rssf", | ||||
| 		version : 0.1, | ||||
| 		requirements : { | ||||
| 			gps : false, | ||||
| 		}, | ||||
| 		text : [ | ||||
| 			 | ||||
| 		], | ||||
| 		reply : [], | ||||
| 		regex : [], | ||||
| 		media : [], | ||||
| 		callback : [], | ||||
| 		inline : [], | ||||
| 		new_member : (bot,event)=>{}, | ||||
| 		weburl : [], | ||||
| 		cron : [ | ||||
| 			{ | ||||
| 			cstr : '0 0,30 */1 * * *', | ||||
| 			public : true, | ||||
| 			desc: { | ||||
| 				0: "Informs Group using RSS feed", | ||||
| 				1: "Informe le Groupe avec le feed RSS", | ||||
| 				4: "Informiert die Gruppe durch dem RSS feed", | ||||
| 			}, | ||||
| 			params : [ null, true], | ||||
| 			timezone : 'Europe/Zurich', | ||||
| 			action : (bot)=> { | ||||
| 					this.bot = bot; | ||||
| 					return ()=>{ | ||||
| 						return this.rssi.forEach(entry=> | ||||
| 							db.get_v(entry.chat).then(v=> | ||||
| 								get_rss(entry.url,v).then(articles=> | ||||
| 									articles.forEach(art=> | ||||
| 										db.set_v(entry.url,parseInt(art.guid)).then(rr=> | ||||
| 									 		this.bot.telegram.sendMessage(entry.chat,article_to_mess(art),{"parse_mode":"Markdown"}) | ||||
| 										) | ||||
| 									)	 | ||||
| 								) | ||||
| 							) | ||||
| 						) | ||||
| 					}; | ||||
| 				} | ||||
| 			} | ||||
| 		] | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										58
									
								
								db.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								db.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| const low = require('lowdb'); | ||||
| const FileSync = require('lowdb/adapters/FileSync'); | ||||
|  | ||||
| var db = null; | ||||
|  | ||||
| function db_init(db){ | ||||
| 	db.defaults({ chats:[]}).write(); | ||||
| } | ||||
|  | ||||
| var dbc = function(name){ | ||||
| 	const db_file = "./db/"+name+".json"; | ||||
| 	var db = low(new FileSync(db_file)); | ||||
| 	db_init(db); | ||||
| 	return db; | ||||
| }; | ||||
|  | ||||
|  | ||||
|  | ||||
| module.exports = function(name){ | ||||
| 	this.name = name; | ||||
| 	this.db = dbc(name); | ||||
|  | ||||
| 	this.get_chat = function(cid){ | ||||
|  | ||||
| 		return new Promise((resolve, reject)=>{ | ||||
| 			let res = this.db.get("chats").find({id:cid}).value(); | ||||
| 			if(res) return resolve(res); | ||||
|  | ||||
| 			this.db.get("chats").push({id:cid, tracking:[]}).write(); | ||||
| 			res = this.db.get("chats").find({id:cid}).value(); | ||||
| 			if(res) return resolve(res); | ||||
|  | ||||
| 			return reject({error:true, msg:"Error With DB..."}); | ||||
| 		}); | ||||
| 	}; | ||||
|  | ||||
| 	this.dump_db = function(){ | ||||
| 		return new Promise((resolve, reject)=>{ | ||||
| 			resolve(this.db.get("chats").value()); | ||||
| 		}); | ||||
| 	}; | ||||
|  | ||||
| 	this.set_v = function(cid,v){ | ||||
| 		this.get_chat(cid); | ||||
| 		return new Promise((resolve, reject)=>{ | ||||
| 			resolve(this.db.get("chats").find({id:cid}).set('tracking',v).write()); | ||||
| 		}); | ||||
| 	}; | ||||
|  | ||||
| 	this.get_v = function(cid){ | ||||
| 		this.get_chat(cid); | ||||
| 		return new Promise((resolve, reject)=>{ | ||||
| 			resolve(this.db.get("chats").find({id:cid}).get('tracking').value()); | ||||
| 		}); | ||||
| 	} | ||||
|  | ||||
| 	return this; | ||||
| }; | ||||
							
								
								
									
										43
									
								
								manual.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								manual.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| const Parser = require('rss-parser'); | ||||
| const parser = new Parser(); | ||||
|  | ||||
| const ORG = { | ||||
| 	CH : 1, | ||||
| 	BR: 1070, | ||||
| 	EDI: 301, | ||||
| 	BAG : 317, | ||||
| }; | ||||
|  | ||||
|  | ||||
|  | ||||
| const base_url = 'https://www.newsd.admin.ch/newsd/feeds/rss'; | ||||
| //https://www.news.admin.ch/dienstleistungen/00008/00131/00146/index.html?lang=fr&rss-id=1_35 | ||||
| const get_url = function(opts){ | ||||
| 	const lang = opts.lang || 'de'; | ||||
| 	const org_nr = opts.org || '301'; | ||||
| 	const offer_nr = opts.offer || ''; | ||||
| 	const topic = opts.topic || ''; | ||||
| 	const sdate = opts.sdate || opts.since || '-1'; | ||||
| 	const edate = opts.edate || ''; | ||||
| 	const kind = opts.kind || 'M';//M,R,... | ||||
| 	return base_url+'?'+ | ||||
| 			'&lang='+lang+ | ||||
| 			'&org-nr='+org_nr+ | ||||
| 			'&topic='+topic+ | ||||
| 			//'&keyword='+ | ||||
| 			'&offer-nr='+offer_nr+ | ||||
| 			//'&catalogueElement='+ | ||||
| 			'&kind='+kind+ | ||||
| 			'&start_date='+sdate+ | ||||
| 			'&end_date='+edate; | ||||
| } | ||||
|  | ||||
| const get_rss = function(url,min_id){ | ||||
| 	return parser.parseURL(url).then(feed=>feed.items | ||||
| 		.sort((a, b)=>(parseInt(a.guid)-parseInt(b.guid))) | ||||
| 		.filter((v)=>(parseInt(v.guid)>min_id))); | ||||
| } | ||||
| get_rss(get_url({org:ORG.BR, lang:'de',since:-2}),79710).then(r=>r.forEach(item=>{ | ||||
| 	console.log(item) | ||||
| 	//console.log(`${item.title} (${item.guid}): ${item.link}`); | ||||
| })); | ||||
		Reference in New Issue
	
	Block a user