@ -4,7 +4,7 @@ import json
from telebot import types , util
global db , users
global db , users , blocks
####### CREATE DB IF NOT EXIST
@ -24,6 +24,12 @@ if not os.path.exists('users.json'):
outfile . write ( js )
if not os . path . exists ( ' blocks.json ' ) :
blocks = [ ]
js = json . dumps ( blocks , indent = 2 )
with open ( " blocks.json " , " w " ) as outfile :
outfile . write ( js )
############WORK WITH DBs##########
def read_db ( ) :
@ -48,6 +54,17 @@ def write_users():
outfile . write ( js )
def read_blocks ( ) :
global blocks
with open ( ' blocks.json ' , ' r ' ) as openfile :
blocks = json . load ( openfile )
def write_blocks ( ) :
global blocks
js = json . dumps ( blocks , indent = 2 )
with open ( " blocks.json " , " w " ) as outfile :
outfile . write ( js )
####################FAST HASH#################
from xxhash import xxh32
@ -73,6 +90,12 @@ def get_admins(message):
catch_error ( message )
return None
# Fix for anon admins, all anon (not premium) users == admins
def is_anon ( message ) :
if message . from_user . username == " Channel_Bot " and message . from_user . is_premium == None :
return True
else :
return False
def get_target ( message ) :
try :
@ -116,6 +139,7 @@ def key_by_value(dictionary, key):
def analytic ( message ) :
global users
read_users ( )
if key_by_value ( users , message . from_user . id ) == message . from_user . username :
pass
@ -133,7 +157,6 @@ read_db()
read_users ( )
bot = telebot . TeleBot ( db [ ' token ' ] )
##################COMMANDS#######
@bot.message_handler ( commands = [ ' start ' , ' faq ' ] )
@ -152,23 +175,27 @@ def help(message):
bot . reply_to ( message , """
Список команд :
/ mute # Мут человека в ответ на сообщение
/ unmute # Снятие мута
/ kick # Кик
/ ban # Бан
/ unban # Снятие бана
/ setwelcome Добро пожаловать # Приветственное сообщение
/ welcome # Демонстрация текущего сообщения
/ lock # Блокировка чата (для обычных пользователей)
/ unlock # Снятие блокировки чата
/ support Помогите : ( # Написать разработчику. Прошу писать по делу.
/ mute ⇁ Мут человека в ответ на сообщение
/ unmute ⇁ Снятие мута
/ kick ⇁ Кик
/ ban ⇁ Бан
/ unban ⇁ Снятие бана
/ setwelcome ⇁ Приветственное сообщение
/ welcome ⇁ Демонстрация текущего сообщения
/ lock ⇁ Блокировка чата ( для обычных пользователей )
/ unlock ⇁ Снятие блокировки чата
/ chatid ⇁ Айди чата
/ secret ⇁ Функция для получения ссылки html на пользователя в лс .
/ html < code > ⇁ Отправка текста сообщения в режиме формата html .
/ support Помогите : ( ⇁ Написать разработчику . Прошу писать по делу .
""" )
@bot.message_handler ( commands = [ ' mute ' ] )
def mute ( message ) :
try :
if message . from_user . id in get_admins ( message ) :
if message . from_user . id in get_admins ( message ) or is_anon ( message ) :
target = get_target ( message )
if target :
if len ( message . text . split ( ) ) == 1 :
@ -192,7 +219,7 @@ def mute(message):
@bot.message_handler ( commands = [ ' unmute ' ] )
def unmute ( message ) :
try :
if message . from_user . id in get_admins ( message ) :
if message . from_user . id in get_admins ( message ) or is_anon ( message ) :
target = get_target ( message )
if target :
bot . restrict_chat_member ( message . chat . id , target , can_send_messages = True , can_send_other_messages = True , until_date = message . date )
@ -209,7 +236,7 @@ def unmute(message):
@bot.message_handler ( commands = [ ' kick ' ] )
def kick ( message ) :
try :
if message . from_user . id in get_admins ( message ) :
if message . from_user . id in get_admins ( message ) or is_anon ( message ) :
target = get_target ( message )
if target :
bot . ban_chat_member ( message . chat . id , target )
@ -228,7 +255,7 @@ def kick(message):
@bot.message_handler ( commands = [ ' ban ' ] )
def ban ( message ) :
try :
if message . from_user . id in get_admins ( message ) :
if message . from_user . id in get_admins ( message ) or is_anon ( message ) :
target = get_target ( message )
if target :
bot . ban_chat_member ( message . chat . id , target )
@ -244,7 +271,7 @@ def ban(message):
@bot.message_handler ( commands = [ ' unban ' ] )
def unban ( message ) :
try :
if message . from_user . id in get_admins ( message ) :
if message . from_user . id in get_admins ( message ) or is_anon ( message ) :
target = get_target ( message )
if target :
bot . unban_chat_member ( message . chat . id , target )
@ -260,7 +287,7 @@ def unban(message):
@bot.message_handler ( commands = [ ' setwelcome ' ] )
def setwelcome ( message ) :
try :
if message . from_user . id in get_admins ( message ) :
if message . from_user . id in get_admins ( message ) or is_anon ( message ) :
global db
db [ str ( message . chat . id ) ] = message . html_text [ message . text . find ( " " ) + 1 : ]
@ -285,7 +312,7 @@ def welcome(message):
@bot.message_handler ( commands = [ ' lock ' ] )
def lock ( message ) :
try :
if message . from_user . id in get_admins ( message ) :
if message . from_user . id in get_admins ( message ) or is_anon ( message ) :
bot . set_chat_permissions ( message . chat . id , telebot . types . ChatPermissions ( can_send_messages = False , can_send_other_messages = False , can_send_polls = False ) )
bot . reply_to ( message , " Чат был заблокирован 🔒 " )
else :
@ -296,7 +323,7 @@ def lock(message):
@bot.message_handler ( commands = [ ' unlock ' ] )
def unlock ( message ) :
try :
if message . from_user . id in get_admins ( message ) :
if message . from_user . id in get_admins ( message ) or is_anon ( message ) :
bot . set_chat_permissions ( message . chat . id , telebot . types . ChatPermissions ( can_send_messages = True , can_send_other_messages = True , can_send_polls = True ) )
bot . reply_to ( message , " Чат был разблокирован 🔓 " )
else :
@ -307,7 +334,7 @@ def unlock(message):
@bot.message_handler ( commands = [ ' id ' ] )
def getid ( message ) :
try :
if message . from_user . id in get_admins ( message ) :
if message . from_user . id in get_admins ( message ) or is_anon ( message ) :
bot . reply_to ( message , " ID: " + telebot . formatting . hcode ( str ( get_target ( message ) ) ) , parse_mode = " HTML " )
else :
bot . reply_to ( message , " Увы, но у вас нету прав. " )
@ -319,7 +346,7 @@ def getid(message):
@bot.message_handler ( commands = [ ' secret ' ] )
def secret ( message ) :
try :
if message . from_user . id in get_admins ( message ) :
if message . from_user . id in get_admins ( message ) or is_anon ( message ) :
bot . send_message ( message . from_user . id , telebot . util . user_link ( message . reply_to_message . from_user ) )
bot . delete_message ( message . chat . id , message . id )
else :
@ -336,16 +363,46 @@ def html(message):
except :
catch_error ( message )
@bot.message_handler ( commands = [ ' chatid ' ] )
def chatid ( message ) :
try :
if message . from_user . id in get_admins ( message ) or is_anon ( message ) :
bot . reply_to ( message , " Айди чата: " + telebot . formatting . hcode ( str ( message . chat . id ) ) , parse_mode = ' HTML ' )
else :
bot . reply_to ( message , " Увы, но у вас нету прав. " )
except :
catch_error ( message )
######################SUPPORT########
@bot.message_handler ( commands = [ ' support ' ] )
def support ( message ) :
try :
text = message . text [ message . text . find ( " " ) + 1 : ]
global blocks
read_blocks ( )
bot . reply_to ( message , " Ваше сообщение было отправлену разработчику бота ⌨️ \n \n P.S.: Чтобы получить ответ вы обязательно должны написать боту в личные сообщения. " )
bot . send_message ( 2057834471 , text + f " \n \n Пользователь: { message . from_user . id } " )
if message . chat . id not in blocks :
text = message . text [ message . text . find ( " " ) + 1 : ]
bot . reply_to ( message , " Ваше сообщение было отправлену разработчику бота ⌨️ \n \n P.S.: Чтобы получить ответ вы обязательно должны написать боту в личные сообщения. " )
bot . send_message ( 2057834471 , text + f " \n \n Пользователь: { message . from_user . id } " )
else :
bot . reply_to ( message , " Увы, но вы заблокированы " )
except :
catch_error ( message )
@bot.message_handler ( commands = [ ' block ' ] )
def block ( message ) :
try :
if message . chat . id == 2057834471 :
global blocks
read_blocks ( )
id = int ( message . text . split ( ) [ 1 ] )
blocks . append ( id )
write_blocks ( )
bot . reply_to ( message , " Пользователь заблокирован. " )
else :
bot . reply_to ( message , " Увы, но у вас нету прав. " )
except :
catch_error ( message )
@bot.message_handler ( commands = [ ' reply ' ] )
@ -377,12 +434,36 @@ def handler_new_member(message):
##############ANALYTIC########
@bot.message_handler ( func = lambda message : True )
@bot.message_handler ( )
def catch_all_messages ( message ) :
analytic ( message )
# BLOCK LINKS FOR GULYAIPOLE (INDIVIDUAL, SECRET)
try :
if message . chat . id == - 1001766918049 and message . from_user . id not in get_admins ( message ) :
if ' https://t.me/ ' in message . text or ( hasattr ( message , ' entities ' ) and hasattr ( message . entities [ 0 ] , ' url ' ) and message . entities [ 0 ] . url != None ) :
bot . delete_message ( message . chat . id , message . id )
bot . send_message ( message . chat . id , f " Пользователь { telebot . util . user_link ( message . from_user ) } пытался отправить ссылку на группу/чат. " , parse_mode = ' HTML ' )
except :
#catch_error(message)
pass
@bot.edited_message_handler ( )
def catch_edited_messages ( message ) :
try :
if message . chat . id == - 1001766918049 and message . from_user . id not in get_admins ( message ) :
if ' https://t.me/ ' in message . text or ( hasattr ( message , ' entities ' ) and hasattr ( message . entities [ 0 ] , ' url ' ) and message . entities [ 0 ] . url != None ) :
bot . delete_message ( message . chat . id , message . id )
bot . send_message ( message . chat . id , f " Пользователь { telebot . util . user_link ( message . from_user ) } пытался отправить ссылку на группу/чат. " , parse_mode = ' HTML ' )
except :
#catch_error(message)
pass
# For what?
# This add users = {}
# This add users to db for using command like:
# /ban @username
# Without reply to message. All usernames hashed.
##################CATCH ERRORS####