Update app.py
Browse files
app.py
CHANGED
@@ -7,7 +7,7 @@ import asyncio
|
|
7 |
import re
|
8 |
import time
|
9 |
from threading import Thread
|
10 |
-
from webdav3.client import Client
|
11 |
|
12 |
app = Flask(__name__)
|
13 |
|
@@ -19,7 +19,7 @@ PHP_PROXY_URL = os.environ.get('PHP_PROXY_URL')
|
|
19 |
WEBDAV_URL = os.environ.get('WEBDAV_URL')
|
20 |
WEBDAV_USERNAME = os.environ.get('WEBDAV_USERNAME')
|
21 |
WEBDAV_PASSWORD = os.environ.get('WEBDAV_PASSWORD')
|
22 |
-
WEBDAV_DIRECTORY =
|
23 |
|
24 |
if not all([TELEGRAM_BOT_TOKEN, AI_API_ENDPOINT, AI_API_KEY, AI_MODEL, WEBDAV_URL, WEBDAV_USERNAME, WEBDAV_PASSWORD]):
|
25 |
raise ValueError("请设置所有必要的环境变量")
|
@@ -92,55 +92,55 @@ webdav_options = {
|
|
92 |
'webdav_login': WEBDAV_USERNAME,
|
93 |
'webdav_password': WEBDAV_PASSWORD
|
94 |
}
|
95 |
-
webdav_client =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
|
97 |
def save_data_to_webdav():
|
98 |
-
data = {
|
99 |
-
"chatHistories": chatHistories,
|
100 |
-
"GROUP_SETTINGS": GROUP_SETTINGS,
|
101 |
-
"USER_SETTINGS": USER_SETTINGS,
|
102 |
-
"USER_LAST_ACTIVE": {k: v.isoformat() for k, v in USER_LAST_ACTIVE.items()},
|
103 |
-
"GROUP_ACTIVE_USERS": {k: list(v) for k, v in GROUP_ACTIVE_USERS.items()},
|
104 |
-
"GROUP_INFO": {k: {**v, 'last_active': v['last_active'].isoformat()} for k, v in GROUP_INFO.items()},
|
105 |
-
"BANNED_USERS": {k: v.isoformat() for k, v in BANNED_USERS.items()}
|
106 |
-
}
|
107 |
try:
|
108 |
-
file_name = f"{WEBDAV_DIRECTORY}/data.json"
|
109 |
-
with open("data.json", "w") as f:
|
110 |
-
json.dump(data, f)
|
111 |
-
|
112 |
if not webdav_client.check(WEBDAV_DIRECTORY):
|
113 |
webdav_client.mkdir(WEBDAV_DIRECTORY)
|
114 |
-
|
115 |
-
webdav_client.upload_sync(remote_path=file_name, local_path="data.json")
|
116 |
-
print(f"数据已上传至 WebDAV: {file_name}")
|
117 |
except Exception as e:
|
118 |
-
print(f"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
|
120 |
def load_data_from_webdav():
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
BANNED_USERS = {int(k): datetime.fromisoformat(v) for k, v in data.get("BANNED_USERS", {}).items()}
|
135 |
-
|
136 |
-
print(f"从 WebDAV 加载数据成功: {file_name}")
|
137 |
-
else:
|
138 |
-
print("WebDAV 上没有找到数据文件,初始化为空数据。")
|
139 |
-
save_data_to_webdav()
|
140 |
-
except Exception as e:
|
141 |
-
print(f"从 WebDAV 加载数据失败: {e}")
|
142 |
|
143 |
-
def
|
144 |
while True:
|
145 |
save_data_to_webdav()
|
146 |
time.sleep(60)
|
@@ -538,5 +538,5 @@ async def unbanUser(chatId, userId):
|
|
538 |
|
539 |
if __name__ == '__main__':
|
540 |
load_data_from_webdav()
|
541 |
-
Thread(target=
|
542 |
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))
|
|
|
7 |
import re
|
8 |
import time
|
9 |
from threading import Thread
|
10 |
+
from webdav3.client import Client as WebdavClient
|
11 |
|
12 |
app = Flask(__name__)
|
13 |
|
|
|
19 |
WEBDAV_URL = os.environ.get('WEBDAV_URL')
|
20 |
WEBDAV_USERNAME = os.environ.get('WEBDAV_USERNAME')
|
21 |
WEBDAV_PASSWORD = os.environ.get('WEBDAV_PASSWORD')
|
22 |
+
WEBDAV_DIRECTORY = "/tg_bot"
|
23 |
|
24 |
if not all([TELEGRAM_BOT_TOKEN, AI_API_ENDPOINT, AI_API_KEY, AI_MODEL, WEBDAV_URL, WEBDAV_USERNAME, WEBDAV_PASSWORD]):
|
25 |
raise ValueError("请设置所有必要的环境变量")
|
|
|
92 |
'webdav_login': WEBDAV_USERNAME,
|
93 |
'webdav_password': WEBDAV_PASSWORD
|
94 |
}
|
95 |
+
webdav_client = WebdavClient(webdav_options)
|
96 |
+
|
97 |
+
DATA_KEYS = [
|
98 |
+
"chatHistories",
|
99 |
+
"GROUP_SETTINGS",
|
100 |
+
"USER_SETTINGS",
|
101 |
+
"USER_LAST_ACTIVE",
|
102 |
+
"GROUP_ACTIVE_USERS",
|
103 |
+
"GROUP_INFO",
|
104 |
+
"BANNED_USERS"
|
105 |
+
]
|
106 |
|
107 |
def save_data_to_webdav():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
try:
|
|
|
|
|
|
|
|
|
109 |
if not webdav_client.check(WEBDAV_DIRECTORY):
|
110 |
webdav_client.mkdir(WEBDAV_DIRECTORY)
|
111 |
+
print(f"Created directory: {WEBDAV_DIRECTORY}")
|
|
|
|
|
112 |
except Exception as e:
|
113 |
+
print(f"Error creating directory: {e}")
|
114 |
+
return
|
115 |
+
|
116 |
+
data_to_save = {key: globals()[key] for key in DATA_KEYS}
|
117 |
+
for key, value in data_to_save.items():
|
118 |
+
try:
|
119 |
+
file_path = f"{WEBDAV_DIRECTORY}/{key}.json"
|
120 |
+
with open(f"{key}.json", "w") as f:
|
121 |
+
json.dump(value, f)
|
122 |
+
webdav_client.upload_sync(remote_path=file_path, local_path=f"{key}.json")
|
123 |
+
os.remove(f"{key}.json")
|
124 |
+
print(f"Data saved to WebDAV: {file_path}")
|
125 |
+
except Exception as e:
|
126 |
+
print(f"Error saving data to WebDAV ({file_path}): {e}")
|
127 |
|
128 |
def load_data_from_webdav():
|
129 |
+
for key in DATA_KEYS:
|
130 |
+
try:
|
131 |
+
file_path = f"{WEBDAV_DIRECTORY}/{key}.json"
|
132 |
+
if webdav_client.check(file_path):
|
133 |
+
webdav_client.download_sync(remote_path=file_path, local_path=f"{key}.json")
|
134 |
+
with open(f"{key}.json", "r") as f:
|
135 |
+
globals()[key] = json.load(f)
|
136 |
+
os.remove(f"{key}.json")
|
137 |
+
print(f"Data loaded from WebDAV: {file_path}")
|
138 |
+
else:
|
139 |
+
print(f"File not found on WebDAV: {file_path}")
|
140 |
+
except Exception as e:
|
141 |
+
print(f"Error loading data from WebDAV ({file_path}): {e}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
|
143 |
+
def webdav_sync_loop():
|
144 |
while True:
|
145 |
save_data_to_webdav()
|
146 |
time.sleep(60)
|
|
|
538 |
|
539 |
if __name__ == '__main__':
|
540 |
load_data_from_webdav()
|
541 |
+
Thread(target=webdav_sync_loop, daemon=True).start()
|
542 |
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))
|