import sys, json, re sys.path.insert(0, '.') from concurrent.futures import ThreadPoolExecutor from omni import feeds, net from omni.sources import Source TG = ["DarkWebInformer", "darkwebinformernews", "ransomwarelive", "ransom_live", "leak_insider", "breachforum", "cyberpolice_ru", "threatintel", "dfir", "dfir_channel", "malwareanalysis", "hackernews_ru", "CyberSecurityRu", "cybersecurityru", "ibsecurity", "secnews", "securitynews", "cve", "cvewatch", "vulns", "0day", "0dayfans", "pentest", "bugbounty", "redteam", "osint", "cti", "apt", "hackers", "cyberhack", "infosec", "инфобез", "hackersnews"] RSS = [ ("virustotal_blog", "https://blog.virustotal.com/feeds/posts/default"), ("vulncheck_blog", "https://vulncheck.com/blog/rss.xml"), ("industrialcyber", "https://industrialcyber.co/feed/"), ("silentpush_blog", "https://www.silentpush.com/blog/feed/"), ("cybersixgill_blog", "https://www.cybersixgill.com/feed/"), ("malwaretech_blog", "https://www.malwaretech.com/feed"), ("scworld", "https://www.scworld.com/rss.xml"), ("hackread_leaks", "https://hackread.com/category/data-breaches/feed/"), ("securityweek_alt", "https://www.securityweek.com/feed/"), ("reddit_netsec", "https://www.reddit.com/r/netsec/.json?limit=25"), ("reddit_cybersecurity_dup", "https://www.reddit.com/r/cybersecurity/.json?limit=25"), ("reddit_malware2", "https://www.reddit.com/r/Malware/.json?limit=25"), ("reddit_reveng2", "https://www.reddit.com/r/ReverseEngineering/.json?limit=25"), ("reddit_threatintel2", "https://www.reddit.com/r/threatintel/.json?limit=25"), ] def tg(url): r = net.get(url, timeout=25) t = r.text or "" if t.count("tgme_widget_message_wrap") < 3: return {"u": url, "n": 0, "why": "no preview", "title": (re.search(r"