-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuser_preferences.py
More file actions
125 lines (99 loc) · 4.02 KB
/
user_preferences.py
File metadata and controls
125 lines (99 loc) · 4.02 KB
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
"""
User preferences management for Daily Light Bot
Handles language preferences and other user settings
"""
import json
from datetime import datetime
from languages import Languages
class UserPreferences:
def __init__(self, db_file="user_preferences.json"):
self.db_file = db_file
self.preferences = self.load_preferences()
def load_preferences(self):
"""Load user preferences from file"""
try:
with open(self.db_file, "r", encoding="utf-8") as f:
return json.load(f)
except FileNotFoundError:
return {}
except json.JSONDecodeError:
return {}
def save_preferences(self):
"""Save user preferences to file"""
try:
with open(self.db_file, "w", encoding="utf-8") as f:
json.dump(self.preferences, f, indent=2, ensure_ascii=False)
except Exception as e:
print(f"Error saving preferences: {e}")
def get_user_language(self, user_id):
"""Get user's preferred language"""
user_id = str(user_id)
return self.preferences.get(user_id, {}).get(
"language", Languages.DEFAULT_LANGUAGE
)
def set_user_language(self, user_id, language):
"""Set user's preferred language"""
if not Languages.is_supported_language(language):
language = Languages.DEFAULT_LANGUAGE
user_id = str(user_id)
if user_id not in self.preferences:
self.preferences[user_id] = {}
self.preferences[user_id]["language"] = language
self.preferences[user_id]["updated_at"] = datetime.now().isoformat()
self.save_preferences()
return language
def get_group_language(self, chat_id):
"""Get group's preferred language (uses admin's language or default)"""
chat_id = str(chat_id)
return self.preferences.get(f"group_{chat_id}", {}).get(
"language", Languages.DEFAULT_LANGUAGE
)
def set_group_language(self, chat_id, language, set_by_user_id=None):
"""Set group's preferred language"""
if not Languages.is_supported_language(language):
language = Languages.DEFAULT_LANGUAGE
chat_id = str(chat_id)
group_key = f"group_{chat_id}"
if group_key not in self.preferences:
self.preferences[group_key] = {}
self.preferences[group_key]["language"] = language
self.preferences[group_key]["updated_at"] = datetime.now().isoformat()
if set_by_user_id:
self.preferences[group_key]["set_by"] = str(set_by_user_id)
self.save_preferences()
return language
def get_user_stats(self):
"""Get user statistics"""
total_users = len(
[k for k in self.preferences.keys() if not k.startswith("group_")]
)
total_groups = len(
[k for k in self.preferences.keys() if k.startswith("group_")]
)
language_stats = {}
for pref in self.preferences.values():
lang = pref.get("language", Languages.DEFAULT_LANGUAGE)
language_stats[lang] = language_stats.get(lang, 0) + 1
return {
"total_users": total_users,
"total_groups": total_groups,
"language_distribution": language_stats,
}
def cleanup_old_preferences(self, days=30):
"""Remove preferences older than specified days"""
from datetime import datetime, timedelta
cutoff_date = datetime.now() - timedelta(days=days)
to_remove = []
for user_id, prefs in self.preferences.items():
if "updated_at" in prefs:
try:
updated_at = datetime.fromisoformat(prefs["updated_at"])
if updated_at < cutoff_date:
to_remove.append(user_id)
except ValueError:
pass
for user_id in to_remove:
del self.preferences[user_id]
if to_remove:
self.save_preferences()
return len(to_remove)