From 09c0a397a2b02e000272732e9567413bb6ec6042 Mon Sep 17 00:00:00 2001 From: justuser Date: Wed, 24 Apr 2024 19:24:25 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B1=D0=B0=D0=B3=D0=BE=D0=B2,=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D1=81=D0=BA=D0=B0=D0=B7=D0=BE=D0=BA=20=D0=BA?= =?UTF-8?q?=20=D0=BA=D0=B0=D0=B6=D0=B4=D0=BE=D0=B9=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D0=BD=D0=B4=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- anon.py | 248 +++++++++++++++++++++++++++------------------------ catch_err.py | 4 +- func.py | 62 ++++++++----- 3 files changed, 172 insertions(+), 142 deletions(-) diff --git a/anon.py b/anon.py index 092cb46..c89dcd7 100644 --- a/anon.py +++ b/anon.py @@ -50,111 +50,116 @@ def start(message): def reg(message): try: db = load() - if len(message.text.split()) == 2: - nick = message.text.split()[1] - # Проверка ника - if not nick_ok(bot, message, nick): - return 0 - if nick in db: - bot.reply_to(message, "Данный пользователь уже зарегистрирован.") - elif str(message.chat.id) in db: - bot.reply_to(message, "Вы уже зарегистрированы.") - else: - user = user_(message.chat.id, hash(randint(74287, 5747962))) - db[nick] = user - db[message.chat.id] = nick - - save(db) - bot.reply_to(message, "Вы зарегистрировались!\nПриятного использования.") + if not ok_args(bot, message, 2, '```\n/reg никнейм```'): + return 0 + nick = message.text.split()[1] + # Проверка ника + if not nick_ok(bot, message, nick): + return 0 + if nick in db: + bot.reply_to(message, "Данный пользователь уже зарегистрирован.") + elif str(message.chat.id) in db: + bot.reply_to(message, "Вы уже зарегистрированы.") else: - bot.reply_to(message, "Вы ввели не 2 аргумента, нужно: /reg ЛюбойНикнейм") + user = user_(message.chat.id, hash(randint(74287, 5747962))) + db[nick] = user + db[message.chat.id] = nick + + save(db) + bot.reply_to(message, "Вы зарегистрировались!\nПриятного использования.") except: catch_error(bot, message) @bot.message_handler(commands=['b']) def b(message): try: - if is_auth(bot, message): - db = load() - nick = db[str(message.chat.id)] - user = db[nick] - block = message.text.split()[1] - - # Block by ":user" - if block[0] == ":": - block = block[1:] - - if block in db: - if db[block].id not in user.blocks: - user.blocks.append(db[block].id) - save(db) - bot.reply_to(message, f"Пользователь {telebot.formatting.hcode(block)} был заблокирован.",parse_mode="HTML") - else: - bot.reply_to(message, "Данного пользователя не существует.") + if not is_auth(bot, message) or not ok_args(bot, message, 2, '```\n/b :ник``` или ```\n/b ник```'): + return 0 + db = load() + nick = db[str(message.chat.id)] + user = db[nick] + block = message.text.split()[1] + + # Block by ":user" + if block[0] == ":": + block = block[1:] + + if block in db: + if db[block].id not in user.blocks: + user.blocks.append(db[block].id) + save(db) + bot.reply_to(message, f"Пользователь {telebot.formatting.hcode(block)} был заблокирован.",parse_mode="HTML") + else: + bot.reply_to(message, "Данного пользователя не существует.") except: catch_error(bot, message) @bot.message_handler(commands=['u']) def u(message): try: - if is_auth(bot, message): - db = load() - nick = db[str(message.chat.id)] - user = db[nick] - block = message.text.split()[1] + if not is_auth(bot, message) or not ok_args(bot, message, 2, '```\n/u :ник``` или ```\n/u ник```'): + return 0 + db = load() + nick = db[str(message.chat.id)] + user = db[nick] + block = message.text.split()[1] - # Unblock by ":user" - if block[0] == ":": - block = block[1:] + # Unblock by ":user" + if block[0] == ":": + block = block[1:] - if db[block].id in user.blocks: - user.blocks.remove(db[block].id) - save(db) + if block in db and db[block].id in user.blocks: + user.blocks.remove(db[block].id) + save(db) bot.reply_to(message, f"Была снята блокировка с пользователя {telebot.formatting.hcode(block)}",parse_mode="HTML") + else: + bot.reply_to(message, "Данного пользователя не существует.") except: catch_error(bot, message) @bot.message_handler(commands=['nick']) def nick(message): try: - if is_auth(bot, message): - db = load() - new_nick = message.text.split()[1] - # Проверка ника - if not nick_ok(message, new_nick): - return 0 - 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] - save(db) - bot.reply_to(message,f"Вы успешно сменили ник с {telebot.formatting.hcode(old_nick)} на {telebot.formatting.hcode(new_nick)}",parse_mode="HTML") - bot.reply_to(message, """Ваша аватарка сброшена до стандартной: ♿️ + if not is_auth(bot, message) or not ok_args(bot, message, 2, '```\n/nick ник```'): + return 0 + db = load() + new_nick = message.text.split()[1] + # Проверка ника + if not nick_ok(bot, message, new_nick): + return 0 + 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] + save(db) + bot.reply_to(message,f"Вы успешно сменили ник с {telebot.formatting.hcode(old_nick)} на {telebot.formatting.hcode(new_nick)}",parse_mode="HTML") + bot.reply_to(message, """Ваша аватарка сброшена до стандартной: ♿️ Также вы можете сбросить публичный ключ: /key_res""") - else: - bot.reply_to(message,"Данный ник уже занят") + else: + bot.reply_to(message,"Данный ник уже занят") except: catch_error(bot, message) @bot.message_handler(commands=['av']) def av(message): try: - if is_auth(bot, message): - db = load() - 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 - save(db) - bot.reply_to(message,"Новая аватарка успешно установлена") + if not is_auth(bot, message) or not ok_args(bot, message, 2, '```\n/av ❄️```'): + return 0 + db = load() + 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 + save(db) + bot.reply_to(message,"Новая аватарка успешно установлена") except: catch_error(bot, message) @@ -163,54 +168,53 @@ def av(message): @bot.message_handler(commands=['key']) def key(message): try: - if len(message.text.split()) == 2: - db = load() - 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 ник") + if not is_auth(bot, message) or not ok_args(bot, message, 2, '```\n/key ник``` или ```\n/key :ник```'): + return 0 + db = load() + 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") except: catch_error(bot, message) @bot.message_handler(commands=['ver']) def ver(message): try: - if len(message.text.split()) == 3: - db = load() - 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,"❌ Ключи не совпадают") + if not is_auth(bot, message) or not ok_args(bot, message, 3, '```\n/ver ник ключ``` или ```\n/ver :ник ключ```'): + return 0 + db = load() + 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,"/ver ник ключ") + bot.reply_to(message,"❌ Ключи не совпадают") except: catch_error(bot, message) @bot.message_handler(commands=['key_res']) def key_res(message): try: - if is_auth(bot, message): - db = load() + if not is_auth(bot, message) or not ok_args(bot, message, 1, '```\n/key_res```'): + return 0 + db = load() - key = hash(randint(74287, 5747962)) - nick = db[str(message.chat.id)] - old_key = db[nick].pkey + key = hash(randint(74287, 5747962)) + nick = db[str(message.chat.id)] + old_key = db[nick].pkey - db[nick].pkey = key - save(db) + db[nick].pkey = key + save(db) - bot.reply_to(message,f"""🔑 Ключ успешно сброшен. + bot.reply_to(message,f"""🔑 Ключ успешно сброшен. Старый ключ: {telebot.formatting.hcode(old_key)} Новый ключ: {telebot.formatting.hcode(key)}""",parse_mode="HTML") @@ -223,15 +227,16 @@ def key_res(message): @bot.message_handler(commands=['me']) def me(message): try: - if is_auth(bot, message): - db = load() - nick = db[str(message.chat.id)] - user = db[nick] - ch = user.channel - if not user.channel: - ch = "Не задан." + if not is_auth(bot, message) or not ok_args(bot, message, 1, '```\n/me```'): + return 0 + db = load() + nick = db[str(message.chat.id)] + user = db[nick] + ch = user.channel + if not user.channel: + ch = "Не задан." - bot.reply_to(message, f"""Заданный канал: {telebot.formatting.hcode(ch)} + bot.reply_to(message, f"""Заданный канал: {telebot.formatting.hcode(ch)} Ваш ник: {telebot.formatting.hcode(nick)} Ваша аватарка: {telebot.formatting.hcode(user.avatar)} @@ -263,10 +268,14 @@ def catch_all_messages(message): bot.reply_to(message, "Не существует данного пользователя.") elif user.channel != None: channel = user.channel + db = load() + # Проверяем существование пользователя + if channel not in db: + bot.reply_to(message, "Не существует данного пользователя.") + return 0 # Проверяем ключи if not key_valid(bot, message, channel): return 0 - db = load() if message.chat.id not in db[channel].blocks: try: @@ -299,7 +308,10 @@ def catch_all_messages(message): caption = "" bot.send_video(db[channel].id, vid_id, caption = f"{telebot.formatting.hcode(':'+nick) + avatar}", parse_mode="HTML") else: - bot.send_message(db[channel].id, f"{telebot.formatting.hcode(':'+nick) + avatar}\n" + message.text, parse_mode="HTML") + try: + bot.send_message(db[channel].id, f"{telebot.formatting.hcode(':'+nick) + avatar}\n" + message.text, parse_mode="HTML") + except: + catch_error(bot, message, 'spec_symb') except: catch_error(bot, message) diff --git a/catch_err.py b/catch_err.py index 77d12bf..7f0a3df 100644 --- a/catch_err.py +++ b/catch_err.py @@ -17,10 +17,12 @@ def catch_error(bot, message, err_type = None): logging.error(traceback.format_exc()) # Логирование ошибок err = log_stream.getvalue() # Ошибка -> переменная - bot.reply_to(message, "Critical error:\n\n" + telebot.formatting.hcode(err), parse_mode='HTML') + bot.reply_to(message, 'Critical error:\n\n' + telebot.formatting.hcode(err), parse_mode='HTML') # Очистка логов log_stream.truncate(0) log_stream.seek(0) + elif err_type == 'spec_symb': + bot.reply_to(message, 'Невозможно отправить сообщение из-за специфических символов') except: pass diff --git a/func.py b/func.py index b82c5b1..a24bc51 100644 --- a/func.py +++ b/func.py @@ -21,32 +21,34 @@ def is_auth(bot, message): from re import sub, compile # -> True/False def nick_ok(bot, message, nick): - if len(nick) > 30: - bot.reply_to(message,"Слишком длинный ник, попробуйте короче.") - return False - if is_num(nick): - bot.reply_to(message,"Ник должен содержать хоть 1 букву, попробуйте ещё раз.") - return False - - en = True - ru = True - # Если только английский - regex = compile('[^a-zA-Z0-9]') - check = regex.sub('', nick) - if check != nick: - en = False - # Если только русский - regex = compile('[^а-яА-ЯЁё0-9]') - check = regex.sub('', nick) - if check != nick: - ru = False + try: + if len(nick) > 30: + bot.reply_to(message,"Слишком длинный ник, попробуйте короче.") + return False + if is_num(nick): + bot.reply_to(message,"Ник должен содержать хоть 1 букву, попробуйте ещё раз.") + return False - if en == False and ru == False: - bot.reply_to(message,"Нельзя смешивать алфавиты и ставить спец.-символы, попробуйте ещё раз") - return False + en = True + ru = True + # Если только английский + regex = compile('[^a-zA-Z0-9]') + check = regex.sub('', nick) + if check != nick: + en = False + # Если только русский + regex = compile('[^а-яА-ЯЁё0-9]') + check = regex.sub('', nick) + if check != nick: + ru = False - return True + if en == False and ru == False: + bot.reply_to(message,"Нельзя смешивать алфавиты и ставить спец.-символы, попробуйте ещё раз") + return False + return True + except: + catch_error(bot, message) # Проверяем совпадение ключей при отправке сообщений # -> True/False @@ -79,3 +81,17 @@ def key_valid(bot, message, channel): return False except: catch_error(bot, message) + + +# Проверка на количество аргументов +# ok_args(bot, message, 2, '/nick никнейм') + '/nick test' = True +def ok_args(bot, message, count, mess): + try: + count_args = len(message.text.split()) + if not count_args == count: + bot.reply_to(message, mess, parse_mode="Markdown") + return False + else: + return True + except: + catch_error(bot, message)