@ -9,9 +9,9 @@ global db, users, la
####### CREATE DB IF NOT EXIST
####### CREATE DB IF NOT EXIST
if not os . path . exists ( ' db.json ' ) :
if not os . path . exists ( ' db.json ' ) :
db = { " token " : " None " }
db = { ' token ' : ' None ' }
js = json . dumps ( db , indent = 2 )
js = json . dumps ( db , indent = 2 )
with open ( " db.json " , " w " ) as outfile :
with open ( ' db.json ' , ' w ' ) as outfile :
outfile . write ( js )
outfile . write ( js )
print ( ' Input token in " None " (db.json) ' )
print ( ' Input token in " None " (db.json) ' )
@ -20,13 +20,13 @@ if not os.path.exists('db.json'):
if not os . path . exists ( ' users.json ' ) :
if not os . path . exists ( ' users.json ' ) :
users = { }
users = { }
js = json . dumps ( users , indent = 2 )
js = json . dumps ( users , indent = 2 )
with open ( " users.json " , " w " ) as outfile :
with open ( ' users.json ' , ' w ' ) as outfile :
outfile . write ( js )
outfile . write ( js )
if not os . path . exists ( ' la.json ' ) :
if not os . path . exists ( ' la.json ' ) :
la = { }
la = { }
js = json . dumps ( la , indent = 2 )
js = json . dumps ( la , indent = 2 )
with open ( " la.json " , " w " ) as outfile :
with open ( ' la.json ' , ' w ' ) as outfile :
outfile . write ( js )
outfile . write ( js )
############WORK WITH DBs##########
############WORK WITH DBs##########
@ -37,7 +37,7 @@ def read_db():
def write_db ( ) :
def write_db ( ) :
global db
global db
js = json . dumps ( db , indent = 2 )
js = json . dumps ( db , indent = 2 )
with open ( " db.json " , " w " ) as outfile :
with open ( ' db.json ' , ' w ' ) as outfile :
outfile . write ( js )
outfile . write ( js )
@ -48,7 +48,7 @@ def read_users():
def write_users ( ) :
def write_users ( ) :
global users
global users
js = json . dumps ( users , indent = 2 )
js = json . dumps ( users , indent = 2 )
with open ( " users.json " , " w " ) as outfile :
with open ( ' users.json ' , ' w ' ) as outfile :
outfile . write ( js )
outfile . write ( js )
# LA - Low Admin.
# LA - Low Admin.
@ -59,7 +59,7 @@ def read_la():
return la
return la
def write_la ( la ) :
def write_la ( la ) :
js = json . dumps ( la , indent = 2 )
js = json . dumps ( la , indent = 2 )
with open ( " la.json " , " w " ) as outfile :
with open ( ' la.json ' , ' w ' ) as outfile :
outfile . write ( js )
outfile . write ( js )
####################FAST HASH#################
####################FAST HASH#################
@ -74,13 +74,13 @@ def sha(text):
def get_admins ( message ) :
def get_admins ( message ) :
try :
try :
if bot . get_chat ( message . chat . id ) . type == " private " :
if bot . get_chat ( message . chat . id ) . type == ' private ' :
return [ ]
return [ ]
else :
else :
admins = bot . get_chat_administrators ( chat_id = message . chat . id )
admins = bot . get_chat_administrators ( chat_id = message . chat . id )
true_admins = [ ]
true_admins = [ ]
for i in admins :
for i in admins :
if i . status == " creator " or i . can_restrict_members == True :
if i . status == ' creator ' or i . can_restrict_members == True :
true_admins . append ( i . user . id )
true_admins . append ( i . user . id )
return true_admins
return true_admins
except Exception as e :
except Exception as e :
@ -89,7 +89,7 @@ def get_admins(message):
# Fix for anon admins, all anon (not premium) users == admins
# Fix for anon admins, all anon (not premium) users == admins
def is_anon ( message ) :
def is_anon ( message ) :
if message . from_user . username == " Channel_Bot " or message . from_user . username == " GroupAnonymousBot " :
if message . from_user . username == ' Channel_Bot ' or message . from_user . username == ' GroupAnonymousBot ' :
if message . from_user . is_premium == None :
if message . from_user . is_premium == None :
return True
return True
else :
else :
@ -165,7 +165,7 @@ def have_rights(message, set_la = False):
if str ( message . from_user . username ) in la [ str ( message . chat . id ) ] :
if str ( message . from_user . username ) in la [ str ( message . chat . id ) ] :
return True
return True
else :
else :
bot . reply_to ( message , " Увы, но у вас нету прав. " )
bot . reply_to ( message , ' Увы, но у вас нету прав. ' )
def key_by_value ( dictionary , key ) :
def key_by_value ( dictionary , key ) :
for i in dictionary :
for i in dictionary :
@ -179,7 +179,7 @@ def analytic(message):
if key_by_value ( users , message . from_user . id ) == message . from_user . username :
if key_by_value ( users , message . from_user . id ) == message . from_user . username :
pass
pass
elif message . from_user . username == " None " :
elif message . from_user . username == ' None ' :
pass
pass
else :
else :
users [ sha ( message . from_user . username ) ] = message . from_user . id
users [ sha ( message . from_user . username ) ] = message . from_user . id
@ -197,18 +197,18 @@ bot = telebot.TeleBot(db['token'])
@bot.message_handler ( commands = [ ' start ' , ' faq ' ] )
@bot.message_handler ( commands = [ ' start ' , ' faq ' ] )
def send_welcome ( message ) :
def send_welcome ( message ) :
bot . reply_to ( message , """ Колотушка работает 🔨
bot . reply_to ( message , ''' Колотушка работает 🔨
Что это такое ?
Что это такое ?
Это минимальный бот - модератор без слежки с открытым кодом .
Это минимальный бот - модератор без слежки с открытым кодом .
Код : https : / / gitea . gulyaipole . fun / justuser / just_moderator
Код : https : / / gitea . gulyaipole . fun / justuser / just_moderator
Список команд - / help
Список команд - / help
""" )
''' )
@bot.message_handler ( commands = [ ' help ' ] )
@bot.message_handler ( commands = [ ' help ' ] )
def help ( message ) :
def help ( message ) :
bot . reply_to ( message , """
bot . reply_to ( message , '''
Список команд :
Список команд :
/ mute ⇁ Мут человека в ответ на сообщение
/ mute ⇁ Мут человека в ответ на сообщение
@ -229,7 +229,7 @@ def help(message):
/ html < code > ⇁ Отправка текста сообщения в режиме формата html .
/ html < code > ⇁ Отправка текста сообщения в режиме формата html .
/ support ⇁ Написать разработчику . Прошу писать по делу .
/ support ⇁ Написать разработчику . Прошу писать по делу .
""" )
''' )
@bot.message_handler ( commands = [ ' mute ' ] )
@bot.message_handler ( commands = [ ' mute ' ] )
def mute ( message ) :
def mute ( message ) :
@ -240,10 +240,10 @@ def mute(message):
if target :
if target :
if time :
if time :
bot . restrict_chat_member ( message . chat . id , target , until_date = message . date + time [ 1 ] )
bot . restrict_chat_member ( message . chat . id , target , until_date = message . date + time [ 1 ] )
answer = f " Пользователь { get_name ( message ) } был заглушён на { time [ 0 ] } { time [ 2 ] } . "
answer = f ' Пользователь { get_name ( message ) } был заглушён на { time [ 0 ] } { time [ 2 ] } . '
else :
else :
bot . restrict_chat_member ( message . chat . id , target , until_date = message . date )
bot . restrict_chat_member ( message . chat . id , target , until_date = message . date )
answer = f " Пользователь { get_name ( message ) } был заглушен. "
answer = f ' Пользователь { get_name ( message ) } был заглушен. '
try :
try :
bot . reply_to ( message , answer , parse_mode = ' HTML ' )
bot . reply_to ( message , answer , parse_mode = ' HTML ' )
except :
except :
@ -260,11 +260,13 @@ def unmute(message):
if have_rights ( message ) :
if have_rights ( message ) :
target = get_target ( message )
target = get_target ( message )
if target :
if target :
bot . restrict_chat_member ( message . chat . id , target , can_send_messages = True , can_send_other_messages = True , until_date = message . date )
bot . restrict_chat_member ( message . chat . id , target , can_send_messages = True
bot . reply_to ( message , f """ Пользователь { get_name ( message ) } снова имеет дар речи.
, can_send_other_messages = True , can_send_polls = True
""" , parse_mode= ' HTML ' )
, can_add_web_page_previews = True , until_date = message . date )
bot . reply_to ( message , f ''' Пользователь { get_name ( message ) } снова имеет дар речи.
''' , parse_mode= ' HTML ' )
else :
else :
catch_error ( message , None , " no_user " )
catch_error ( message , None , ' no_user ' )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -278,10 +280,10 @@ def kick(message):
bot . ban_chat_member ( message . chat . id , target )
bot . ban_chat_member ( message . chat . id , target )
bot . unban_chat_member ( message . chat . id , target )
bot . unban_chat_member ( message . chat . id , target )
bot . reply_to ( message , f """ Пользователь { get_name ( message ) } был исключён.
bot . reply_to ( message , f ''' Пользователь { get_name ( message ) } был исключён.
""" , parse_mode= ' HTML ' )
''' , parse_mode= ' HTML ' )
else :
else :
catch_error ( message , None , " no_user " )
catch_error ( message , None , ' no_user ' )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -293,10 +295,10 @@ def ban(message):
target = get_target ( message )
target = get_target ( message )
if target :
if target :
bot . ban_chat_member ( message . chat . id , target )
bot . ban_chat_member ( message . chat . id , target )
bot . reply_to ( message , f """ Пользователь { get_name ( message ) } исключён и заблокирован.
bot . reply_to ( message , f ''' Пользователь { get_name ( message ) } исключён и заблокирован.
""" , parse_mode= ' HTML ' )
''' , parse_mode= ' HTML ' )
else :
else :
catch_error ( message , None , " no_user " )
catch_error ( message , None , ' no_user ' )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -307,10 +309,10 @@ def unban(message):
target = get_target ( message )
target = get_target ( message )
if target :
if target :
bot . unban_chat_member ( message . chat . id , target )
bot . unban_chat_member ( message . chat . id , target )
bot . reply_to ( message , f """ Пользователь { get_name ( message ) } разблокирован.
bot . reply_to ( message , f ''' Пользователь { get_name ( message ) } разблокирован.
""" , parse_mode= ' HTML ' )
''' , parse_mode= ' HTML ' )
else :
else :
catch_error ( message , None , " no_user " )
catch_error ( message , None , ' no_user ' )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -319,10 +321,10 @@ def setwelcome(message):
try :
try :
if have_rights ( message ) :
if have_rights ( message ) :
global db
global db
db [ str ( message . chat . id ) ] = message . html_text [ message . text . find ( " " ) + 1 : ]
db [ str ( message . chat . id ) ] = message . html_text [ message . text . find ( ' ' ) + 1 : ]
bot . reply_to ( message , f """ Установлено новое приветственное сообщение:
bot . reply_to ( message , f ''' Установлено новое приветственное сообщение:
\n { db [ str ( message . chat . id ) ] } """ , parse_mode= ' HTML ' )
\n { db [ str ( message . chat . id ) ] } ''' , parse_mode= ' HTML ' )
write_db ( )
write_db ( )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -332,8 +334,8 @@ def welcome(message):
try :
try :
global db
global db
read_db ( )
read_db ( )
bot . reply_to ( message , f """ Приветственное сообщение:
bot . reply_to ( message , f ''' Приветственное сообщение:
\n { db [ str ( message . chat . id ) ] } """ , parse_mode= ' HTML ' )
\n { db [ str ( message . chat . id ) ] } ''' , parse_mode= ' HTML ' )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -342,9 +344,9 @@ def lock(message):
try :
try :
if have_rights ( message ) :
if have_rights ( 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 . 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 , " Чат был заблокирован 🔒 " )
bot . reply_to ( message , ' Чат был заблокирован 🔒 ' )
else :
else :
bot . reply_to ( message , " Увы, но у вас нету прав. " )
bot . reply_to ( message , ' Увы, но у вас нету прав. ' )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -353,7 +355,7 @@ def unlock(message):
try :
try :
if have_rights ( message ) :
if have_rights ( 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 . 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 , " Чат был разблокирован 🔓 " )
bot . reply_to ( message , ' Чат был разблокирован 🔓 ' )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -361,7 +363,7 @@ def unlock(message):
def getid ( message ) :
def getid ( message ) :
try :
try :
if have_rights ( message ) :
if have_rights ( message ) :
bot . reply_to ( message , " ID: " + telebot . formatting . hcode ( str ( get_target ( message ) ) ) , parse_mode = " HTML " )
bot . reply_to ( message , ' ID: ' + telebot . formatting . hcode ( str ( get_target ( message ) ) ) , parse_mode = ' HTML ' )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -401,16 +403,17 @@ def html(message):
def chatid ( message ) :
def chatid ( message ) :
try :
try :
if have_rights ( message ) :
if have_rights ( message ) :
bot . reply_to ( message , " Айди чата: " + telebot . formatting . hcode ( str ( message . chat . id ) ) , parse_mode = ' HTML ' )
bot . reply_to ( message , ' Айди чата: ' + telebot . formatting . hcode ( str ( message . chat . id ) ) , parse_mode = ' HTML ' )
else :
else :
bot . reply_to ( message , " Увы, но у вас нету прав. " )
bot . reply_to ( message , ' Увы, но у вас нету прав. ' )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
############ LOW-ADMIN ##############
############ LOW-ADMIN ##############
def have_la ( id ) :
def have_la ( message ) :
try :
try :
id = message . from_user . id
la = read_la ( )
la = read_la ( )
if id in la :
if id in la :
return True
return True
@ -425,9 +428,9 @@ def have_la(id):
def la ( message ) :
def la ( message ) :
bot . reply_to ( message , f ''' Доступные команды:
bot . reply_to ( message , f ''' Доступные команды:
{ telebot . formatting . hcode ( " /la-list " ) } - список администраторов в режиме low - admin
{ telebot . formatting . hcode ( ' /la-list ' ) } - список администраторов в режиме low - admin
{ telebot . formatting . hcode ( " /la-add @nick " ) } - добавить в администраторы
{ telebot . formatting . hcode ( ' /la-add @nick ' ) } - добавить в администраторы
{ telebot . formatting . hcode ( " /la-del @nick " ) } - удалить из администраторов
{ telebot . formatting . hcode ( ' /la-del @nick ' ) } - удалить из администраторов
''' , parse_mode = ' HTML ' )
''' , parse_mode = ' HTML ' )
@bot.message_handler ( commands = [ ' la-list ' ] )
@bot.message_handler ( commands = [ ' la-list ' ] )
@ -436,7 +439,7 @@ def la_list(message):
if have_rights ( message , set_la = True ) :
if have_rights ( message , set_la = True ) :
la = read_la ( )
la = read_la ( )
if have_la ( str ( message . chat . id ) ) :
if have_la ( str ( message . chat . id ) ) :
s = " Список администраторов в режиме low-admin: \n "
s = ' Список администраторов в режиме low-admin: \n '
for i in la [ str ( message . chat . id ) ] :
for i in la [ str ( message . chat . id ) ] :
s = s + ' \n @ ' + i
s = s + ' \n @ ' + i
bot . reply_to ( message , s , parse_mode = ' HTML ' )
bot . reply_to ( message , s , parse_mode = ' HTML ' )
@ -454,7 +457,7 @@ def la_add(message):
la [ str ( message . chat . id ) ] . append ( nick )
la [ str ( message . chat . id ) ] . append ( nick )
print ( la )
print ( la )
write_la ( la )
write_la ( la )
bot . reply_to ( message , f " Пользователь @ { nick } успешно добавлен в список администраторов. " )
bot . reply_to ( message , f ' Пользователь @ { nick } успешно добавлен в список администраторов. ' )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -469,7 +472,7 @@ def la_del(message, set_la=True):
if nick in la [ str ( message . chat . id ) ] :
if nick in la [ str ( message . chat . id ) ] :
la [ str ( message . chat . id ) ] . remove ( nick )
la [ str ( message . chat . id ) ] . remove ( nick )
write_la ( la )
write_la ( la )
bot . reply_to ( message , f " Пользователь @ { nick } был исключён из списка администраторов. " )
bot . reply_to ( message , f ' Пользователь @ { nick } был исключён из списка администраторов. ' )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -480,8 +483,9 @@ def la_del(message, set_la=True):
@bot.chat_join_request_handler ( )
@bot.chat_join_request_handler ( )
def join_request ( message : telebot . types . ChatJoinRequest ) :
def join_request ( message : telebot . types . ChatJoinRequest ) :
try :
try :
bot . send_message ( message . chat . id , f """ Поступила заявка на вступление от { telebot . util . user_link ( message . from_user ) }
bot . send_message ( message . chat . id , f ''' Поступила заявка на вступление от { telebot . util . user_link ( message . from_user ) }
Принять : { telebot . formatting . hcode ( f " /accept { message . from_user . id } " ) } """ , parse_mode= " HTML " )
Принять : { telebot . formatting . hcode ( f ' /accept { message . from_user . id } ' ) } ''' , parse_mode= ' HTML ' )
analytic ( message )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -491,7 +495,7 @@ def accept_request(message):
if have_rights ( message ) :
if have_rights ( message ) :
if len ( message . text . split ( ) ) == 2 :
if len ( message . text . split ( ) ) == 2 :
bot . approve_chat_join_request ( message . chat . id , message . text . split ( ) [ 1 ] )
bot . approve_chat_join_request ( message . chat . id , message . text . split ( ) [ 1 ] )
bot . reply_to ( message , " Заявка принята. " )
bot . reply_to ( message , ' Заявка принята. ' )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -500,19 +504,20 @@ def accept_request(message):
@bot.message_handler ( commands = [ ' support ' ] )
@bot.message_handler ( commands = [ ' support ' ] )
def support ( message ) :
def support ( message ) :
try :
try :
bot . reply_to ( message , f """ Связь с аднимистратором в @just_anonchat_bot
bot . reply_to ( message , f ''' Связь с аднимистратором в @just_anonchat_bot
Адрес - { telebot . formatting . hcode ( " :justuser " ) } """ , parse_mode= " HTML " )
Адрес - { telebot . formatting . hcode ( ' :justuser ' ) } ''' , parse_mode= ' HTML ' )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
#####################WELCOME#####
#####################WELCOME#####
@bot.message_handler ( content_types = [ " new_chat_members " ] )
@bot.message_handler ( content_types = [ ' new_chat_members ' ] )
def handler_new_member ( message ) :
def handler_new_member ( message ) :
try :
try :
global db
global db
read_db ( )
read_db ( )
bot . reply_to ( message , db [ str ( message . chat . id ) ] , parse_mode = ' HTML ' )
bot . reply_to ( message , db [ str ( message . chat . id ) ] , parse_mode = ' HTML ' )
analytic ( message )
except Exception as e :
except Exception as e :
catch_error ( message , e )
catch_error ( message , e )
@ -542,7 +547,7 @@ logging.basicConfig(stream=log_stream)
# Known errors
# Known errors
known_errs = {
known_errs = {
" A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: not enough rights to restrict/unrestrict chat member" : " Увы, но у бота не хватает прав для этого. "
' A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: not enough rights to restrict/unrestrict chat member' : ' Увы, но у бота не хватает прав для этого. '
}
}
# message error err_type ('no_user', ...)
# message error err_type ('no_user', ...)
@ -559,16 +564,16 @@ def catch_error(message, e, err_type = None):
logging . error ( traceback . format_exc ( ) ) # Log error
logging . error ( traceback . format_exc ( ) ) # Log error
err = log_stream . getvalue ( ) # Error to variable
err = log_stream . getvalue ( ) # Error to variable
bot . send_message ( message . chat . id , " Critical error (свяжитись через /support ) : \n \n " + telebot . formatting . hcode ( err ) , parse_mode = ' HTML ' )
bot . send_message ( message . chat . id , ' Critical error (свяжитись через /support ) : \n \n ' + telebot . formatting . hcode ( err ) , parse_mode = ' HTML ' )
log_stream . truncate ( 0 ) # Clear
log_stream . truncate ( 0 ) # Clear
log_stream . seek ( 0 ) # Clear
log_stream . seek ( 0 ) # Clear
elif err_type == " no_user " :
elif err_type == ' no_user ' :
bot . send_message ( message . chat . id , " Н е указан пользователь." )
bot . send_message ( message . chat . id , ' Н е указан пользователь.' )
##################MAIN THREAD#####
##################MAIN THREAD#####
'''
# '''
while True :
while True :
try :
try :
bot . polling ( )
bot . polling ( )
@ -578,4 +583,4 @@ while True:
pass
pass
'''
'''
bot . polling ( )
bot . polling ( )
# '''
'''