Update app.py
Browse files
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 |
-
|
|
|
|
|
|
|
|
|
|
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)))
|