-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathServerInfo.py
More file actions
121 lines (103 loc) · 3.69 KB
/
Copy pathServerInfo.py
File metadata and controls
121 lines (103 loc) · 3.69 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
import os
import _pickle as pickle
from collections.abc import MutableMapping
class ServerInfoSet(MutableMapping):
def __init__(self):
self.file = ""
self.dict = {}
@staticmethod
def load_from_file(file):
if(os.path.isfile(file)):
with open(file, 'rb') as pkl_file:
inst = pickle.load(pkl_file)
if isinstance(inst, dict): inst = ServerInfoSet.legacy_convert(inst)
elif not isinstance(inst, ServerInfoSet): inst = ServerInfoSet()
inst.file = file
return inst
else:
sis = ServerInfoSet()
sis.file = file
sis.save_to_file()
return sis
def save_to_file(self, file=None):
if(file): self.file = file
else: file = self.file
self.file = file
with open(file, 'wb') as pkl_file:
pickle.dump(self, pkl_file)
return
@staticmethod
def legacy_convert(legacy):
# Old format was a dict of ServerInfo objs, easy to convert
inst = ServerInfoSet()
for k in legacy.keys():
if isinstance(legacy[k], ServerInfo):
inst[k] = legacy[k]
return inst
# MutableMapping Reqs
def __str__(self): return str(self.dict)
def __len__(self): return len(self.dict)
def __iter__(self): return iter(self.dict)
def __getitem__(self,k): return self.dict[k]
def __setitem__(self,k,v): self.dict[k] = v
def __delitem__(self,k): del self.dict[k]
class ServerInfo(object):
"""Stores server settings and information in an accessible dictionary"""
def __init__(self, server_id):
self.server_id = int(server_id)
self.admins = []
self.guild_name = None
self.guild_realm = None
self.guild_region = None
self.auto_report = False
self.default_channel = None
self.auto_report_mode_long = False
self.most_recent_log_start = 0
self.most_recent_log_end = 0
self.most_recent_log_summary = 0 #the messageID (within default channel) to edit if need be
def update_guild(self, name, realm, region):
self.guild_name = name
self.guild_realm = realm
self.guild_region = region
def has_guild(self):
return ((self.guild_name is not None)
and (self.guild_realm is not None)
and (self.guild_region is not None))
def toggle_auto_report(self):
self.auto_report = (self.auto_report==False)
def toggle_auto_report_mode(self):
self.auto_report_mode_long = (self.auto_report_mode_long==False)
def add_admin(self, userID):
self.admins.append(userID)
def remove_admin(self, userID):
if(userID in self.admins):
self.admins.remove(userID)
def set_default_channel(self, channelID):
self.default_channel = channelID
self.most_recent_log_summary = 0
def update_recent_log(self, start, end):
if(self.most_recent_log_start > start):
print("Updating log time for "+self.server_id +", but something has gone wrong.")
self.most_recent_log_start = start
self.most_recent_log_end = end
def update_log_summary(self, messageID):
self.most_recent_log_summary = messageID
def enforce_format(self):
# Convert certain values to integers
self.server_id = int(self.server_id)
self.admins = list(map(lambda x: int(x), self.admins))
self.default_channel = int(self.default_channel)
self.most_recent_log_summary = int(self.most_recent_log_summary)
def __str__(self):
string = ("server_id="+str(self.server_id)+"\n"
+ "admins="+str(self.admins)+"\n"
+ "guild_name="+str(self.guild_name)+"\n"
+ "guild_realm="+str(self.guild_realm)+"\n"
+ "guild_region="+str(self.guild_region)+"\n"
+ "auto_report="+str(self.auto_report)+"\n"
+ "default_channel="+str(self.default_channel)+"\n"
+ "auto_report_mode_long="+str(self.auto_report_mode_long)+"\n"
+ "most_recent_log_start="+str(self.most_recent_log_start)+"\n"
+ "most_recent_log_end="+str(self.most_recent_log_end)+"\n"
+ "most_recent_log_summary="+str(self.most_recent_log_summary)+"\n")
return string