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)))
|