chatping_abobot/code/script.py
2025-06-30 13:14:57 +03:00

170 lines
No EOL
5.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from base import ERR, ERR_, TRU, TRU_, ALB
from string import digits, punctuation
import re, sql
# инициализируем соединение с БД
db = sql.Base('../db/base.db')
du = sql.User('../db/users.db')
dg = sql.Group('../db/groups.db')
dm = sql.Month('../db/month.db')
def upd_stat(user_id, group_id, var_id, name, mes=False):
name = re.sub(r'[^\w\s]', '', name.lower())
if not du.user_exists(user_id):
du.add_user(user_id)
user_id = du.get_user_id(user_id)
if not du.group_exists(group_id):
du.add_group(group_id)
group_id = du.get_group_id(group_id)
if not db.group_exists(group_id):
db.add_group(group_id)
dg.created_group(group_id)
if not dg.user_exists(user_id, group_id):
dg.add_user(group_id, user_id, name)
db.update_stat(group_id, var_id)
dg.update_stat(user_id, group_id, var_id)
if not db.group_exists_month(group_id):
db.add_group_month(group_id)
dm.created_group(group_id)
dm.add_user(group_id, user_id)
else:
if not dm.user_exists(user_id, group_id):
dm.add_user(group_id, user_id)
db.update_month_stat(group_id, var_id)
dm.update_stat(user_id, group_id, var_id)
if mes:
db.update_month_stat(group_id, 1)
dg.update_stat(user_id, group_id, 1)
dm.update_stat(user_id, group_id, 1)
db.update_stat(group_id, 1)
if not db.edit_user_exists(user_id):
dg.update_name(user_id, group_id, name)
def lang_form(text, smbl='г'):
for i in range(len(text)):
word = [str(j) + str(smbl) + str(j).lower() if j in ALB else str(j) for j in text[i]]
text[i] = ''.join(word)
return ' '.join(text)
def notice(name, all_users, group_id, author):
names = [i[0] for i in dg.all_names(group_id)]
ids = [du.get_first_user_id(i[0]) for i in dg.all_ids(group_id)]
if all_users:
name = dg.user_name(name, group_id)
usr = [f"[{names[i].title()}](tg://user?id={str(ids[i])})" for i in range(len(names)) if names[i] != name.lower()]
usr.append(f'{usr[-2]} и {usr[-1]}')
del usr[-2], usr[-2]
return f'{", ".join(usr)} вас вызывает {name.title()}'
else:
no_copy = []
for i in name:
if i not in no_copy:
no_copy.append(i)
if len(no_copy) > 1: # ПЕРЕПИСАТЬ КОД ГАВНА КУСОК
usr = [f"[{_.title()}](tg://user?id={str(ids[names.index(_)])})" for _ in no_copy if int(author) != ids[names.index(_)]]
usr.append(f'{usr[-2]} и {usr[-1]}')
del usr[-2], usr[-2]
return f"{', '.join(usr)} вас упомянули)"
else:
usr = f"[{no_copy[0].title()}](tg://user?id={str(ids[names.index(no_copy[0])])})"
return f"{usr}, тебя упомянули)"
def checker(signs, words, group_id, user_id, name):
if len([z for z in signs if (z in digits) or (z in punctuation)]) == len(signs) or signs[0] == '/':
return int('-1')
if len(signs) > 4:
for x in range(3, len(signs)):
http = "".join([signs[x - 3], signs[x - 2], signs[x - 1], signs[x]])
if 'http' in http:
upd_stat(user_id, group_id, 4, name)
return int('-1')
count, raw = 0, 0
for word in words:
for symbol in word:
raw += 1
if (symbol in ERR) or (symbol in ERR_) or (symbol in digits):
count += 1
return len(signs) - raw + count
def translator(words):
itg = []
for word in words:
raw_word = []
for symbol in word:
if symbol in ERR:
count = 0
for _ in ERR:
if symbol == _:
raw_word.append(TRU[count])
break
count += 1
elif symbol in ERR_:
count = 0
for _ in ERR_:
if symbol == _:
raw_word.append(TRU_[count])
break
count += 1
itg.append("".join(raw_word))
return " ".join(itg)
def revers(message, var):
no_pct = re.sub(r'[^\w\s]', '', message)
if var:
sml, pnc, pct, prf = [i for i in message] + [str(0)], [], [], False
for i in sml:
if i in punctuation or i == ' ':
pnc.append(i)
prf, flag = True if sml.index(i) == 0 else False, False
else:
flag = True
if flag and len(pnc) > 0:
pct.append(''.join(pnc))
pnc = []
wrd, rev, lst, txt = no_pct.split(), [], [], []
for i in wrd:
word, up, itg = [i[-1 - l].lower() for l in range(len(i))], [], []
for _ in i:
up.append(True if _ in TRU_ else False)
for j in range(len(up)):
itg.append(word[j].upper() if up[j] else word[j])
rev.append(''.join(itg))
if prf:
for i in range(len(pct)):
txt = (txt + [pct[i]]) if (i + 1) == len(pct) and len(pct) > len(rev) else (txt + [pct[i], rev[i]])
return ''.join(txt)
else:
for i in range(len(rev)):
if i > 0:
txt.append(pct[i - 1])
txt.append(rev[i])
if (i + 1) == len(rev) and len(pct) == len(rev):
txt.append(pct[i])
return ''.join(txt)
else:
sml = [i for i in message]
return ''.join([sml[-1 - i] for i in range(len(sml))])