yangtb24 commited on
Commit
2639568
·
verified ·
1 Parent(s): 93e07d5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +78 -2
app.py CHANGED
@@ -5,6 +5,8 @@ from flask import Flask, request, jsonify
5
  from datetime import datetime, timedelta
6
  import asyncio
7
  import re
 
 
8
 
9
  app = Flask(__name__)
10
 
@@ -13,8 +15,12 @@ AI_API_ENDPOINT = os.environ.get('AI_API_ENDPOINT')
13
  AI_API_KEY = os.environ.get('AI_API_KEY')
14
  AI_MODEL = os.environ.get('AI_MODEL')
15
  PHP_PROXY_URL = os.environ.get('PHP_PROXY_URL')
 
 
 
 
16
 
17
- if not all([TELEGRAM_BOT_TOKEN, AI_API_ENDPOINT, AI_API_KEY, AI_MODEL]):
18
  raise ValueError("请设置所有必要的环境变量")
19
 
20
  AI_API_HEADERS = {
@@ -80,6 +86,7 @@ BAN_TRIGGER_PHRASES = [
80
  ]
81
  UNBAN_PHRASE = "close username"
82
 
 
83
  def make_telegram_request(method, data=None):
84
  url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/{method}"
85
  if PHP_PROXY_URL:
@@ -472,5 +479,74 @@ async def unbanUser(chatId, userId):
472
  await sendTelegramMessage(chatId, f"用户 {userId} 已被解禁。")
473
  print(f"用户 {userId} 在群组 {chatId} 中被解禁。")
474
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
475
  if __name__ == '__main__':
476
- app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))
 
 
 
 
 
5
  from datetime import datetime, timedelta
6
  import asyncio
7
  import re
8
+ import time
9
+ from urllib.parse import urljoin
10
 
11
  app = Flask(__name__)
12
 
 
15
  AI_API_KEY = os.environ.get('AI_API_KEY')
16
  AI_MODEL = os.environ.get('AI_MODEL')
17
  PHP_PROXY_URL = os.environ.get('PHP_PROXY_URL')
18
+ WEBDAV_URL = os.environ.get('WEBDAV_URL')
19
+ WEBDAV_USERNAME = os.environ.get('WEBDAV_USERNAME')
20
+ WEBDAV_PASSWORD = os.environ.get('WEBDAV_PASSWORD')
21
+ WEBDAV_DIR = "/tg_bot/"
22
 
23
+ if not all([TELEGRAM_BOT_TOKEN, AI_API_ENDPOINT, AI_API_KEY, AI_MODEL, WEBDAV_URL, WEBDAV_USERNAME, WEBDAV_PASSWORD]):
24
  raise ValueError("请设置所有必要的环境变量")
25
 
26
  AI_API_HEADERS = {
 
86
  ]
87
  UNBAN_PHRASE = "close username"
88
 
89
+
90
  def make_telegram_request(method, data=None):
91
  url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/{method}"
92
  if PHP_PROXY_URL:
 
479
  await sendTelegramMessage(chatId, f"用户 {userId} 已被解禁。")
480
  print(f"用户 {userId} 在群组 {chatId} 中被解禁。")
481
 
482
+ def webdav_upload(filename, data):
483
+ url = urljoin(WEBDAV_URL, f"{WEBDAV_DIR}{filename}")
484
+ try:
485
+ response = requests.put(url, auth=(WEBDAV_USERNAME, WEBDAV_PASSWORD), data=json.dumps(data), headers={'Content-Type': 'application/json'})
486
+ response.raise_for_status()
487
+ print(f"WebDAV 上传成功: {filename}")
488
+ except requests.exceptions.RequestException as e:
489
+ print(f"WebDAV 上传失败: {filename}, {e}")
490
+
491
+ def webdav_download(filename):
492
+ url = urljoin(WEBDAV_URL, f"{WEBDAV_DIR}{filename}")
493
+ try:
494
+ response = requests.get(url, auth=(WEBDAV_USERNAME, WEBDAV_PASSWORD))
495
+ response.raise_for_status()
496
+ print(f"WebDAV 下载成功: {filename}")
497
+ return response.json()
498
+ except requests.exceptions.RequestException as e:
499
+ print(f"WebDAV 下载失败: {filename}, {e}")
500
+ return None
501
+
502
+ def sync_data_to_webdav():
503
+ while True:
504
+ try:
505
+ webdav_upload('chatHistories.json', chatHistories)
506
+ webdav_upload('GROUP_SETTINGS.json', GROUP_SETTINGS)
507
+ webdav_upload('USER_SETTINGS.json', USER_SETTINGS)
508
+ webdav_upload('USER_LAST_ACTIVE.json', USER_LAST_ACTIVE)
509
+ webdav_upload('GROUP_ACTIVE_USERS.json', GROUP_ACTIVE_USERS)
510
+ webdav_upload('GROUP_INFO.json', GROUP_INFO)
511
+ webdav_upload('BANNED_USERS.json', BANNED_USERS)
512
+ except Exception as e:
513
+ print(f"WebDAV 同步失败: {e}")
514
+ time.sleep(60)
515
+
516
+ def load_data_from_webdav():
517
+ global chatHistories, GROUP_SETTINGS, USER_SETTINGS, USER_LAST_ACTIVE, GROUP_ACTIVE_USERS, GROUP_INFO, BANNED_USERS
518
+
519
+ loaded_chatHistories = webdav_download('chatHistories.json')
520
+ if loaded_chatHistories:
521
+ chatHistories = loaded_chatHistories
522
+
523
+ loaded_GROUP_SETTINGS = webdav_download('GROUP_SETTINGS.json')
524
+ if loaded_GROUP_SETTINGS:
525
+ GROUP_SETTINGS = loaded_GROUP_SETTINGS
526
+
527
+ loaded_USER_SETTINGS = webdav_download('USER_SETTINGS.json')
528
+ if loaded_USER_SETTINGS:
529
+ USER_SETTINGS = loaded_USER_SETTINGS
530
+
531
+ loaded_USER_LAST_ACTIVE = webdav_download('USER_LAST_ACTIVE.json')
532
+ if loaded_USER_LAST_ACTIVE:
533
+ USER_LAST_ACTIVE = {int(k): datetime.fromisoformat(v) for k, v in loaded_USER_LAST_ACTIVE.items()}
534
+
535
+ loaded_GROUP_ACTIVE_USERS = webdav_download('GROUP_ACTIVE_USERS.json')
536
+ if loaded_GROUP_ACTIVE_USERS:
537
+ GROUP_ACTIVE_USERS = {int(k): set(v) for k, v in loaded_GROUP_ACTIVE_USERS.items()}
538
+
539
+ loaded_GROUP_INFO = webdav_download('GROUP_INFO.json')
540
+ if loaded_GROUP_INFO:
541
+ GROUP_INFO = {int(k): {**v, 'last_active': datetime.fromisoformat(v['last_active'])} for k, v in loaded_GROUP_INFO.items()}
542
+
543
+ loaded_BANNED_USERS = webdav_download('BANNED_USERS.json')
544
+ if loaded_BANNED_USERS:
545
+ BANNED_USERS = {int(k): datetime.fromisoformat(v) for k, v in loaded_BANNED_USERS.items()}
546
+
547
  if __name__ == '__main__':
548
+ load_data_from_webdav()
549
+ import threading
550
+ sync_thread = threading.Thread(target=sync_data_to_webdav, daemon=True)
551
+ sync_thread.start()
552
+ app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))