-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata.py
More file actions
213 lines (188 loc) · 9.1 KB
/
Copy pathdata.py
File metadata and controls
213 lines (188 loc) · 9.1 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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
import database as db
import message as msg
class Data:
def __init__(self):
db.init_db()
data = db.read_general()
self.header = data.get("header", "")
self.footer = data.get("footer", "")
self.more = data.get("more", "")
self.announcements = db.json.loads(data.get("announcements", "[]"))
self.header_e = db.json_to_e(data.get("header_e", "[]"))
self.footer_e = db.json_to_e(data.get("footer_e", "[]"))
self.more_e = db.json_to_e(data.get("more_e", "[]"))
self.announcements_e = [
db.json_to_e(e)
for e in db.json.loads(data.get("announcements_e", "[]"))
]
self.announce_page_size = int(data.get("announce_page_size", "10"))
self.dash_style = data.get("dash_style", "1") != "0"
self.reverse_list = data.get("reverse_list", "1") != "0"
self.more_space = data.get("more_space", "0") != "0"
self.save_chat_ids = data.get("save_chat_ids", "0") != "0"
self.ask_phone = data.get("ask_phone", "0") != "0"
ann_size, ann_e_size = len(self.announcements), len(self.announcements_e)
if ann_size > ann_e_size:
self.announcements_e += [list()] * (ann_size - ann_e_size)
self.page = list()
self.__update_pages__()
def __form_announcements__(self, start: int, end: int, force_num: bool = False):
text = ''
entities = []
announcements = (self.announcements[::-1] if self.reverse_list else self.announcements)[start:end]
announcements_e = (self.announcements_e[::-1] if self.reverse_list else self.announcements_e)[start:end]
point_start = ' - ' if self.dash_style and not force_num else f' {start + 1}. '
for i in range(len(announcements)):
text, entities = msg.join(
[text, announcements[i]],
[entities, announcements_e[i]],
point_start
)
point_start = ('\n\n' if self.more_space else '\n')
point_start += ' - ' if self.dash_style and not force_num else f' {start + i + 2}. '
return text, entities
def __form_toggle_buttons__(self):
return msg.form_buttons([
('Dash style', self.dash_style, 'dash_style'),
('Reverse announcements', self.reverse_list, 'reverse_list'),
('Expanded spacing', self.more_space, 'more_space'),
('Save IDs', self.save_chat_ids, 'save_chat_ids'),
('Phone number', self.ask_phone, 'ask_phone')
])
def __update_pages__(self):
self.page = list()
size = len(self.announcements)
if size > 0:
max_page = size // self.announce_page_size
max_page = max_page + 1 if max_page * self.announce_page_size < size else max_page
page = 0
while page < max_page:
text, entities = self.__form_announcements__(
start=page * self.announce_page_size,
end=min(size, (page + 1) * self.announce_page_size)
)
self.page.append(msg.join(
[self.header, text, self.footer],
[self.header_e, entities, self.footer_e],
'\n\n' if self.more_space else '\n'
))
page += 1
else:
self.page.append(msg.join(
[self.header, '\nThere is no announcement yet...', self.footer],
[self.header_e, [], self.footer_e],
'\n\n' if self.more_space else '\n'
))
def set_chat(self, chat_id: int, phone: str | None = None):
if phone is not None or self.save_chat_ids:
db.set_chat(chat_id, phone)
def set_header(self, text: str, entities: list[db.MessageEntity] | None):
self.header = text
self.header_e = entities or []
db.save_msg(("header", text, entities or []))
self.__update_pages__()
def set_footer(self, text: str, entities: list[db.MessageEntity] | None):
self.footer = text
self.footer_e = entities or []
db.save_msg(("footer", text, entities or []))
self.__update_pages__()
def set_more(self, text: str, entities: list[db.MessageEntity] | None):
self.more = text
self.more_e = entities or []
db.save_msg(("more", text, entities or []))
self.__update_pages__()
def add_announcements(self, text: str, entities: list[db.MessageEntity] | None, single: bool = False):
if single:
self.announcements.append(text)
self.announcements_e.append(entities or [])
else:
lines, lines_e = msg.split(text, entities or [], '\n')
self.announcements += lines
self.announcements_e += lines_e
db.save_many([
("announcements", db.json.dumps(self.announcements)),
("announcements_e", db.json.dumps([
db.e_to_json(e) for e in self.announcements_e
]))
])
self.__update_pages__()
def remove_announcements(self, indexes: list | None = None):
if indexes is None:
self.announcements = list()
self.announcements_e = list()
elif self.reverse_list:
self.announcements = [ann for i, ann in enumerate(self.announcements[::-1]) if i + 1 not in indexes]
self.announcements.reverse()
self.announcements_e = [ann_e for i, ann_e in enumerate(self.announcements_e[::-1]) if i + 1 not in indexes]
self.announcements_e.reverse()
else:
self.announcements = [ann for i, ann in enumerate(self.announcements) if i + 1 not in indexes]
self.announcements_e = [ann_e for i, ann_e in enumerate(self.announcements_e) if i + 1 not in indexes]
db.save_many([
("announcements", db.json.dumps(self.announcements)),
("announcements_e", db.json.dumps([
db.e_to_json(e) for e in self.announcements_e
]))
])
self.__update_pages__()
def set_page_size(self, size: int):
self.announce_page_size = size
db.save_value("announce_page_size", str(self.announce_page_size))
self.__update_pages__()
def toggle_value(self, name: str):
match name:
case 'dash_style':
self.dash_style = not self.dash_style
db.save_bool('dash_style', self.dash_style)
case 'reverse_list':
self.reverse_list = not self.reverse_list
db.save_bool('reverse_list', self.reverse_list)
case 'more_space':
self.more_space = not self.more_space
db.save_bool('more_space', self.more_space)
case 'save_chat_ids':
self.save_chat_ids = not self.save_chat_ids
db.save_bool('save_chat_ids', self.save_chat_ids)
case 'ask_phone':
self.ask_phone = not self.ask_phone
db.save_bool('ask_phone', self.ask_phone)
self.__update_pages__()
def get_page(self, page: int = 0, nav_only: bool = False):
text, entities = self.page[page]
return text, entities, msg.form_nav_buttons(
max_page=len(self.page),
page=page,
show_more=self.more != "",
nav_only=nav_only
)
def get_page_list(self, i: int = 0):
size = len(self.announcements)
page = max(0, min(len(self.page), i))
text, entities = self.__form_announcements__(
start=page * self.announce_page_size,
end=min(size, (page + 1) * self.announce_page_size),
force_num=True
)
return text, entities, msg.form_nav_buttons(
max_page=len(self.page),
page=page,
show_more=False,
nav_only=True
)
def get_more(self):
return self.more, self.more_e, msg.form_more_buttons(self.ask_phone)
def get_toggle(self):
return msg.get_toggle(), self.__form_toggle_buttons__()
@staticmethod
def get_phone_buttons():
return msg.form_phone_buttons()
@staticmethod
def get_admin_start(username:str):
return msg.get_admin(username)
@staticmethod
def get_commands():
return msg.get_commands()
@staticmethod
def message_all(bot, text: str, entities: list[db.MessageEntity] | None):
return msg.message_all(bot=bot, chat_ids=db.get_chat_ids(),
text=text, entities=entities or [])