-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
9e68b47
commit f182c6e
Showing
54 changed files
with
1,734,935 additions
and
168,177 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
Oops, something went wrong.