AWAvenue-Ads-Rule/main.py
2024-09-22 02:54:01 +08:00

95 lines
3.2 KiB
Python
Executable File

import os
import sys
import json
import importlib
import subprocess
import datetime
SCRIPT_PATH = os.path.join(os.getcwd(), "script") # 插件文件夹
RULE_PATH = os.path.join(os.getcwd(), "rule") # 规则文件夹
OUT_PATH = os.getcwd() + "/out" # 输出文件夹
domain_file=RULE_PATH + "/domain.txt" # 规则文件
regex_file=RULE_PATH + "/domain_regex.txt" # 正则规则文件
ip_file=RULE_PATH + "/ip.txt" # IP规则文件
ip6_file=RULE_PATH + "/ip6.txt" # IPv6规则文件
if not os.path.exists(OUT_PATH):
print(f"{OUT_PATH} 目录不存在!")
sys.exit(1)
class RuleList:
# 初始化规则列表
def __init__(self, domain_file, regex_file, ip_file, ip6_file):
with open(domain_file, 'r') as file:
lines = file.read().splitlines()
self.domain_list = sorted(set(lines))
with open(regex_file, 'r') as file:
lines = file.read().splitlines()
self.regex_list = sorted(set(lines))
with open(ip_file, 'r') as file:
lines = file.read().splitlines()
self.ip_list = sorted(set(lines))
with open(ip6_file, 'r') as file:
lines = file.read().splitlines()
self.ip6_list = sorted(set(lines))
rule = RuleList(domain_file, regex_file, ip_file, ip6_file)
def get_latest_git_tag(): # 获取最新的git tag
process = subprocess.Popen('git tag', stdout=subprocess.PIPE, shell=True)
output, error = process.communicate()
tags = output.decode().strip().split('\n')
if tags:
return tags[-1]
else:
return None
def WriteFile(name, text, suffix, comment, module_total): # 写入文件
try:
with open(OUT_PATH + "/AWAvenue-Ads-Rule-" + name + suffix, 'w', encoding="utf-8") as file:
if comment != "":
title = f"""{comment}Title: AWAvenue Ads Rule
{comment}--------------------------------------
{comment}Total lines: {module_total}
{comment}Version: {get_latest_git_tag()}
{comment}Homepage: https://github.com/TG-Twilight/AWAvenue-Ads-Rule
{comment}License: https://github.com/TG-Twilight/AWAvenue-Ads-Rule/blob/main/LICENSE
"""
else:
title = ""
file.write(title)
for line in text:
file.write(line + "\n")
except Exception as e:
print(f"写入插件:{name}执行失败: {e}")
def RunScript():
for filename in os.listdir(SCRIPT_PATH): # 遍历script目录下的所有文件
if filename.endswith(".py"):
plugins_name = filename[:-3]
full_plugins_name = f"script.{plugins_name}" # 拼接完整的插件名
try:
plugins = importlib.import_module(full_plugins_name).build(rule) # 传入规则列表(RuleList)类的实例
# 判断插件是否有list、total、suffix、comment四个属性
if len(plugins) == 4:
WriteFile(plugins_name, plugins['list'], plugins['suffix'], plugins['comment'], str(plugins['total']))
else:
print(f"转换插件:{plugins_name}执行失败: 缺少必要属性")
except Exception as e:
print(f"转换插件:{plugins_name}执行失败: {e}")
if __name__ == "__main__":
RunScript()