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