File size: 2,694 Bytes
cf9a59d
cf7e318
 
 
53300f2
70af755
53300f2
a2a9f73
 
b19385f
cf9a59d
cf7e318
 
a2a9f73
 
 
 
b19385f
 
cf9a59d
b19385f
a2a9f73
 
 
b19385f
b53b375
a2a9f73
b19385f
 
a2a9f73
 
 
 
 
 
 
 
 
 
 
 
b19385f
 
a2a9f73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b19385f
a2a9f73
b19385f
a2a9f73
b19385f
8ddeeb7
a2a9f73
 
53300f2
a2a9f73
 
 
 
53300f2
cf7e318
b19385f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import os
import json
import requests
from flask import Flask, request, jsonify
from datetime import datetime, timedelta
import asyncio
import re
import webdav3.client as webdav
import threading
import time

app = Flask(__name__)

# 现有的代码保持不变...

# WebDAV配置
WEBDAV_HOSTNAME = os.environ.get('WEBDAV_HOSTNAME')
WEBDAV_USERNAME = os.environ.get('WEBDAV_USERNAME')
WEBDAV_PASSWORD = os.environ.get('WEBDAV_PASSWORD')

webdav_options = {
 'webdav_hostname': WEBDAV_HOSTNAME,
 'webdav_login':    WEBDAV_USERNAME,
 'webdav_password': WEBDAV_PASSWORD
}

webdav_client = webdav.Client(webdav_options)

def save_data_to_webdav():
    data = {
        'chatHistories': chatHistories,
        'GROUP_SETTINGS': GROUP_SETTINGS,
        'USER_SETTINGS': USER_SETTINGS,
        'USER_LAST_ACTIVE': {str(k): v.isoformat() for k, v in USER_LAST_ACTIVE.items()},
        'GROUP_ACTIVE_USERS': {str(k): list(v) for k, v in GROUP_ACTIVE_USERS.items()},
        'GROUP_INFO': {str(k): {**v, 'last_active': v['last_active'].isoformat()} for k, v in GROUP_INFO.items()},
        'BANNED_USERS': {str(k): v.isoformat() for k, v in BANNED_USERS.items()}
    }
    
    json_data = json.dumps(data)
    webdav_client.upload_content('/tg_bot/bot_data.json', json_data)

def load_data_from_webdav():
    global chatHistories, GROUP_SETTINGS, USER_SETTINGS, USER_LAST_ACTIVE, GROUP_ACTIVE_USERS, GROUP_INFO, BANNED_USERS
    
    if webdav_client.check('/tg_bot/bot_data.json'):
        json_data = webdav_client.download_from('/tg_bot/bot_data.json')
        data = json.loads(json_data)
        
        chatHistories = data.get('chatHistories', {})
        GROUP_SETTINGS = data.get('GROUP_SETTINGS', {})
        USER_SETTINGS = data.get('USER_SETTINGS', {})
        USER_LAST_ACTIVE = {int(k): datetime.fromisoformat(v) for k, v in data.get('USER_LAST_ACTIVE', {}).items()}
        GROUP_ACTIVE_USERS = {int(k): set(v) for k, v in data.get('GROUP_ACTIVE_USERS', {}).items()}
        GROUP_INFO = {int(k): {**v, 'last_active': datetime.fromisoformat(v['last_active'])} for k, v in data.get('GROUP_INFO', {}).items()}
        BANNED_USERS = {int(k): datetime.fromisoformat(v) for k, v in data.get('BANNED_USERS', {}).items()}
    else:
        print("No data found on WebDAV, initializing with empty data.")

def periodic_save():
    while True:
        time.sleep(60)  # 等待60秒
        save_data_to_webdav()

# 在程序启动时加载数据
load_data_from_webdav()

# 启动定期保存的线程
save_thread = threading.Thread(target=periodic_save)
save_thread.daemon = True
save_thread.start()

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))