Skip to content

Commit

Permalink
Tue Jan 7 17:32:45 CST 2025
Browse files Browse the repository at this point in the history
  • Loading branch information
Sereinfy authored and github-actions[bot] committed Jan 7, 2025
1 parent 9e68b47 commit f182c6e
Show file tree
Hide file tree
Showing 54 changed files with 1,734,935 additions and 168,177 deletions.
69 changes: 39 additions & 30 deletions README.md

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions app/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from .base import APPBase
from .adguard import AdGuard
from .adguardhome import AdGuardHome
from .clash import Clash
from .dnsmasq import DNSMasq
from .invizible import InviZible
from .quantumultx import QuantumultX
from .smartdns import SmartDNS
51 changes: 51 additions & 0 deletions app/adguard.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import os
from typing import List, Set, Dict

from loguru import logger

from app.base import APPBase

class AdGuard(APPBase):
def __init__(self, blockList:List[str], unblockList:List[str], filterDict:Dict[str,str], filterList:List[str], filterList_var:List[str], ChinaSet:Set[str], fileName:str, sourceRule:str):
super(AdGuard, self).__init__(blockList, unblockList, filterDict, filterList, filterList_var, ChinaSet, fileName, sourceRule)

def generate(self, isLite=False):
try:
if isLite:
logger.info("generate adblock AdGuard Lite...")
fileName = self.fileNameLite
filterList = self.filterListLite
else:
logger.info("generate adblock AdGuard...")
fileName = self.fileName
filterList = self.filterList

if os.path.exists(fileName):
os.remove(fileName)

# 生成规则文件
with open(fileName, 'a') as f:
f.write("!\n")
if isLite:
f.write("! Title: AdBlock Filter Lite\n")
f.write("! Description: 适用于 AdGuard 的去广告合并规则,每 8 个小时更新一次。规则源:%s。Lite 版仅针对国内域名拦截。\n"%(self.sourceRule))
else:
f.write("! Title: AdBlock Filter\n")
f.write("! Description: 适用于 AdGuard 的去广告合并规则,每 8 个小时更新一次。规则源:%s。\n"%(self.sourceRule))
f.write("! Homepage: %s\n"%(self.homepage))
f.write("! Source: %s/%s\n"%(self.source, os.path.basename(fileName)))
f.write("! Version: %s\n"%(self.version))
f.write("! Last modified: %s\n"%(self.time))
f.write("! Blocked Filters: %s\n"%(len(filterList)))
f.write("!\n")
for fiter in self.filterList_var:
f.write("%s\n"%(fiter))
for fiter in filterList:
f.write("%s\n"%(fiter))

if isLite:
logger.info("adblock AdGuard Lite: block=%d"%(len(filterList)))
else:
logger.info("adblock AdGuard: block=%d"%(len(filterList)))
except Exception as e:
logger.error("%s"%(e))
54 changes: 54 additions & 0 deletions app/adguardhome.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import os
from typing import List, Set, Dict

from loguru import logger

from app.base import APPBase

class AdGuardHome(APPBase):
def __init__(self, blockList:List[str], unblockList:List[str], filterDict:Dict[str,str], filterList:List[str], filterList_var:List[str], ChinaSet:Set[str], fileName:str, sourceRule:str):
super(AdGuardHome, self).__init__(blockList, unblockList, filterDict, filterList, filterList_var, ChinaSet, fileName, sourceRule)

def generate(self, isLite=False):
try:
if isLite:
logger.info("generate adblock AdGuardHome Lite...")
fileName = self.fileNameLite
blockList = self.blockListLite
unblockList = self.unblockListLite
else:
logger.info("generate adblock AdGuardHome...")
fileName = self.fileName
blockList = self.blockList
unblockList = self.unblockList

if os.path.exists(fileName):
os.remove(fileName)

# 生成规则文件
with open(fileName, 'a') as f:
f.write("!\n")
if isLite:
f.write("! Title: AdBlock DNS Lite\n")
f.write("! Description: 适用于 AdGuard、AdGuardHome 的去广告合并规则,每 8 个小时更新一次。规则源:%s。Lite 版仅针对国内域名拦截。\n"%(self.sourceRule))
else:
f.write("! Title: AdBlock DNS\n")
f.write("! Description: 适用于 AdGuard、AdGuardHome 的去广告合并规则,每 8 个小时更新一次。规则源:%s。\n"%(self.sourceRule))
f.write("! Homepage: %s\n"%(self.homepage))
f.write("! Source: %s/%s\n"%(self.source, os.path.basename(fileName)))
f.write("! Version: %s\n"%(self.version))
f.write("! Last modified: %s\n"%(self.time))
f.write("! Blocked domains: %s\n"%(len(blockList)))
f.write("! unBlocked domains: %s\n"%(len(unblockList)))
f.write("!\n")
for domain in blockList:
f.write("||%s^\n"%(domain))
for domain in unblockList:
f.write("@@||%s^\n"%(domain))

if isLite:
logger.info("adblock AdGuardHome Lite: block=%d, unblock=%d"%(len(blockList), len(unblockList)))
else:
logger.info("adblock AdGuardHome: block=%d, unblock=%d"%(len(blockList), len(unblockList)))
except Exception as e:
logger.error("%s"%(e))
65 changes: 65 additions & 0 deletions app/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import time
from typing import List, Set, Dict
from abc import ABC, abstractmethod

from loguru import logger


class APPBase(ABC):
def __init__(self, blockList:List[str], unblockList:List[str], filterDict:Dict[str,str], filterList:List[str], filterList_var:List[str], ChinaSet:Set[str], fileName:str, sourceRule:str):
self.homepage:str = "https://github.com/Sereinfy/Adrules"
self.source:str = "https://raw.githubusercontent.com/Sereinfy/Adrules/main/rules"
self.version:str = "%s"%(time.strftime("%Y%m%d%H%M%S", time.localtime()))
self.time:str = "%s"%(time.strftime("%Y/%m/%d %H:%M:%S", time.localtime()))
self.blockList:List[str] = blockList
self.unblockList:List[str] = unblockList
self.filterDict:Dict[str,str] = filterDict
self.filterList:List[str] = filterList
self.filterList_var:List[str] = filterList_var
self.ChinaSet:Set[str] = ChinaSet
self.fileName:str = fileName
self.sourceRule:str = sourceRule
self.blockListLite:List[str] = self.__generateDomainLiteList(self.blockList, self.ChinaSet)
self.unblockListLite:List[str] = self.__generateDomainLiteList(self.unblockList, self.ChinaSet)
self.filterListLite:List[str] = self.__generateFilterLiteList(self.filterDict, self.filterList, self.ChinaSet)
self.fileNameLite:str = fileName[:self.fileName.rfind(".")] + "lite" + fileName[self.fileName.rfind("."):]

def __generateDomainLiteList(self, domainList:List[str], ChinaSet:Set[str]):
liteList = []
try:
for domain in domainList:
if domain in ChinaSet:
liteList.append(domain)
except Exception as e:
logger.error("%s"%(e))
finally:
return liteList

def __generateFilterLiteList(self, filterDict:Dict[str,str], filterList:List[str], ChinaSet:Set[str]):
liteList = []
try:
for filter in filterList:
domain = filterDict[filter]
if domain:
if domain in ChinaSet:
liteList.append(filter)
else:
liteList.append(filter)
except Exception as e:
logger.error("%s"%(e))
finally:
return liteList

@abstractmethod
def generate(self, isLite=False):
pass

def generateAll(self):
try:
if len(self.blockList):
self.generate()

if len(self.blockListLite):
self.generate(isLite=True)
except Exception as e:
logger.error("%s"%(e))
49 changes: 49 additions & 0 deletions app/clash.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import os
from typing import List, Set, Dict

from loguru import logger

from app.base import APPBase

class Clash(APPBase):
def __init__(self, blockList:List[str], unblockList:List[str], filterDict:Dict[str,str], filterList:List[str], filterList_var:List[str], ChinaSet:Set[str], fileName:str, sourceRule:str):
super(Clash, self).__init__(blockList, unblockList, filterDict, filterList, filterList_var, ChinaSet, fileName, sourceRule)

def generate(self, isLite=False):
try:
if isLite:
logger.info("generate adblock Clash Lite...")
fileName = self.fileNameLite
blockList = self.blockListLite
else:
logger.info("generate adblock Clash...")
fileName = self.fileName
blockList = self.blockList

if os.path.exists(fileName):
os.remove(fileName)

# 生成规则文件
with open(fileName, 'a') as f:
f.write("#\n")
if isLite:
f.write("# Title: AdBlock Clash Lite\n")
f.write("# Description: 适用于 Clash 的去广告合并规则,每 8 个小时更新一次。规则源:%s。Lite 版仅针对国内域名拦截。\n"%(self.sourceRule))
else:
f.write("# Title: AdBlock Clash\n")
f.write("# Description: 适用于 Clash 的去广告合并规则,每 8 个小时更新一次。规则源:%s。\n"%(self.sourceRule))
f.write("# Homepage: %s\n"%(self.homepage))
f.write("# Source: %s/%s\n"%(self.source, os.path.basename(fileName)))
f.write("# Version: %s\n"%(self.version))
f.write("# Last modified: %s\n"%(self.time))
f.write("# Blocked domains: %s\n"%(len(blockList)))
f.write("#\n")
for domain in blockList:
f.write("DOMAIN-SUFFIX,%s\n"%(domain))

if isLite:
logger.info("adblock Clash Lite: block=%d"%(len(blockList)))
else:
logger.info("adblock Clash: block=%d"%(len(blockList)))
except Exception as e:
logger.error("%s"%(e))
49 changes: 49 additions & 0 deletions app/dnsmasq.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import os
from typing import List, Set, Dict

from loguru import logger

from app.base import APPBase

class DNSMasq(APPBase):
def __init__(self, blockList:List[str], unblockList:List[str], filterDict:Dict[str,str], filterList:List[str], filterList_var:List[str], ChinaSet:Set[str], fileName:str, sourceRule:str):
super(DNSMasq, self).__init__(blockList, unblockList, filterDict, filterList, filterList_var, ChinaSet, fileName, sourceRule)

def generate(self, isLite=False):
try:
if isLite:
logger.info("generate adblock DNSMasq Lite...")
fileName = self.fileNameLite
blockList = self.blockListLite
else:
logger.info("generate adblock DNSMasq...")
fileName = self.fileName
blockList = self.blockList

if os.path.exists(fileName):
os.remove(fileName)

# 生成规则文件
with open(fileName, 'a') as f:
f.write("#\n")
if isLite:
f.write("# Title: AdBlock DNSMasq Lite\n")
f.write("# Description: 适用于 DNSMasq 的去广告合并规则,每 8 个小时更新一次。规则源:%s。Lite 版仅针对国内域名拦截。\n"%(self.sourceRule))
else:
f.write("# Title: AdBlock DNSMasq\n")
f.write("# Description: 适用于 DNSMasq 的去广告合并规则,每 8 个小时更新一次。规则源:%s。\n"%(self.sourceRule))
f.write("# Homepage: %s\n"%(self.homepage))
f.write("# Source: %s/%s\n"%(self.source, os.path.basename(fileName)))
f.write("# Version: %s\n"%(self.version))
f.write("# Last modified: %s\n"%(self.time))
f.write("# Blocked domains: %s\n"%(len(blockList)))
f.write("#\n")
for domain in blockList:
f.write("local=/%s/\n"%(domain))

if isLite:
logger.info("adblock DNSMasq Lite: block=%d"%(len(blockList)))
else:
logger.info("adblock DNSMasq: block=%d"%(len(blockList)))
except Exception as e:
logger.error("%s"%(e))
49 changes: 49 additions & 0 deletions app/invizible.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import os
from typing import List, Set, Dict

from loguru import logger

from app.base import APPBase

class InviZible(APPBase):
def __init__(self, blockList:List[str], unblockList:List[str], filterDict:Dict[str,str], filterList:List[str], filterList_var:List[str], ChinaSet:Set[str], fileName:str, sourceRule:str):
super(InviZible, self).__init__(blockList, unblockList, filterDict, filterList, filterList_var, ChinaSet, fileName, sourceRule)

def generate(self, isLite=False):
try:
if isLite:
logger.info("generate adblock InviZible Lite...")
fileName = self.fileNameLite
blockList = self.blockListLite
else:
logger.info("generate adblock InviZible...")
fileName = self.fileName
blockList = self.blockList

if os.path.exists(fileName):
os.remove(fileName)

# 生成规则文件
with open(fileName, 'a') as f:
f.write("!\n")
if isLite:
f.write("! Title: AdBlock InviZible Lite\n")
f.write("! Description: 适用于 InviZible Pro、personalDNSfilter 的去广告合并规则,每 8 个小时更新一次。规则源:%s。Lite 版仅针对国内域名拦截。\n"%(self.sourceRule))
else:
f.write("! Title: AdBlock InviZible\n")
f.write("! Description: 适用于 InviZible Pro、personalDNSfilter 的去广告合并规则,每 8 个小时更新一次。规则源:%s。\n"%(self.sourceRule))
f.write("! Homepage: %s\n"%(self.homepage))
f.write("! Source: %s/%s\n"%(self.source, os.path.basename(fileName)))
f.write("! Version: %s\n"%(self.version))
f.write("! Last modified: %s\n"%(self.time))
f.write("! Blocked domains: %s\n"%(len(blockList)))
f.write("!\n")
for domain in blockList:
f.write("%s\n"%(domain))

if isLite:
logger.info("adblock InviZible Lite: block=%d"%(len(blockList)))
else:
logger.info("adblock InviZible: block=%d"%(len(blockList)))
except Exception as e:
logger.error("%s"%(e))
49 changes: 49 additions & 0 deletions app/quantumultx.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import os
from typing import List, Set, Dict

from loguru import logger

from app.base import APPBase

class QuantumultX(APPBase):
def __init__(self, blockList:List[str], unblockList:List[str], filterDict:Dict[str,str], filterList:List[str], filterList_var:List[str], ChinaSet:Set[str], fileName:str, sourceRule:str):
super(QuantumultX, self).__init__(blockList, unblockList, filterDict, filterList, filterList_var, ChinaSet, fileName, sourceRule)

def generate(self, isLite=False):
try:
if isLite:
logger.info("generate adblock QuantumultX Lite...")
fileName = self.fileNameLite
blockList = self.blockListLite
else:
logger.info("generate adblock QuantumultX...")
fileName = self.fileName
blockList = self.blockList

if os.path.exists(fileName):
os.remove(fileName)

# 生成规则文件
with open(fileName, 'a') as f:
f.write("#\n")
if isLite:
f.write("# Title: AdBlock QuantumultX Lite\n")
f.write("# Description: 适用于 QuantumultX 的去广告合并规则,每 8 个小时更新一次。规则源:%s。Lite 版仅针对国内域名拦截。\n"%(self.sourceRule))
else:
f.write("# Title: AdBlock QuantumultX\n")
f.write("# Description: 适用于 QuantumultX 的去广告合并规则,每 8 个小时更新一次。规则源:%s。\n"%(self.sourceRule))
f.write("# Homepage: %s\n"%(self.homepage))
f.write("# Source: %s/%s\n"%(self.source, os.path.basename(fileName)))
f.write("# Version: %s\n"%(self.version))
f.write("# Last modified: %s\n"%(self.time))
f.write("# Blocked domains: %s\n"%(len(blockList)))
f.write("#\n")
for domain in blockList:
f.write("host-suffix,%s,reject\n"%(domain))

if isLite:
logger.info("adblock QuantumultX Lite: block=%d"%(len(blockList)))
else:
logger.info("adblock QuantumultX: block=%d"%(len(blockList)))
except Exception as e:
logger.error("%s"%(e))
Loading

0 comments on commit f182c6e

Please sign in to comment.