From 9966167dd55cf03cb315180000b5a021c64eaf4b Mon Sep 17 00:00:00 2001 From: t Date: Sun, 8 Oct 2023 03:26:55 +0300 Subject: [PATCH] Beta-update --- mod.py | 258 +++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 195 insertions(+), 63 deletions(-) diff --git a/mod.py b/mod.py index 418ec0a..caab3bf 100644 --- a/mod.py +++ b/mod.py @@ -4,48 +4,108 @@ import json from telebot import types,util +global db, users + +####### CREATE DB IF NOT EXIST + if not os.path.exists('db.json'): - with open('db.json', 'w') as f: - json.dump({}, f) + db = {"token": "None"} + js = json.dumps(db, indent=2) + with open("db.json", "w") as outfile: + outfile.write(js) -global db -with open('db.json', 'r') as f: - db = json.load(f) + print('Input token in "None" (db.json)') + exit() -bot = telebot.TeleBot(db['token']) +if not os.path.exists('users.json'): + users = {} + js = json.dumps(users, indent=2) + with open("users.json", "w") as outfile: + outfile.write(js) + + +############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) + + +def read_users(): + global users + with open('users.json', 'r') as openfile: + users = json.load(openfile) +def write_users(): + global users + js = json.dumps(users, indent=2) + with open("users.json", "w") as outfile: + outfile.write(js) +##################FUNCTIONS######## + def get_admins(message): try: - admins = bot.get_chat_administrators(chat_id=message.chat.id) - true_admins = [] - for i in admins: - if i.status == "creator" or i.can_restrict_members == True: - true_admins.append(i.user.id) - #print(i.can_restrict_members, " ", i.user.id, " ", " ", i.status, " ", i.user.username ) + if bot.get_chat(message.chat.id).type == "private": + return [] + else: + admins = bot.get_chat_administrators(chat_id=message.chat.id) + true_admins = [] + for i in admins: + if i.status == "creator" or i.can_restrict_members == True: + true_admins.append(i.user.id) return true_admins except: - bot.reply_to(message, "Крит.Ошибка: НЕВОЗМОЖНО ПОЛУЧИТЬ СПИСОК АДМИНИСТРАТОРОВ") + catch_error(message) return None -def write_db(db): - with open('db.json', 'w') as f: - json.dump(db, f) def get_target(message): try: target = message.reply_to_message.from_user.id + if target not in get_admins(message): + return target + else: + return None except: - print(message.text[message.text.find(" ") + 1 :]) - #target = bot.get_chat(chat_id=message.text[message.text.find(" ") + 1 :]).id - target = bot.get_chat_member(user_id=message.text[message.text.find(" ") + 1 :]) + return None - return target +def key_by_value(dictionary, key): + for i in dictionary: + if dictionary[i] == key: + return i + return None +def analytic(message): + global users + +# print(message.from_user.username) + + if key_by_value(users, message.from_user.id) == message.from_user.username: + print(11111) + elif message.from_user.username == "None": + print(22222) + else: + users[message.from_user.username] = message.from_user.id + write_users() +#############TOKEN INIT##### -@bot.message_handler(commands=['start']) + +read_db() +bot = telebot.TeleBot(db['token']) + + +##################COMMANDS####### + +@bot.message_handler(commands=['start', 'faq']) def send_welcome(message): bot.reply_to(message, """Колотушка работает 🔨 @@ -79,20 +139,20 @@ def mute(message): try: if message.from_user.id in get_admins(message): target = get_target(message) - - if len(message.text.split()) == 1: - bot.restrict_chat_member(message.chat.id, target, until_date = message.date) - bot.reply_to(message, f"""Пользователь { telebot.util.user_link(message.reply_to_message.from_user) } был заглушен.""", parse_mode='HTML') + if target: + if len(message.text.split()) == 1: + bot.restrict_chat_member(message.chat.id, target, until_date = message.date) + bot.reply_to(message, f"""Пользователь { telebot.util.user_link(message.reply_to_message.from_user) } был заглушен.""", parse_mode='HTML') + else: + time = int(message.text.split()[1]) * 60 + bot.restrict_chat_member(message.chat.id, target, until_date = message.date+time) + bot.reply_to(message, f"""Пользователь { telebot.util.user_link(message.reply_to_message.from_user) } был заглушён на {time/60} минут(ы).""", parse_mode='HTML') else: - time = int(message.text.split()[1]) * 60 - print(time) - bot.restrict_chat_member(message.chat.id, target, until_date = message.date+time) - bot.reply_to(message, f"""Пользователь { telebot.util.user_link(message.reply_to_message.from_user) } был заглушён на {time/60} минут(ы).""", parse_mode='HTML') - + catch_error(message, "no_user") else: bot.reply_to(message, "Увы, но у вас нету прав.") except: - bot.reply_to(message, "Что-то пошло не так ♿️") + catch_error(message) @bot.message_handler(commands=['unmute']) @@ -100,15 +160,16 @@ def unmute(message): try: if message.from_user.id in get_admins(message): target = get_target(message) - - bot.restrict_chat_member(message.chat.id, target, can_send_messages=True, can_send_other_messages = True, until_date = message.date) - - bot.reply_to(message, f"""Пользователь { telebot.util.user_link(message.reply_to_message.from_user) } снова имеет дар речи. + if target: + bot.restrict_chat_member(message.chat.id, target, can_send_messages=True, can_send_other_messages = True, until_date = message.date) + bot.reply_to(message, f"""Пользователь { telebot.util.user_link(message.reply_to_message.from_user) } снова имеет дар речи. """, parse_mode='HTML') + else: + catch_error(message, "no_user") else: bot.reply_to(message, "Увы, но у вас нету прав.") except: - bot.reply_to(message, "Что-то пошло не так ♿️") + catch_error(message) @bot.message_handler(commands=['kick']) @@ -116,16 +177,18 @@ def kick(message): try: if message.from_user.id in get_admins(message): target = get_target(message) + if target: + bot.ban_chat_member(message.chat.id, target) + bot.unban_chat_member(message.chat.id, target) - bot.ban_chat_member(message.chat.id, target) - bot.unban_chat_member(message.chat.id, target) - - bot.reply_to(message, f"""Пользователь { telebot.util.user_link(message.reply_to_message.from_user) } был исключён. + bot.reply_to(message, f"""Пользователь { telebot.util.user_link(message.reply_to_message.from_user) } был исключён. """, parse_mode='HTML') + else: + catch_error(message, "no_user") else: bot.reply_to(message, "Увы, но у вас нету прав.") except: - bot.reply_to(message, "Что-то пошло не так ♿️") + catch_error(message) @bot.message_handler(commands=['ban']) @@ -133,51 +196,57 @@ def ban(message): try: if message.from_user.id in get_admins(message): target = get_target(message) - - bot.ban_chat_member(message.chat.id, target) - bot.reply_to(message, f"""Пользователь { telebot.util.user_link(message.reply_to_message.from_user) } исключён и заблокирован. + if target: + bot.ban_chat_member(message.chat.id, target) + bot.reply_to(message, f"""Пользователь { telebot.util.user_link(message.reply_to_message.from_user) } исключён и заблокирован. """, parse_mode='HTML') + else: + catch_error(message, "no_user") else: bot.reply_to(message, "Увы, но у вас нету прав.") except: - bot.reply_to(message, "Что-то пошло не так ♿️") + catch_error(message) @bot.message_handler(commands=['unban']) def unban(message): try: if message.from_user.id in get_admins(message): target = get_target(message) - - bot.unban_chat_member(message.chat.id, target) - bot.reply_to(message, f"""Пользователь { telebot.util.user_link(message.reply_to_message.from_user) } разблокирован. + if target: + bot.unban_chat_member(message.chat.id, target) + bot.reply_to(message, f"""Пользователь { telebot.util.user_link(message.reply_to_message.from_user) } разблокирован. """, parse_mode='HTML') + else: + catch_error(message, "no_user") else: bot.reply_to(message, "Увы, но у вас нету прав.") except: - bot.reply_to(message, "Что-то пошло не так ♿️") + catch_error(message) @bot.message_handler(commands=['setwelcome']) def setwelcome(message): try: if message.from_user.id in get_admins(message): + global db db[str(message.chat.id)] = message.html_text[ message.text.find(" ") + 1 :] - + bot.reply_to(message, f"""Установлено новое приветственное сообщение: \n{db[str(message.chat.id)]}""", parse_mode='HTML') - write_db(db) + write_db() else: bot.reply_to(message, "Увы, но у вас нету прав.") except: - bot.reply_to(message, "Что-то пошло не так ♿️") + catch_error(message) @bot.message_handler(commands=['welcome']) def welcome(message): try: global db + read_db() bot.reply_to(message, f"""Приветственное сообщение: \n{db[str(message.chat.id)]}""", parse_mode='HTML') except: - bot.reply_to(message, "Что-то пошло не так ♿️") + catch_error(message) @bot.message_handler(commands=['lock']) def lock(message): @@ -188,7 +257,7 @@ def lock(message): else: bot.reply_to(message, "Увы, но у вас нету прав.") except: - bot.reply_to(message, "Что-то пошло не так ♿️") + catch_error(message) @bot.message_handler(commands=['unlock']) def unlock(message): @@ -199,7 +268,21 @@ def unlock(message): else: bot.reply_to(message, "Увы, но у вас нету прав.") except: - bot.reply_to(message, "Что-то пошло не так ♿️") + catch_error(message) + +@bot.message_handler(commands=['id']) +def getid(message): + try: + if message.from_user.id in get_admins(message): + bot.reply_to(message, "ID: " + telebot.formatting.hcode(str(get_target(message))), parse_mode="HTML" ) + else: + bot.reply_to(message, "Увы, но у вас нету прав.") + except: + catch_error(message) + + + +######################SUPPORT######## @bot.message_handler(commands=['support']) def support(message): @@ -209,7 +292,7 @@ def support(message): bot.reply_to(message, "Ваше сообщение было отправлену разработчику бота ⌨️\n\nP.S.: Чтобы получить ответ вы обязательно должны написать боту в личные сообщения.") bot.send_message(2057834471, text + f"\n\nПользователь: {message.from_user.id}") except: - bot.reply_to(message, "Что-то пошло не так ♿️") + catch_error(message) @bot.message_handler(commands=['reply']) def reply(message): if message.chat.id == 2057834471: @@ -221,23 +304,72 @@ def reply(message): bot.reply_to(message, f"Ответ был отправлен пользователю {id}") bot.send_message(id, "Ответ разработчика:\n\n" + text) except: - bot.reply_to(message, "Что-то пошло не так ♿️") + catch_error(message) else: bot.reply_to(message, "Увы, но у вас нету прав.") +#####################WELCOME##### + +@bot.message_handler(content_types=["new_chat_members"]) +def handler_new_member(message): + try: + global db + read_db() + bot.reply_to(message, db[str(message.chat.id)], parse_mode='HTML') + except: + catch_error(message) + +##############ANALYTIC######## + +@bot.message_handler(func=lambda message: True) +def catch_all_messages(message): + #analytic(message) + global users + print("I see") + print(key_by_value(users, message.from_user.id)) + print("I don't see") + +# For what? +# This add users = {} + + +##################CATCH ERRORS#### +import logging +import traceback +from io import StringIO # For catch log to variable +# Basic init +global log_stream +log_stream = StringIO() +logging.basicConfig(stream=log_stream) +def catch_error(message, err_type = None): + if not err_type: + global log_stream -@bot.message_handler(content_types=["new_chat_members"]) -def handler_new_member(message): + logging.error(traceback.format_exc()) # Log error + err = log_stream.getvalue() # Error to variable + + bot.reply_to(message, "Critical error (свяжетись через /support сообщение ) :\n\n" + telebot.formatting.hcode(err), parse_mode='HTML') + + log_stream.truncate(0) # Clear + log_stream.seek(0) # Clear + elif err_type == "no_user": + bot.reply_to(message, "Не указан пользователь.") + + +##################MAIN THREAD##### +#''' +while True: try: - global db - bot.reply_to(message, db["welcome"], parse_mode='HTML') + bot.polling() + except KeyboardInterrupt: + exit() except: pass - - +''' bot.polling() +'''