yangtb24 commited on
Commit
b53b375
·
verified ·
1 Parent(s): 7c4b8b0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -43
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 = '/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,55 +92,55 @@ webdav_options = {
92
  'webdav_login': WEBDAV_USERNAME,
93
  'webdav_password': WEBDAV_PASSWORD
94
  }
95
- webdav_client = Client(webdav_options)
 
 
 
 
 
 
 
 
 
 
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"上传数据到 WebDAV 失败: {e}")
 
 
 
 
 
 
 
 
 
 
 
 
 
119
 
120
  def load_data_from_webdav():
121
- global chatHistories, GROUP_SETTINGS, USER_SETTINGS, USER_LAST_ACTIVE, GROUP_ACTIVE_USERS, GROUP_INFO, BANNED_USERS
122
- try:
123
- file_name = f"{WEBDAV_DIRECTORY}/data.json"
124
- if webdav_client.check(file_name):
125
- webdav_client.download_sync(remote_path=file_name, local_path="data.json")
126
- with open("data.json", "r") as f:
127
- data = json.load(f)
128
- chatHistories = data.get("chatHistories", {})
129
- GROUP_SETTINGS = data.get("GROUP_SETTINGS", {})
130
- USER_SETTINGS = data.get("USER_SETTINGS", {})
131
- USER_LAST_ACTIVE = {int(k): datetime.fromisoformat(v) for k, v in data.get("USER_LAST_ACTIVE", {}).items()}
132
- GROUP_ACTIVE_USERS = {int(k): set(v) for k, v in data.get("GROUP_ACTIVE_USERS", {}).items()}
133
- GROUP_INFO = {int(k): {**v, 'last_active': datetime.fromisoformat(v['last_active'])} for k, v in data.get("GROUP_INFO", {}).items()}
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 webdav_sync_thread():
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=webdav_sync_thread, daemon=True).start()
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)))