Загрузка...

Софт для проверки доступных юзернеймов а так же схожих с ними телеграм

Тема в разделе Python создана пользователем n1s_01 11 май 2025. 113 просмотров

Загрузка...
  1. n1s_01
    n1s_01 Автор темы 11 май 2025 :coder: n1s-01.click :coder: lolz.live/threads/8514735/ :coder: 471 15 май 2019
    С помощью софта можно найти аналоги юзернейма если он уже занят, софт сам подставляет похожие символы и цифры вместо существующих
    может пригодится когда надо сделать копию аккаунта или группы
    Python
    import sys
    import requests
    from bs4 import BeautifulSoup
    from itertools import product

    from PyQt6.QtWidgets import (
    QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
    QLabel, QLineEdit, QPushButton, QCheckBox, QProgressBar, QTextEdit,
    QGridLayout
    )
    from PyQt6.QtCore import Qt, QThread, pyqtSignal, QObject
    from PyQt6.QtGui import QTextCharFormat


    def check_username(username):
    url = f"https://fragment.com/username/{username}"
    headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
    }
    try:
    response = requests.get(url, headers=headers, allow_redirects=False, timeout=10)
    if response.status_code == 302:
    return f"Юзернейм @{username} свободен и может быть занят.", "free"
    elif response.status_code == 200:
    soup = BeautifulSoup(response.text, 'html.parser')
    status_element = soup.find('span', class_='tm-section-header-status')
    if status_element:
    status_text = status_element.text.strip()
    if status_text == "For sale":
    price_element = soup.find('div', class_='table-cell-value tm-value icon-before icon-ton')
    price = price_element.text.strip() if price_element else "не указана"
    return f"Юзернейм @{username} выставлен на продажу. Цена: {price} TON.", "sale"
    else:
    return f"Юзернейм @{username} занят.", "taken"
    else:
    return f"Юзернейм @{username} занят (статус не найден).", "taken"
    else:
    return f"Ошибка при проверке юзернейма @{username}: HTTP {response.status_code}", "error"
    except requests.Timeout:
    return f"Тайм-аут при проверке @{username}", "error"
    except requests.RequestException as e:
    return f"Ошибка при запросе для @{username}: {str(e)}", "error"

    def generate_variants(username, use_numbers, use_letters):
    base_substitutions = {
    'a': {'numbers': ['4'], 'letters': []},
    'b': {'numbers': ['6'], 'letters': []},
    'e': {'numbers': ['3'], 'letters': []},
    'i': {'numbers': ['1'], 'letters': ['l']},
    'o': {'numbers': ['0'], 'letters': []},
    'k': {'numbers': [], 'letters': ['c']},
    'c': {'numbers': [], 'letters': ['k']},
    'l': {'numbers': [], 'letters': ['I']},
    }
    char_options_list = []
    for char_original in username.lower():
    options_for_this_char = [char_original]
    subs = base_substitutions.get(char_original, {})
    if use_numbers and subs.get('numbers'):
    options_for_this_char.extend(subs['numbers'])
    if use_letters and subs.get('letters'):
    options_for_this_char.extend(subs['letters'])
    char_options_list.append(list(dict.fromkeys(options_for_this_char)))
    variants = {''.join(combination) for combination in product(*char_options_list)}
    return sorted(list(variants))
    class Worker(QObject):
    progress_signal = pyqtSignal(int, int, str, str)
    finished_signal = pyqtSignal()
    log_signal = pyqtSignal(str, str)
    stats_signal = pyqtSignal(list, list, list, list)
    variants_count_signal = pyqtSignal(int)
    final_summary_signal = pyqtSignal(int, int, int, int, int)
    def __init__(self, username, use_numbers, use_letters):
    super().__init__()
    self.username = username
    self.use_numbers = use_numbers
    self.use_letters = use_letters
    self.is_running = True
    def run(self):
    stats_free = []
    stats_sale = []
    stats_taken = []
    stats_error = []
    self.log_signal.emit(f"Проверка основного юзернейма: @{self.username}", "info")
    initial_result, status = check_username(self.username)
    self.log_signal.emit(initial_result, status)
    if "занят" in initial_result or "продажу" in initial_result :
    self.log_signal.emit(f"Основной юзернейм @{self.username} занят или на продаже. Начинаю проверку вариантов...", "info")
    variants = generate_variants(self.username, self.use_numbers, self.use_letters)
    try:
    variants.remove(self.username.lower())
    except ValueError:
    pass

    total_variants = len(variants)
    self.variants_count_signal.emit(total_variants)
    self.log_signal.emit(f"Будет проверено вариантов (помимо основного): {total_variants}", "info")

    if not variants:
    self.log_signal.emit("Нет вариантов для проверки (кроме основного).", "info")
    else:
    for i, variant in enumerate(variants):
    if not self.is_running:
    self.log_signal.emit("Проверка остановлена пользователем.", "info")
    break
    result, r_status = check_username(variant)
    self.progress_signal.emit(i + 1, total_variants, result, r_status)

    if r_status == "free":
    stats_free.append(variant)
    elif r_status == "sale":
    stats_sale.append(variant)
    elif r_status == "taken":
    stats_taken.append(variant)
    elif r_status == "error":
    stats_error.append(variant)
    self.stats_signal.emit(stats_free, stats_sale, stats_taken, stats_error)
    else:
    self.log_signal.emit(f"Основной юзернейм @{self.username} свободен. Проверка вариантов не требуется.", "free")
    total_variants = 0

    self.final_summary_signal.emit(total_variants, len(stats_free), len(stats_sale), len(stats_taken), len(stats_error))
    self.finished_signal.emit()

    def stop(self):
    self.is_running = False
    class UsernameCheckerApp(QMainWindow):
    def __init__(self):
    super().__init__()
    self.setWindowTitle("Спиздить юзернейм без регистрации и смс")
    self.setGeometry(100, 100, 1000, 700)
    self.worker = None
    self.thread = None
    self.stats_free_list = []
    self.stats_sale_list = []
    self.stats_taken_list = []
    self.stats_error_list = []
    self.setup_ui()
    self.apply_stylesheet()
    def setup_ui(self):
    self.central_widget = QWidget()
    self.setCentralWidget(self.central_widget)
    main_layout = QVBoxLayout(self.central_widget)
    header_label = QLabel("Юзеренейм чекер")
    header_label.setObjectName("HeaderLabel")
    header_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
    main_layout.addWidget(header_label)
    input_layout = QHBoxLayout()
    self.username_label = QLabel("Базовый юзернейм:")
    self.username_entry = QLineEdit()
    self.username_entry.setPlaceholderText("@username")
    self.check_button = QPushButton("Проверить")
    self.check_button.clicked.connect(self.start_check_thread)
    input_layout.addWidget(self.username_label)
    input_layout.addWidget(self.username_entry)
    input_layout.addWidget(self.check_button)
    main_layout.addLayout(input_layout)

    options_layout = QHBoxLayout()
    self.replace_numbers_checkbox = QCheckBox("Заменять цифрами")
    self.replace_numbers_checkbox.setChecked(True)
    self.replace_letters_checkbox = QCheckBox("Заменять буквами")
    self.replace_letters_checkbox.setChecked(True)
    options_layout.addWidget(self.replace_numbers_checkbox)
    options_layout.addWidget(self.replace_letters_checkbox)
    options_layout.addStretch()
    main_layout.addLayout(options_layout)

    progress_layout = QHBoxLayout()
    self.progress_label = QLabel("Готов к проверке.")
    self.progress_bar = QProgressBar()
    self.progress_bar.setTextVisible(False)
    progress_layout.addWidget(self.progress_label)
    progress_layout.addWidget(self.progress_bar)
    main_layout.addLayout(progress_layout)

    self.results_text_edit = QTextEdit()
    self.results_text_edit.setReadOnly(True)
    main_layout.addWidget(self.results_text_edit, 1)

    stats_grid_layout = QGridLayout()
    self.stats_header_label = QLabel("Статистика:")
    self.stats_header_label.setObjectName("StatsHeaderLabel")
    stats_grid_layout.addWidget(self.stats_header_label, 0, 0, 1, 2)

    self.free_label_title = QLabel("Свободные:")
    self.free_label_count = QLabel("0")
    self.free_label_count.setObjectName("FreeCount")
    stats_grid_layout.addWidget(self.free_label_title, 1, 0)
    stats_grid_layout.addWidget(self.free_label_count, 1, 1)

    self.sale_label_title = QLabel("На продаже:")
    self.sale_label_count = QLabel("0")
    self.sale_label_count.setObjectName("SaleCount")
    stats_grid_layout.addWidget(self.sale_label_title, 2, 0)
    stats_grid_layout.addWidget(self.sale_label_count, 2, 1)

    self.taken_label_title = QLabel("Занятые:")
    self.taken_label_count = QLabel("0")
    self.taken_label_count.setObjectName("TakenCount")
    stats_grid_layout.addWidget(self.taken_label_title, 3, 0)
    stats_grid_layout.addWidget(self.taken_label_count, 3, 1)

    self.error_label_title = QLabel("Ошибки:")
    self.error_label_count = QLabel("0")
    self.error_label_count.setObjectName("ErrorCount")
    stats_grid_layout.addWidget(self.error_label_title, 4, 0)
    stats_grid_layout.addWidget(self.error_label_count, 4, 1)

    stats_grid_layout.setColumnStretch(2, 1)
    main_layout.addLayout(stats_grid_layout)

    summary_layout = QHBoxLayout()

    self.free_list_text_edit = QTextEdit()
    self.free_list_text_edit.setReadOnly(True)
    self.free_list_text_edit.setObjectName("FreeList")
    self.free_list_text_edit.setPlaceholderText("Свободные варианты...")
    self.free_list_text_edit.setMaximumHeight(100)
    summary_layout.addWidget(self.free_list_text_edit)

    self.sale_list_text_edit = QTextEdit()
    self.sale_list_text_edit.setReadOnly(True)
    self.sale_list_text_edit.setObjectName("SaleList")
    self.sale_list_text_edit.setPlaceholderText("Варианты на продаже...")
    self.sale_list_text_edit.setMaximumHeight(100)
    summary_layout.addWidget(self.sale_list_text_edit)

    main_layout.addLayout(summary_layout)


    def apply_stylesheet(self):
    self.setStyleSheet('''
    QWidget {
    background-color: #2B2B2B;
    color: #E0E0E0;
    font-family: "Segoe UI", Arial, sans-serif;
    font-size: 10pt;
    }
    QMainWindow {
    background-color: #2B2B2B;
    }
    #HeaderLabel {
    font-size: 18pt;
    font-weight: bold;
    color: #007ACC;
    padding: 10px;
    }
    #StatsHeaderLabel {
    font-size: 12pt;
    font-weight: bold;
    color: #009688;
    padding-top: 10px;
    }
    QLineEdit {
    background-color: #3C3F41;
    border: 1px solid #555555;
    padding: 5px;
    border-radius: 3px;
    color: #FFFFFF;
    }
    QPushButton {
    background-color: #007ACC;
    color: white;
    border: none;
    padding: 8px 15px;
    border-radius: 3px;
    font-weight: bold;
    }
    QPushButton:hover {
    background-color: #005C99;
    }
    QPushButton:pressed {
    background-color: #004C80;
    }
    QPushButton:disabled {
    background-color: #4A4A4A;
    color: #888888;
    }
    QCheckBox {
    spacing: 5px;
    }
    QCheckBox::indicator {
    width: 15px;
    height: 15px;
    }
    QCheckBox::indicator:unchecked {
    background-color: #3C3F41;
    border: 1px solid #555555;
    border-radius: 3px;
    }
    QCheckBox::indicator:checked {
    background-color: #4CAF50;
    border: 1px solid #3C763D;
    border-radius: 3px;
    }
    QProgressBar {
    border: 1px solid #555555;
    border-radius: 3px;
    background-color: #3C3F41;
    text-align: center;
    color: #E0E0E0;
    }
    QProgressBar::chunk {
    background-color: #4CAF50;
    border-radius: 3px;
    }
    QTextEdit {
    background-color: #1E1E1E;
    border: 1px solid #444444;
    color: #CCCCCC;
    font-family: "Consolas", "Courier New", monospace;
    font-size: 9pt;
    padding: 5px;
    }
    #FreeCount { color: #4CAF50; font-weight: bold; }
    #SaleCount { color: #FF9800; font-weight: bold; }
    #TakenCount { color: #F44336; font-weight: bold; }
    #ErrorCount { color: #FFEB3B; font-weight: bold; }

    #FreeList { border: 1px solid #4CAF50; }
    #SaleList { border: 1px solid #FF9800; }
    ''')

    def log_message(self, message, status_tag="info"):
    color_map = {
    "free": "#4CAF50",
    "sale": "#FF9800",
    "taken": "#F44336",
    "error": "#FFEB3B",
    "info": "#00BCD4"
    }
    color = color_map.get(status_tag, "#E0E0E0")

    self.results_text_edit.append(f"<span style='color:{color};'>{message}</span>")

    def update_progress(self, current_value, max_value, message, status_tag):
    self.progress_bar.setValue(current_value)
    self.progress_bar.setMaximum(max_value)
    self.progress_label.setText(f"Проверено: {current_value}/{max_value}")
    self.log_message(message, status_tag)

    def update_stats_display(self, free_list, sale_list, taken_list, error_list):
    self.stats_free_list = free_list
    self.stats_sale_list = sale_list
    self.stats_taken_list = taken_list
    self.stats_error_list = error_list

    self.free_label_count.setText(str(len(self.stats_free_list)))
    self.sale_label_count.setText(str(len(self.stats_sale_list)))
    self.taken_label_count.setText(str(len(self.stats_taken_list)))
    self.error_label_count.setText(str(len(self.stats_error_list)))

    self.free_list_text_edit.setHtml("<br>".join([f"<span style='color:#4CAF50;'>@{u}</span>" for u in self.stats_free_list]))
    self.sale_list_text_edit.setHtml("<br>".join([f"<span style='color:#FF9800;'>@{u}</span>" for u in self.stats_sale_list]))


    def set_variants_count(self, count):
    if count > 0:
    self.progress_bar.setMaximum(count)
    self.progress_bar.setValue(0)
    self.progress_label.setText(f"Всего вариантов для проверки: {count}")


    def on_check_finished(self):
    self.check_button.setEnabled(True)
    self.username_entry.setEnabled(True)
    self.replace_numbers_checkbox.setEnabled(True)
    self.replace_letters_checkbox.setEnabled(True)
    if self.progress_bar.maximum() > 0 and self.progress_bar.value() < self.progress_bar.maximum():
    self.progress_label.setText("Проверка остановлена.")
    elif self.progress_bar.maximum() == 0 and self.progress_bar.value() == 0:
    self.progress_label.setText("Проверка не потребовалась или нет вариантов.")
    else:
    self.progress_label.setText("Проверка завершена.")
    self.log_message("--- Проверка завершена ---", "info")
    if self.thread and self.thread.isRunning():
    self.thread.quit()
    self.thread.wait()


    def display_final_summary(self, total_variants, free_count, sale_count, taken_count, error_count):
    self.log_message("\n--- Итоги проверки вариантов ---", "info")
    if total_variants > 0:
    self.log_message(f"Всего проверено вариантов: {total_variants}", "info")
    self.log_message(f"Свободных: {free_count}", "free" if free_count > 0 else "info")
    self.log_message(f"На продаже: {sale_count}", "sale" if sale_count > 0 else "info")
    self.log_message(f"Занятых: {taken_count}", "taken" if taken_count > 0 else "info")
    self.log_message(f"С ошибками: {error_count}", "error" if error_count > 0 else "info")
    else:
    self.log_message("Варианты не проверялись.", "info")


    def start_check_thread(self):
    base_username = self.username_entry.text().strip().lstrip('@')
    if not base_username:
    self.log_message("Введите базовый юзернейм!", "error")
    return

    self.results_text_edit.clear()
    self.free_list_text_edit.clear()
    self.sale_list_text_edit.clear()
    self.stats_free_list, self.stats_sale_list, self.stats_taken_list, self.stats_error_list = [], [], [], []
    self.update_stats_display([],[],[],[])
    self.progress_bar.setValue(0)
    self.progress_bar.setMaximum(100)
    self.progress_label.setText("Подготовка...")

    self.check_button.setEnabled(False)
    self.username_entry.setEnabled(False)
    self.replace_numbers_checkbox.setEnabled(False)
    self.replace_letters_checkbox.setEnabled(False)

    use_numbers = self.replace_numbers_checkbox.isChecked()
    use_letters = self.replace_letters_checkbox.isChecked()

    self.thread = QThread()
    self.worker = Worker(base_username, use_numbers, use_letters)
    self.worker.moveToThread(self.thread)

    self.worker.progress_signal.connect(self.update_progress)
    self.worker.log_signal.connect(self.log_message)
    self.worker.stats_signal.connect(self.update_stats_display)
    self.worker.variants_count_signal.connect(self.set_variants_count)
    self.worker.final_summary_signal.connect(self.display_final_summary)
    self.worker.finished_signal.connect(self.on_check_finished)
    self.worker.finished_signal.connect(self.thread.quit)
    self.worker.finished_signal.connect(self.worker.deleteLater)
    self.thread.finished.connect(self.thread.deleteLater)

    self.thread.started.connect(self.worker.run)
    self.thread.start()

    def closeEvent(self, event):
    if self.worker and self.thread and self.thread.isRunning():
    self.worker.stop()
    self.thread.quit()
    self.thread.wait(2000)
    event.accept()


    if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_win = UsernameCheckerApp()
    main_win.show()
    sys.exit(app.exec())
    Python
    import sys,requests
    from bs4 import BeautifulSoup
    from itertools import product as P
    def C(u):
    try:
    r=requests.get(f"https://fragment.com/username/{u}",headers={"User-Agent":"Moz"},allow_redirects=0,timeout=5)
    if r.status_code==302:return f"@{u} free","free"
    if r.status_code==200:
    s=BeautifulSoup(r.text,'html.parser').find('span',class_='tm-section-header-status')
    if s and s.text=='For sale':return f"@{u} sale","sale"
    return f"@{u} taken","taken"
    return f"@{u} err{r.status_code}","error"
    except: return f"@{u} err","error"
    subs={'a':{'n':['4'],'l':[]},'b':{'n':['6'],'l':[]},'e':{'n':['3'],'l':[]},'i':{'n':['1'],'l':['l']},'o':{'n':['0'],'l':[]},'k':{'n':[],'l':['c']},'c':{'n':[],'l':['k']},'l':{'n':[],'l':['I']}}
    def V(u,n,l):
    o=[]
    for c in u.lower():
    cs=[c]
    s=subs.get(c,{})
    cs+=s.get('n',[]) if n else []
    cs+=s.get('l',[]) if l else []
    o.append(dict.fromkeys(cs))
    return [''.join(x) for x in P(*o)]
    if __name__=='__main__':
    u=input('user:').strip().lstrip('@')
    if not u:sys.exit()
    r,s=C(u);print(r)
    res={'free':[], 'sale':[], 'taken':0,'error':0}
    if s in('free','sale'):res[s].append(u)
    elif s=='taken':res['taken']+=1
    else:res['error']+=1
    if s!='free':
    for v in V(u,1,1):
    if v==u:continue
    rr,ss=C(v)
    if ss in('free','sale'):print(rr);res[ss].append(v)
    elif ss=='taken':res['taken']+=1
    else:res['error']+=1
    print('free',len(res['free']),*res['free'],'\nsale',len(res['sale']),*res['sale'],'\ntaken',res['taken'],'\nerr',res['error'])
     
    11 май 2025 Изменено
  2. мыслипередсном
    ебать код здоровый для такой программы
     
    1. n1s_01 Автор темы
    2. n1s_01 Автор темы
      мыслипередсном, добавил короткую версию молодой человек, 39 строк, удволетворительно?
  3. Aisan
    Aisan 11 май 2025 Ничего не продаю, не создаю. Не пишите мне 15 076 26 авг 2020
    Задумка хорошая, но реализация реально говняная
     
Top