-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuser_management.py
More file actions
60 lines (47 loc) · 2.18 KB
/
user_management.py
File metadata and controls
60 lines (47 loc) · 2.18 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
import json
import logging
import argparse
import os
from typing import List, Dict
class UserManager:
def __init__(self, config_file: str = "allowed_users.json"):
self.config_file = config_file
self.allowed_users = self._load_users()
def _load_users(self) -> List[Dict]:
if os.path.exists(self.config_file):
try:
with open(self.config_file, "r") as f:
return json.load(f)
except Exception as e:
logging.error(f"Error parsing {self.config_file}: {str(e)}")
return self._initialize_admin()
def _initialize_admin(self) -> List[Dict]:
parser = argparse.ArgumentParser()
parser.add_argument("-admin", help="specify admin username")
args = parser.parse_args()
admin_username = args.admin if args.admin else input("Enter bot admin telegram username: ")
if not admin_username:
raise ValueError("No admin specified. Use -admin argument or enter manually")
admin_username = admin_username.lstrip("@")
logging.info(f"Bot admin is {admin_username}")
users = [{"username": admin_username}]
self._dump_users(users)
return users
def _dump_users(self, users: List[Dict]) -> None:
with open(self.config_file, "w") as file:
json.dump(users, file)
def is_user_allowed(self, message) -> bool:
username = message.from_user.username
is_allowed = any(user["username"] == username for user in self.allowed_users)
if not is_allowed:
logging.warning(f"[{username}] Unauthorized access attempt")
return is_allowed
def add_user(self, username: str) -> bool:
username = username.lstrip("@")
if any(user["username"] == username for user in self.allowed_users):
logging.info(f"[{username}] User already in allowed list")
return False
self.allowed_users.append({"username": username})
self._dump_users(self.allowed_users)
logging.info(f"[{username}] Added new user to allowed list")
return True