-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRPMod.py
More file actions
501 lines (467 loc) · 24.4 KB
/
Copy pathRPMod.py
File metadata and controls
501 lines (467 loc) · 24.4 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
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
# meta developer: @trololo_1
# MIT License
# Copyright (c) 2022 trololo65
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import subprocess
try:
import emoji # max work version 1.7.0
except:
mod_inst = subprocess.Popen("pip install emoji==1.7.0", shell=True)
mod_inst.wait()
import emoji
from .. import loader, utils
import string, pickle, re
from telethon.tl.types import Channel
conf_default = {
'-s1':{ # СТИЛИ для действия
'1': [False, '<b>жирный</b>', '<b>', '</b>'],
'2': [False, '<i>курсив</i>', '<i>', '</i>'],
'3': [False, '<u>подчеркнутый</u>', '<u>', '</u>'],
'4': [False, '<s>зачёркнутый</s>', '<s>', '</s>'],
'5': [False, '<tg-spoiler>скрытый</tg-spoiler>', '<tg-spoiler>', '</tg-spoiler>'],
},
'-s2':{ # СТИЛИ для "С репликой"
'1': [True, '<b>жирный</b>', '<b>', '</b>'],
'2': [False, '<i>курсив</i>', '<i>', '</i>'],
'3': [False, '<u>подчеркнутый</u>', '<u>', '</u>'],
'4': [False, '<s>зачёркнуто</s>', '<s>', '</s>'],
'5': [False, '<tg-spoiler>скрытый</tg-spoiler>', '<tg-spoiler>', '</tg-spoiler>'],
},
'-s3':{ # СТИЛИ для реплики
'1': [False, '<b>жирный</b>', '<b>', '</b>'],
'2': [False, '<i>курсив</i>', '<i>', '</i>'],
'3': [False, '<u>подчеркнутый</u>', '<u>', '</u>'],
'4': [False, '<s>зачёркнутый</s>', '<s>', '</s>'],
'5': [False, '<tg-spoiler>скрытый</tg-spoiler>', '<tg-spoiler>', '</tg-spoiler>'],
},
'-sE':{ # ЭМОДЗИ перед репликой
'1': [True, '💬'],
'2': [False, '💭'],
'3': [False, '🗯'],
'4': [False, '✉️'],
'5': [False, '🔊'],
'6': [False, '🏳️🌈']
},
'-sS':{ # РАЗРЫВ строки в реплике
'1': [True, 'пробел', ' '],
'2': [False, 'разрыв строки', '\n'],
'3': [False, 'точка + пробел', '. '],
'4': [False, 'запятая + пробел', ', ']}
}
@loader.tds
class RPMod(loader.Module):
"""Модуль RPMod."""
strings = {'name': 'RPMod'}
async def client_ready(self, client, db):
self.db = db
if not self.db.get("RPMod", "exlist", False):
self.db.set("RPMod", "exlist", [])
if not self.db.get("RPMod", "status", False):
self.db.get("RPMod", "status", 1)
if not self.db.get("RPMod", "rprezjim", False):
self.db.set("RPMod", "rprezjim", 1)
if not self.db.get('RPMod', 'rpnicks', False):
self.db.set('RPMod', 'rpnicks', {})
if not self.db.get('RPMod', 'rpcomands', False):
comands = {'чмок': 'чмокнул', 'лизь': 'лизнул', 'кусь': 'кусьнул', 'поцеловать': 'поцеловал', 'выебать': 'выебал', 'трахнуть': 'трахнул', 'выпороть': 'выпорол', 'шлепнуть': 'шлепнул', 'отлизать': 'отлизал у', 'прижать': 'прижал', 'погладить': 'погладил', 'да.': 'пизда', 'где.': 'в пизде', 'нет.': 'пидора ответ', 'бывает.': 'ну это пиздец конечно на самом деле', 'обнять': 'обнял'}
self.db.set('RPMod', 'rpcomands', comands)
if not self.db.get('RPMod', 'rpemoji', False):
self.db.set('RPMod', 'rpemoji', {'лизь': '👅'})
if not self.db.get('RPMod', 'useraccept', False):
self.db.set('RPMod', 'useraccept', {"chats": [], "users": []})
elif type(self.db.get('RPMod', 'useraccept')) == type([]):
self.db.set('RPMod', 'useraccept', {"chats": [], "users": self.db.get('RPMod', 'useraccept')})
if self.db.get("RPMod", "rpconfigurate", False): # ДЛЯ разных версий модуля.
self.db.set("RPMod", "rpconfigurate", self.merge_dict(conf_default, self.db.get("RPMod", "rpconfigurate")))
async def dobrpcmd(self, message):
"""Используй: .dobrp (команда) / (действие) / (эмодзи) чтобы добавить команду. Можно и без эмодзи."""
args = utils.get_args_raw(message)
dict_rp = self.db.get('RPMod', 'rpcomands')
try:
key_rp = str(args.split('/')[0]).strip()
value_rp = str(args.split('/', maxsplit=2)[1]).strip()
lenght_args = args.split('/')
count_emoji = 0
if len(lenght_args) >= 3:
emoji_rp = str(args.split('/', maxsplit=2)[2]).strip()
dict_emoji_rp = self.db.get('RPMod', 'rpemoji')
r = emoji_rp
lst = []
count_emoji = 1
for x in r:
if x in emoji.UNICODE_EMOJI['en'].keys(): lst.append(x)
if x.isalpha() or x.isspace() or x.isdigit() or x in string.punctuation:
await utils.answer(message, f"<b>Были введены не только эмодзи(пробел тоже символ). </b>")
return
if len(lst) > 3:
await utils.answer(message, f"<b>Было введено более 3 эмодзи.</b>")
return
elif not emoji_rp or not emoji_rp.strip():
await utils.answer(message, f"<b>Разделитель для эмодзи есть, а их нет? хм.</b>")
return
key_len = [len(x) for x in key_rp.split()]
if len(dict_rp) >= 70:
await utils.answer(message, '<b>Достигнут лимит рп команд.</b>')
elif not key_rp or not key_rp.strip():
await utils.answer(message, '<b>Вы не ввели название рп команды.</b>')
elif not value_rp or not value_rp.strip():
await utils.answer(message, '<b>Вы не ввели действие для рп команды.</b>')
elif int(len(key_len)) > 1:
await utils.answer(message, '<b>В качестве рп команды было введено больше одного слова.</b>')
elif key_rp == 'all':
await utils.answer(message, '<b>Использовать \'<code>all</code>\' в качестве названия команды запрещено!</b>')
elif count_emoji == 1:
dict_emoji_rp[key_rp] = emoji_rp
dict_rp[key_rp]= value_rp
self.db.set('RPMod', 'rpcomands', dict_rp)
self.db.set('RPMod', 'rpemoji', dict_emoji_rp)
await utils.answer(message, f'<b>Команда \'<code>{key_rp}</code>\' успешно добавлена с эмодзи \'{emoji_rp}\'!</b>')
else:
dict_rp[key_rp]= value_rp
self.db.set('RPMod', 'rpcomands', dict_rp)
await utils.answer(message, f'<b>Команда \'<code>{key_rp}</code>\' успешно добавлена!</b>')
except:
await utils.answer(message, '<b>Вы не ввели разделитель /, либо вовсе ничего не ввели.</b>')
async def delrpcmd(self, message):
"""Используй: .delrp (команда) чтобы удалить команду.\n Используй: .delrp all чтобы удалить все команды."""
args = utils.get_args_raw(message)
dict_rp = self.db.get('RPMod', 'rpcomands')
dict_emoji_rp = self.db.get('RPMod', 'rpemoji')
key_rp = str(args)
count = 0
if key_rp == 'all':
dict_rp.clear()
dict_emoji_rp.clear()
self.db.set('RPMod', 'rpcomands', dict_rp)
self.db.set('RPMod', 'rpemoji', dict_emoji_rp)
await utils.answer(message, '<b>Список рп команд очищен.</b>')
return
elif not key_rp or not key_rp.strip():
await utils.answer(message, '<b>Вы не ввели команду.</b>')
else:
try:
if key_rp in dict_emoji_rp:
dict_rp.pop(key_rp)
dict_emoji_rp.pop(key_rp)
self.db.set('RPMod', 'rpcomands', dict_rp)
self.db.set('RPMod', 'rpemoji', dict_emoji_rp)
else:
dict_rp.pop(key_rp)
self.db.set('RPMod', 'rpcomands', dict_rp)
await utils.answer(message, f'<b>Команда \'<code>{key_rp}</code>\' успешно удалена!</b>')
except KeyError:
await utils.answer(message, '<b>Команда не найдена.</b>')
async def rpmodcmd(self, message):
"""Используй: .rpmod чтобы включить/выключить RP режим.\nИспользуй: .rpmod toggle чтобы сменить режим на отправку или изменение смс."""
status = self.db.get("RPMod", "status")
rezjim = self.db.get("RPMod", "rprezjim")
args = utils.get_args_raw(message)
if not args:
if status == 1:
self.db.set("RPMod", "status", 2)
await utils.answer(message, "<b>RP Режим <code>выключен</code></b>")
else:
self.db.set("RPMod", "status", 1)
await utils.answer(message, "<b>RP Режим <code>включен</code></b>")
elif args.strip() == 'toggle':
if rezjim == 1:
self.db.set("RPMod", "rprezjim", 2)
await utils.answer(message, "<b>RP Режим изменён на <code>отправку смс.</code></b>")
else:
self.db.set("RPMod", "rprezjim", 1)
await utils.answer(message, "<b>RP Режим изменён на <code>изменение смс.</code></b>")
else:
await utils.answer(message, 'Что то не так.. ')
async def rplistcmd(self, message):
"""Используй: .rplist чтобы посмотреть список рп команд."""
com = self.db.get('RPMod', 'rpcomands')
emojies = self.db.get('RPMod', 'rpemoji')
l = len(com)
listComands = f'У вас рп команд: <b>{l}</b> из <b>70</b>. '
if len(com) == 0:
await utils.answer(message, '<b>Увы, у вас нету рп команд. :(</b>')
return
for i in com:
if i in emojies.keys():
listComands+=f'\n• <b><code>{i}</code> - {com[i]} |</b> {emojies[i]}'
else:
listComands+=f'\n• <b><code>{i}</code> - {com[i]}</b>'
await utils.answer(message, listComands)
async def rpnickcmd(self, message):
"""Используй: .rpnick (ник) чтобы сменить ник пользователю или себе. С аргументом -l вызовет все ники."""
args = utils.get_args_raw(message).strip()
reply = await message.get_reply_message()
nicks = self.db.get('RPMod', 'rpnicks')
if args == '-l':
str_nicks = '• ' + '\n •'.join(' --- '.join([f'<code>{user_id}</code>', f'<b>{nick}</b>']) for user_id, nick in nicks.items())
return await utils.answer(message, str_nicks)
if not reply:
user = await message.client.get_entity(message.sender_id)
else:
user = await message.client.get_entity(reply.sender_id)
if not args:
if str(user.id) in nicks: nicks.pop(str(user.id))
self.db.set('RPMod', 'rpnicks', nicks)
return await utils.answer(message, f"Ник пользователя <b>{str(user.id)}</b> изменён на '<b>{user.first_name}</b>'")
lst = []
nick = ''
for x in args:
if x in emoji.UNICODE_EMOJI['en'].keys(): lst.append(x)
if x not in emoji.UNICODE_EMOJI['en'].keys(): nick+=x
if len(lst) > 3:
await utils.answer(message, f"Ник пользователя <b>{str(user.id)}</b> изменён на '<b>{args}</b>'")
elif len(lst) + len(nick) >= 45:
await utils.answer(message, f"<b>Ник превышает лимит в 45 символов(возможно эмодзи имеют длину более 1 символа).</b>")
else:
nicks[str(user.id)] = args
self.db.set('RPMod', 'rpnicks', nicks)
await utils.answer(message, f"Ник пользователя <b>{str(user.id)}</b> изменён на '<b>{args}</b>'")
async def rpbackcmd(self, message):
"""Бекап рп команд.\n .rpback для просмотра аргументов. """
args = utils.get_args_raw(message).strip()
comands = self.db.get('RPMod', 'rpcomands')
emojies = self.db.get('RPMod', 'rpemoji')
file_name = 'RPModBackUp.pickle'
id = message.to_id
reply = await message.get_reply_message()
if not args:
await utils.answer(message, '<b>Аргументы:</b>\n<code>-b</code> <b>-- сделать бекап.</b>\n<code>-r</code> <b>загрузить бекап.(используй с реплаем на файл)</b>')
if args == '-b':
try:
await message.delete()
dict_all = { 'rp': comands, 'emj': emojies}
with open(file_name, 'wb') as f:
pickle.dump(dict_all, f)
await message.client.send_file(id, file_name)
except Exception as e:
await utils.answer(message, f"<b>Ошибка:\n</b>{e}")
elif args == '-r' and reply:
try:
if not reply.document:
await utils.answer(message, f"<b>Это не файл.</b>")
await reply.download_media(file_name)
with open(file_name, 'rb') as f:
data = pickle.load(f)
rp = data['rp']
emj = data['emj']
result_rp = dict(comands, **rp)
result_emj = dict(emojies, **emj)
self.db.set('RPMod', 'rpcomands', result_rp)
self.db.set('RPMod', 'rpemoji', result_emj)
await utils.answer(message, f"<b>Команды обновлены!</b>")
except Exception as e:
await utils.answer(message, f"<b>Ошибка:\n</b>{e}")
async def rpblockcmd(self, message):
"""Используй: .rpblock чтобы добавить/удалить исключение(использовать в нужном чате).\nИспользуй: .rpblock list чтобы просмотреть чаты в исключениях.\nИспользуй .rpblock (ид) чтобы удалить чат из исключений."""
args = utils.get_args_raw(message)
ex = self.db.get("RPMod", "exlist")
if not args:
a = await message.client.get_entity(message.to_id)
if a.id in ex:
ex.remove(a.id)
self.db.set("RPMod", "exlist", ex)
try:
name = a.title
except:
name = a.first_name
await utils.answer(message, f'<i>Чат <b><u>{name}</u></b>[<code>{a.id}</code>] удален из исключений.</i>')
else:
ex.append(a.id)
self.db.set("RPMod", "exlist", ex)
try:
name = a.title
except:
name = a.first_name
await utils.answer(message, f'<i>Чат <b><u>{name}</u></b>[<code>{a.id}</code>] добавлен в исключения.</i>')
elif args.isdigit():
args = int(args)
if args in ex:
ex.remove(args)
self.db.set("RPMod", "exlist", ex)
a = await message.client.get_entity(args)
try:
name = a.title
except:
name = a.first_name
await utils.answer(message, f'<i>Чат <b><u>{name}</u></b>(<code>{args}</code>) удален из исключений.</i>')
else:
try:
a = await message.client.get_entity(args)
except:
await utils.answer(message, '<b>Неверный ид.</b>')
ex.append(args)
self.db.set("RPMod", "exlist", ex)
try:
name = a.title
except:
name = a.first_name
await utils.answer(message, f'<i>Чат <b><u>{name}</u></b>[<code>{a.id}</code>] добавлен в исключения.</i>')
elif args == 'list':
ex_len = len(ex)
if ex_len == 0:
await utils.answer(message, f'<b>Список исключений пуст.</b>')
return
sms = f'<i> Чаты, которые есть в исключениях({ex_len}):</i>'
for i in ex:
try:
a = await message.client.get_entity(i)
except:
await utils.answer(message, f'<b>Неверный ид -- {a}</b>')
return
try:
name = a.title
except:
name = a.first_name
sms+=f'\n• <b><u>{name}</u> --- </b><code>{i}</code>'
await utils.answer(message, sms)
else:
await utils.answer(message, 'Что то пошло не так..')
async def useracceptcmd(self, message):
""" Добавление/удаление пользователей/чатов, разрешенным использовать ваши команды.\n .useraccept {id/reply}\nДля добавления чата используй без реплая и аргументов."""
reply = await message.get_reply_message()
args = utils.get_args_raw(message)
userA = self.db.get('RPMod', 'useraccept')
if not reply and not args and message.is_group:
chat = message.chat
if chat.id not in userA["chats"]:
userA["chats"].append(chat.id)
return await utils.answer(message, f'<i>Чату <b><u>{chat.title}</u></b>[<code>{chat.id}</code>] открыт доступ.</i>')
else:
userA["chats"].remove(chat.id)
return await utils.answer(message, f'<i>Чату <b><u>{chat.title}</u></b>[<code>{chat.id}</code>] закрыт доступ.</i>')
elif args == '-l':
sms = '<b>Пользователи, у которых есть доступ к командам:</b>'
for k, v in userA.items():
if k == 'chats':
sms+= f'\n<b>Чатов:</b>'
else:
sms+= f'\n<b>Пользователей:</b>'
for i in v:
try:
user = (await message.client.get_entity(int(i))).title if k == 'chats' else (await message.client.get_entity(int(i))).first_name
sms+= f'\n<b>• <u>{user}</u> ---</b> <code>{i}</code>'
except:
sms+= f'\n<b>•</b> <code>{i}</code>'
await utils.answer(message, sms)
elif args or reply:
args = int(args) if args.isdigit() else reply.sender_id
if args in userA["users"]:
userA["users"].remove(args)
self.db.set('RPMod', 'useraccept', userA)
await utils.answer(message, f'<b>Пользователю <code>{args}</code> был закрыт доступ.</b>')
elif args in userA["chats"]:
userA["chats"].remove(args)
self.db.set('RPMod', 'useraccept', userA)
await utils.answer(message, f'<b>Чату <code>{args}</code> был закрыт доступ.</b>')
elif args not in userA["chats"] and type(await message.client.get_entity(args)) == Channel:
userA["chats"].append(args)
self.db.set('RPMod', 'useraccept', userA)
await utils.answer(message, f'<b>Чату <code>{args}</code> был открыт доступ.</b>')
else:
userA["users"].append(args)
self.db.set('RPMod', 'useraccept', userA)
await utils.answer(message, f'<b>Пользователю <code>{args}</code> был открыт доступ.</b>')
else:
await utils.answer(message, 'Что то не так..')
async def rpconfcmd(self, message):
"""Настройка шаблона для рп"""
conf = self.db.get("RPMod", "rpconfigurate", conf_default)
args = utils.get_args_raw(message)
if not args:
sms = '⚙️ <b>Настройка шаблона для команды:</b>\n'
s1 = '\n'.join([' | '.join([key, value[1], '✅' if value[0] else '❌']) for key, value in conf['-s1'].items()])
s2 = '\n'.join([' | '.join([key, value[1], '✅' if value[0] else '❌']) for key, value in conf['-s2'].items()])
s3 = '\n'.join([' | '.join([key, value[1], '✅' if value[0] else '❌']) for key, value in conf['-s3'].items()])
sE = '\n'.join([' | '.join([key, value[1], '✅' if value[0] else '❌']) for key, value in conf['-sE'].items()])
sS = '\n'.join([' | '.join([key, value[1], '✅' if value[0] else '❌']) for key, value in conf['-sS'].items()])
msg_text = f'⚙️ <b>Настройка шаблона для команды:</b>\n-s1 --- включить/выключить стиль для действия:\n{s1}\n-s2 --- аналогично для s1, но действует на текст "С репликой":\n{s2}\n-s3 --- аналогично для s2, но действует на саму реплику:\n{s3}\n-sE --- выбор эмодзи перед репликой:\n{sE}\n-sS --- выбор символа для разрыва строк в реплике:\n{sS}\n\nПример:\n<code>.rpconf -s1 2</code>'
return await utils.answer(message, msg_text)
args = args.split(' ')
if len(args) <= 1:
return await utils.answer(message, 'Было введено меньше двух аргументов.')
try:
if args[0] == '-s1' or args[0] == '-s2' or args[0] == '-s3':
if conf[args[0]][args[1]][0]:
conf[args[0]][args[1]][0] = False
else:
conf[args[0]][args[1]][0] = True
elif args[0] == '-sE' or args[0] == '-sS':
for i in conf[args[0]].keys():
conf[args[0]][i][0] = False
conf[args[0]][args[1]][0] = True
else:
return await utils.answer(message, 'Неизвестный аргумент.')
except:
return await utils.answer(message, 'Неверная цифра.')
self.db.set("RPMod", "rpconfigurate", conf)
await utils.answer(message, f'Конфигурация успешно изменена.')
async def watcher(self, message):
try:
status = self.db.get("RPMod", "status")
comand = self.db.get('RPMod', 'rpcomands')
rezjim = self.db.get('RPMod', 'rprezjim')
emojies = self.db.get('RPMod', 'rpemoji')
ex = self.db.get("RPMod", "exlist")
nicks = self.db.get('RPMod', 'rpnicks')
users_accept = self.db.get('RPMod', 'useraccept')
conf = self.db.get("RPMod", "rpconfigurate", conf_default)
chat_rp = await message.client.get_entity(message.to_id)
if status != 1 or chat_rp.id in ex: return
me_id = (await message.client.get_me()).id
if message.sender_id not in users_accept["users"] and message.sender_id != me_id and chat_rp.id not in users_accept["chats"]: return
me = (await message.client.get_entity(message.sender_id))
if str(me.id) in nicks.keys():
nick = nicks[str(me.id)]
else:
nick = me.first_name
args = message.text.lower()
lines = args.splitlines()
tags = lines[0].split(' ')
if not tags[-1].startswith('@'):
reply = await message.get_reply_message()
user = await message.client.get_entity(reply.sender_id)
else:
if not tags[-1][1:].isdigit():
user = await message.client.get_entity(tags[-1])
else:
user = await message.client.get_entity(int(tags[-1][1:]))
lines[0] = lines[0].rsplit(' ', 1)[0]
detail = lines[0].split(' ',maxsplit=1)
if len(detail) < 2:
detail.append(' ')
if detail[0] not in comand.keys(): return
detail[1] = ' ' + detail[1]
user.first_name = nicks[str(user.id)] if str(user.id) in nicks else user.first_name
sE = ''.join([''.join([ value[1] if value[0] else '']) for key, value in conf['-sE'].items()])
s1 = [''.join([ value[2] if value[0] else '' for value in conf['-s1'].values()]), ''.join([ value[3] if value[0] else '' for value in dict(reversed(list(conf['-s1'].items()))).values()])]
s2 = [''.join([ value[2] if value[0] else '' for key, value in conf['-s2'].items()]), ''.join([ value[3] if value[0] else '' for value in dict(reversed(list(conf['-s2'].items()))).values()])]
s3 = [''.join([ value[2] if value[0] else '' for key, value in conf['-s3'].items()]), ''.join([ value[3] if value[0] else '' for value in dict(reversed(list(conf['-s3'].items()))).values()])]
sS = ''.join([''.join([ value[2] if value[0] else '']) for key, value in conf['-sS'].items()])
rpMessageSend = ''
if detail[0] in emojies.keys(): rpMessageSend += emojies[detail[0]] + ' | '
rpMessageSend += f"<a href=tg://user?id={me.id}>{nick}</a> {s1[0]}{comand[detail[0]]}{s1[1]} <a href=tg://user?id={user.id}>{user.first_name}</a>{detail[1]}"
if len(lines) >= 2: rpMessageSend += "\n{0} {1[0]}С репликой:{1[1]} {2[0]}{3}{2[1]}".format(sE, s2, s3, sS.join(lines[1:]))
if rezjim == 1:
return await utils.answer(message, rpMessageSend)
else:
return await message.respond(rpMessageSend)
except: pass
def merge_dict(self, d1, d2):
d_all = {**d1, **d2}
for key in d_all:
d_all[key] = {**d1[key], **d_all[key]}
return d_all