tg-bot / app.py
yangtb24's picture
Update app.py
a2a9f73 verified
raw
history blame
2.69 kB
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)))