From 135545070686c7ec0e0579c97ae25300b7e0d4f0 Mon Sep 17 00:00:00 2001 From: none Date: Wed, 7 Feb 2024 21:35:12 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BF=D1=83=D0=B1=D0=BB=D0=B8=D1=87=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B8=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B2=D0=B5=D1=80=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=87?= =?UTF-8?q?=D1=82=D0=BE=20=D1=81=D0=BE=D0=B1=D0=B5=D1=81=D0=B5=D0=B4=D0=BD?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=20=D0=BD=D0=B5=20=D0=BF=D0=BE=D0=B4=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=BB=D0=B8,=20=D1=82=D0=B0=D0=BA=D0=B6?= =?UTF-8?q?=D0=B5=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=B0=D0=B2=D0=B0=D1=82=D0=B0=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- anon.py | 175 ++++++++++++++++++++++++++++++++++++++++---------------- db.py | 20 +++++++ hash.py | 6 ++ 3 files changed, 153 insertions(+), 48 deletions(-) create mode 100644 db.py create mode 100644 hash.py diff --git a/anon.py b/anon.py index 2f86e4d..c44f919 100644 --- a/anon.py +++ b/anon.py @@ -16,27 +16,27 @@ if not os.path.exists('db.json'): exit() # db = { -# "Anon": {"id": 2045634, channel: "AnotherUser", blocks: [5375652, 436432]}, +# "Anon": {"id": 2045634, channel: "AnotherUser", blocks: [5375652, 436432], avatar: "♿️", pkey: "fuD2d", keys: {AnotherUser: "dDH73s"}}, # 2045634: "Anon" #} -# Can't hash Username :( -# (It broke all) +# Невозможно хешировать айди - это всё ломает +# +# Первая строка - информация о пользователе (айди, канал, блокнутые пользователи) +# Вторая строчка - для отправки сообщения и блокировки +# keys - ключи , pkey - личный ключ ############WORK WITH DBs########## -def read_db(): - global db - with open('db.json', 'r') as openfile: - db = json.load(openfile) -def write_db(): - global db - js = json.dumps(db, indent=2) - with open("db.json", "w") as outfile: - outfile.write(js) +from db import * +db = read_db() + +###### WORK WITH HASHES ########## + +from hash import hash +from random import randint ################ TOKEN INIT ###### -read_db() bot = telebot.TeleBot(db['token']) ##################CATCH ERRORS#### @@ -68,8 +68,7 @@ def catch_error(message, err_type = None): def is_auth(message): try: - global db - read_db() + db = read_db() if str(message.chat.id) in db: return True else: @@ -97,18 +96,18 @@ def start(message): @bot.message_handler(commands=['reg']) def reg(message): try: - global db - read_db() + db = read_db() if len(message.text.split()) == 2: - if message.text.split()[1] in db: + nick = message.text.split()[1] + if nick in db: bot.reply_to(message, "Данный пользователь уже зарегистрирован.") elif str(message.chat.id) in db: bot.reply_to(message, "Вы уже зарегистрированы.") else: - db[message.text.split()[1]] = {"id": message.chat.id, "channel": None, "blocks": []} - db[message.chat.id] = message.text.split()[1] + db[nick] = {"id": message.chat.id, "channel": None, "blocks": [], "avatar": "♿️", "pkey": hash(randint(74287, 5747962)), "keys": {}} + db[message.chat.id] = nick - write_db() + write_db(db) bot.reply_to(message, "Вы зарегистрировались!\nПриятного использования.") else: bot.reply_to(message, "Вы ввели не 2 аргумента, нужно: /reg ЛюбойНикнейм") @@ -119,14 +118,18 @@ def reg(message): def b(message): try: if is_auth(message): - global db; read_db() + db = read_db() nick = db[str(message.chat.id)] block = message.text.split()[1] + # Block by ":user" + if block[0] == ":": + block = block[1:] + if block in db: if db[block]["id"] not in db[nick]["blocks"]: db[nick]["blocks"].append(db[block]["id"]) - write_db() + write_db(db) bot.reply_to(message, f"Пользователь {telebot.formatting.hcode(block)} был заблокирован.",parse_mode="HTML") else: bot.reply_to(message, "Данного пользователя не существует.") @@ -137,13 +140,17 @@ def b(message): def u(message): try: if is_auth(message): - global db; read_db() + db = read_db() nick = db[str(message.chat.id)] block = message.text.split()[1] + # Unblock by ":user" + if block[0] == ":": + block = block[1:] + if db[block]["id"] in db[nick]["blocks"]: db[nick]["blocks"].remove(db[block]["id"]) - write_db() + write_db(db) bot.reply_to(message, f"Была снята блокировка с пользователя {telebot.formatting.hcode(block)}",parse_mode="HTML") except: catch_error(message) @@ -152,49 +159,118 @@ def u(message): def nick(message): try: if is_auth(message): - global db; read_db() - new_nick=message.text.split()[1] - old_nick=db[str(message.chat.id)] + db = read_db() + new_nick = message.text.split()[1] + old_nick = db[str(message.chat.id)] if new_nick not in db: db[new_nick] = db[old_nick] + db[new_nick]["avatar"] = "♿️" db[str(message.chat.id)] = new_nick del db[old_nick] - write_db() + write_db(db) bot.reply_to(message,f"Вы успешно сменили ник с {telebot.formatting.hcode(old_nick)} на {telebot.formatting.hcode(new_nick)}",parse_mode="HTML") + bot.reply_to(message, "Ваша аватарка сброшена до стандартной: ♿️") else: bot.reply_to(message,"Данный ник уже занят") except: catch_error(message) +@bot.message_handler(commands=['av']) +def av(message): + try: + if is_auth(message): + db = read_db() + if not len(message.text.split()) > 1: + bot.reply_to(message,"Укажите аватарку") + return 0 + new_avatar = message.text.split()[1] + if len(new_avatar) > 10: + bot.reply_to(message,"Слишком большое количество символов для аватарки") + else: + nick = db[str(message.chat.id)] + db[nick]["avatar"] = new_avatar + write_db(db) + bot.reply_to(message,"Новая аватарка успешно установлена") + except: + catch_error(message) + + +############# WORK WITH KEY ######## + +@bot.message_handler(commands=['key']) +def key(message): + if len(message.text.split()) == 2: + nick = message.text.split()[1] + if nick[0] == ':': + nick = nick[1:] + key = db[nick]["pkey"] + bot.reply_to(message,f"Ключ пользователя: {telebot.formatting.hcode(key)}", parse_mode="HTML") + else: + bot.reply_to(message,"/key ник") + +@bot.message_handler(commands=['ver']) +def ver(message): + if len(message.text.split()) == 3: + nick = message.text.split()[1] + if nick[0] == ':': + nick = nick[1:] + key = message.text.split()[2] + if not nick in db: + bot.reply_to(message,"Не существует такого пользователя") + return 0 + + if key == db[nick]["pkey"]: + bot.reply_to(message,"✅ Ключи совпадают") + else: + bot.reply_to(message,"❌ Ключи не совпадают") + else: + bot.reply_to(message,"/ver ник ключ") + +#################################### + + + @bot.message_handler(commands=['me']) def me(message): try: - read_db() + db = read_db() nick = db[str(message.chat.id)] channel = db[nick]["channel"] + avatar = db[nick]["avatar"] + pkey = db[nick]["pkey"] if not channel: channel = "Не задан." - bot.reply_to(message, f"""Ваш ник: {telebot.formatting.hcode(nick)} -Заданный канал: {telebot.formatting.hcode(channel)}""",parse_mode="HTML") + bot.reply_to(message, f"""Заданный канал: {telebot.formatting.hcode(channel)} + +Ваш ник: {telebot.formatting.hcode(nick)} +Ваша аватарка: {telebot.formatting.hcode(avatar)} +Ваш публичный ключ: {telebot.formatting.hcode(pkey)}""",parse_mode="HTML") except: catch_error(message) -#@bot.message_handler(func=lambda message: True) + @bot.message_handler(func=lambda message: True, content_types=['photo','text']) def catch_all_messages(message): try: - global db - read_db() + db = read_db() nick = db[str(message.chat.id)] + avatar = ' ' + db[nick]["avatar"] if message.content_type == "text" and message.text[:1].lower() == ":": channel = message.text[1:] if channel in db: db[nick]["channel"] = channel + + # Обрабатываем публичные ключи + if channel in db[nick]["keys"]: + pass + else: + db[nick]["keys"][channel] = db[channel]["pkey"] + bot.reply_to(message, "Установлен адресат: " + telebot.formatting.hcode(channel), parse_mode="HTML") - write_db() + write_db(db) else: bot.reply_to(message, "Не существует данного пользователя.") elif db[nick]["channel"] != None: @@ -211,10 +287,10 @@ def catch_all_messages(message): else: caption = "" - bot.send_photo(db[channel]["id"], img_id, f"{telebot.formatting.hcode(':'+nick)}" + caption, parse_mode="HTML") + bot.send_photo(db[channel]["id"], img_id, f"{telebot.formatting.hcode(':'+nick)} + avatar" + caption, parse_mode="HTML") else: - bot.send_message(db[channel]["id"], f"{telebot.formatting.hcode(':'+nick)}\n" + message.text, parse_mode="HTML") + bot.send_message(db[channel]["id"], f"{telebot.formatting.hcode(':'+nick) + avatar}\n" + message.text, parse_mode="HTML") except: bot.reply_to(message, "Сообщение не было доставлено.\nВероятно пользователь заблокировал бота.") @@ -226,13 +302,16 @@ def catch_all_messages(message): catch_error(message) #### POLLING #### -#''' -while True: - try: - bot.polling() - except KeyboardInterrupt: - exit() - except: - pass -#''' -#bot.polling() +mode = 0 +# Normal - 0, debug - 1 + +if mode == 0: + while True: + try: + bot.polling() + except KeyboardInterrupt: + exit() + except: + pass +elif mode == 1: + bot.polling() diff --git a/db.py b/db.py new file mode 100644 index 0000000..92630b3 --- /dev/null +++ b/db.py @@ -0,0 +1,20 @@ +import os +import json + +if not os.path.exists('db.json'): + db = {} + js = json.dumps(db, indent=2) + with open("db.json", "w") as outfile: + outfile.write(js) + print('Created new db.json') + + +def read_db(file = 'db.json'): + with open(file, "r", encoding="utf-8") as openfile: + db = json.load(openfile) + return db + +def write_db(db, file = 'db.json'): + js = json.dumps(db, indent=2, ensure_ascii=False) + with open(file, "w", encoding="utf-8") as outfile: + outfile.write(js) diff --git a/hash.py b/hash.py new file mode 100644 index 0000000..de37278 --- /dev/null +++ b/hash.py @@ -0,0 +1,6 @@ +import hashlib + +def hash(string): + string = str(string) + hashed = hashlib.sha256(str.encode(string)).hexdigest() + return hashed