@ -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 \n P.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 ( )
'''