Mr-Risov/Telegram_reporting_system
0
1from flask import Flask, render_template, request, jsonify2import os3import requests4from time import sleep5from threading import Thread, active_count6import random7from bs4 import BeautifulSoup8from random_user_agent.user_agent import UserAgent9from random_user_agent.params import SoftwareName, OperatingSystem10import phonenumbers11from phonenumbers import PhoneNumberFormat12from emailtools import generate13 14app = Flask(__name__)15 16# User Agent Setup17software_names = [SoftwareName.CHROME.value, SoftwareName.FIREFOX.value, SoftwareName.EDGE.value, SoftwareName.OPERA.value]18operating_systems = [OperatingSystem.WINDOWS.value, OperatingSystem.LINUX.value, OperatingSystem.MAC.value]19user_agent_rotator = UserAgent(software_names=software_names, operating_systems=operating_systems, limit=1200)20 21# Constants22THREADS = 60023PROXIES_TYPES = ('http', 'socks4', 'socks5')24time_out = 1525success_count = 026error_count = 027 28errors = open('errors.txt', 'a+')29 30def generate_random_phone_number():31 while True:32 country_code = "+{}".format(random.randint(1, 999))33 national_number = str(random.randint(1000000000, 9999999999))34 phone_number_str = country_code + national_number35 try:36 phone_number = phonenumbers.parse(phone_number_str)37 if phonenumbers.is_valid_number(phone_number):38 return phonenumbers.format_number(phone_number, PhoneNumberFormat.E164)39 except phonenumbers.phonenumberutil.NumberParseException:40 continue41 42def get_random_line(filename, username):43 with open(filename, 'r') as file:44 lines = file.readlines()45 line = random.choice(lines).strip()46 return line.replace('{username}', username)47 48def control(proxy, proxy_type, username):49 global success_count, error_count50 51 USER_AGENT = user_agent_rotator.get_random_user_agent()52 url = 'https://telegram.org/support'53 try:54 response = requests.get(url, proxies={'http': f'{proxy_type}://{proxy}', 'https': f'{proxy_type}://{proxy}'}, timeout=time_out)55 except Exception as e:56 error_count += 157 errors.write(f'{e}\n')58 return59 60 cookies = response.cookies61 soup = BeautifulSoup(response.text, 'html.parser')62 form = soup.find('form', action="/support")63 64 if not form:65 error_count += 166 return67 68 message = get_random_line('message.txt', username)69 email = generate('gmail')70 phone = generate_random_phone_number()71 72 data = {input['name']: input.get('value', '') for input in form.find_all(['input', 'textarea'])}73 hidden_inputs = form.find_all('input', type='hidden')74 for hidden_input in hidden_inputs:75 data[hidden_input['name']] = hidden_input['value']76 77 data['support_problem'] = message78 data['support_email'] = email79 data['support_phone'] = phone80 81 headers = {'User-Agent': USER_AGENT}82 try:83 response = requests.post(url, data=data, cookies=cookies, headers=headers)84 if response.status_code == 200:85 success_count += 186 else:87 error_count += 188 except Exception as e:89 error_count += 190 errors.write(f'{e}\n')91 92def get_views_from_saved_proxies(proxy_type, proxies, username):93 for proxy in proxies:94 control(proxy.strip(), proxy_type, username)95 96def start_view(username):97 while True:98 threads = []99 for proxy_type in PROXIES_TYPES:100 try:101 with open(f"{proxy_type}_proxies.txt", 'r') as file:102 proxies = file.readlines()103 chunked_proxies = [proxies[i:i + 70] for i in range(0, len(proxies), 70)]104 for chunk in chunked_proxies:105 thread = Thread(target=get_views_from_saved_proxies, args=(proxy_type, chunk, username))106 threads.append(thread)107 thread.start()108 except FileNotFoundError:109 continue110 for t in threads:111 t.join()112 113@app.route('/')114def index():115 return render_template('index.html')116 117@app.route('/report', methods=['POST'])118def report():119 global success_count, error_count120 username = request.form['username']121 success_count = 0122 error_count = 0123 124 # Start reporting in background125 Thread(target=start_view, args=(username,)).start()126 127 return jsonify({'message': f'Reporting started for {username}'})128 129@app.route('/status')130def status():131 global success_count, error_count132 return jsonify({133 'success': success_count,134 'failed': error_count,135 'threads': active_count()136 })137 138if __name__ == '__main__':139 app.run(debug=True)