Загрузка...

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

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

  1. n1s_01
    n1s_01 Автор темы 11 май 2025 :coder: lolz.live/threads/8514735/ :coder: 497 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 Изменено
    1. n1s_01 Автор темы
  2. мыслипередсном
    ебать код здоровый для такой программы
     
    1. n1s_01 Автор темы
    2. n1s_01 Автор темы
      мыслипередсном, добавил короткую версию молодой человек, 39 строк, удволетворительно?
  3. Aisan
    Aisan 11 май 2025 Ничего не продаю и не создаю. Не пишите мне 15 856 26 авг 2020
    Задумка хорошая, но реализация реально говняная
     
    1. n1s_01 Автор темы
Top
Загрузка...