Как сделать бот для занятия имени Telegram-канала
Traffic Cardinal Traffic Cardinal  написал 15.07.2025

Как сделать бот для занятия имени Telegram-канала

Traffic Cardinal Traffic Cardinal  написал 15.07.2025
8 мин
0
89
Содержание

Красивые никнеймы всегда были чем-то из разряда блатных номеров. С появлением мессенджеров же люди и вовсе как будто помешались на этой теме. Однако дальше всех пошел Telegram, создавший полноценную TON-биржу никнеймов. Все это делает попытки занять красивое имя вручную практически невозможными: ведь когда за один и тот же никнейм борются несколько десятков ботов, поспеть за ними просто нереально. Впрочем, пытаться их опередить и не нужно, ведь можно сделать свой бот. О том, как это сделать, мы и расскажем сегодня.

banner banner

Какие задачи выполняет бот для занятия имени Telegram-канала

В первую очередь бот создан для тех, чьи никнеймы были угнаны после накруток ботов или из-за внезапно нагрянувших сторонних обстоятельств непреодолимой силы. Формально те, кто угнал никнеймы, конечно, могут сделать так, что вы не сможете получить их обратно. Однако в большинстве случаев они забивают на угнанное имя, привязывая его к рандомному акку. Telegram же неактивные акки со временем удаляет, благодаря чему можно попытаться имя перехватить.

Кроме того, обычно имена угоняют для последующей перепродажи. Так вот в момент продажи его тоже можно успеть вернуть. Кроме этого, бот для занятия имени Telegram-канала позволяет:

  • Автоматизировать процесс занятия красивых имен заброшенных каналов.

  • Частично обезопасить канал путем мгновенного перехвата имени в случае перевода канала в приватный режим.

  • (Опционально) автоматизировать проверку валидности сгенерированных имен.

Впрочем, давайте разберемся, как все это дело устроено.

Принцип работы бота для занятия имени Telegram-канала

Алгоритмически бот довольно простой. Хотя удобства ради использует и bot-api, и user-api. Однако в остальном все сводится к следующему:

  1. Бот слушает эфир и реагирует на введенные сообщения.
  2. В случае если текст сообщения совпадает с username канала, где авторизованный профиль создатель — бот инициирует запуск остального функционала.
  3. Бот запоминает канал, в котором нужно сменить имя.
  4. Бот запоминает имя, на которое нужно изменить имя канала.
  5. Бот запоминает время паузы между попытками.
  6. Бот проверяет, может ли быть использовано введенное сообщение в качестве имени канала.
  7. Бот проверяет, доступно ли введенное имя.
  8. Бот уходит в паузу или меняет имя — в зависимости от того, свободно ли оно.
  9. Оповещает об успехе/неудаче при смене имени.

Как видите, ничего сложного. Но есть нюанс: создатель канала, имя которого вы будете менять, должен быть тем же самым профилем, в котором бот авторизован по user-api. Увы, менять username каналов в Телеге может исключительно создатель. Но никто не мешает создать канал-пустышку, просто чтобы занять им красивое имя. А уже потом переносить его туда, куда вам нужно.

Пошаговая инструкция, как сделать бот для занятия имени Telegram-канала

Увы, через bot-api менять username каналов нельзя. Поэтому мы будем использовать для ядра бота user-api. Однако и bot-api будет использован для более удобного управления ботом. Поэтому авторизуемся и в веб-версии, и в BotFather.

Начнем с BotFather:

  1. Пишем в ЛС BotFather.
  2. Делаем то, что написано в инструкции.
  3. Копируем токен.

Но нам нужны еще и api_id с api_hash:

  1. Заходим в веб-версию.
  2. Открываем «API development tools», вносим данные.
  3. Копируем api_id и api_hash.

Также понадобится настроить сервер. Если у вас его нет, советы из этой статьи помогут развернуть сервак на своем ПК. Вводим в консоль сервера:

pip install python-telegram-bot telethon


1. Делаем на сервере файл bot.py

2. Открываем этот файл в текстовом редакторе, вставляем код бота:

import asyncio

from telethon import TelegramClient, errors

from telethon.tl.functions.channels import UpdateUsernameRequest

from telethon.tl.functions.account import CheckUsernameRequest

from telegram import Update

from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, ContextTypes, filters

api_id = ВАШ API_ID

api_hash = 'ВАШ API_HASH'

phone = 'ВАШ ТЕЛЕФОН'

bot_token = 'ВАШ ТОКЕН'

user_states = {}

STATE_CHANNEL, STATE_TARGET, STATE_DELAY, STATE_RUNNING = range(4)

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):

user_id = update.effective_chat.id

user_states[user_id] = {'state': STATE_CHANNEL}

await update.message.reply_text("Привет! Введи username текущего канала (channel_username):")

async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):

user_id = update.effective_chat.id

message = update.message.text.strip()

if user_id not in user_states:

await update.message.reply_text("Сначала отправь /start.")

return

user_data = user_states[user_id]

if user_data['state'] == STATE_CHANNEL:

user_data['channel_username'] = message

user_data['state'] = STATE_TARGET

await update.message.reply_text("Теперь введи желаемый username (target_username):")

elif user_data['state'] == STATE_TARGET:

user_data['target_username'] = message

user_data['state'] = STATE_DELAY

await update.message.reply_text("Теперь введи задержку между попытками в секундах (например: 30):")

elif user_data['state'] == STATE_DELAY:

try:

delay = float(message)

user_data['delay_seconds'] = delay

user_data['state'] = STATE_RUNNING

await update.message.reply_text(f"Запускаем процесс отслеживания...")

asyncio.create_task(attempt_username_claim(update, context, user_data))

except ValueError:

await update.message.reply_text("Некорректное число. Введи задержку в секундах (например: 30):")

async def attempt_username_claim(update: Update, context: ContextTypes.DEFAULT_TYPE, user_data):

user_id = update.effective_chat.id

channel_username = user_data['channel_username']

target_username = user_data['target_username']

delay_seconds = user_data['delay_seconds']

try:

async with TelegramClient(f'session_{user_id}', api_id, api_hash) as client:

await client.start(phone=phone)

me = await client.get_me()

entity = await client.get_entity(channel_username)

attempt = 1

while True:

await context.bot.send_message(chat_id=user_id, text=f"[{attempt}] Проверяем {target_username}...")

try:

is_available = await client(CheckUsernameRequest(username=target_username))

except Exception as e:

await context.bot.send_message(chat_id=user_id, text=f"[!] Ошибка при проверке: {e}")

is_available = False

if is_available:

await context.bot.send_message(chat_id=user_id, text=f"[{target_username}] свободен! Пытаемся назначить...")

try:

await client(UpdateUsernameRequest(channel=entity, username=target_username))

await context.bot.send_message(chat_id=user_id, text=f"[+] УСПЕХ! Username {target_username} теперь у канала.")

break

except errors.UsernameOccupiedError:

await context.bot.send_message(chat_id=user_id, text=f"[!] Имя занято (хотя казалось свободным). Пробуем снова.")

except errors.UsernameInvalidError:

await context.bot.send_message(chat_id=user_id, text=f"[!] Имя недопустимо. Завершаем.")

break

except errors.UsernameNotModifiedError:

await context.bot.send_message(chat_id=user_id, text=f"[!] Имя уже установлено. Завершаем.")

break

except Exception as e:

await context.bot.send_message(chat_id=user_id, text=f"[!] Ошибка при назначении: {e}")

else:

await context.bot.send_message(chat_id=user_id, text=f"[{target_username}] занят. Ждём {delay_seconds} сек...")

attempt += 1

await asyncio.sleep(delay_seconds)

except Exception as e:

await context.bot.send_message(chat_id=user_id, text=f"[!] Неизвесная ошибка. Код ошибки: {e}")

if __name__ == '__main__':

app = ApplicationBuilder().token(bot_token).build()

app.add_handler(CommandHandler('start', start))

app.add_handler(MessageHandler(filters.TEXT & (~filters.COMMAND), handle_message))

print("Бот запущен.")

app.run_polling()

3. Вместо ВАШ API_ID, ВАШ API_HASH, ВАШ ТЕЛЕФОН и ВАШ ТОКЕН подставляем свои.

4. Сохраняем.

5. Запускаем наш бот, вводя в консоль python bot.py.

6. Проверяем, все ли работает.

Демонстрация работы

Для начала демонстрируем целевые каналы: TESTtrafficcardinal будет условно «нашим», а TESTtrafficcardinal3 — тем, чье имя мы заприметили
Для начала демонстрируем целевые каналы: TESTtrafficcardinal будет условно «нашим», а TESTtrafficcardinal3 — тем, чье имя мы заприметили

Запускаем бот и вводим наш канал
Запускаем бот и вводим наш канал

Вводим целевое имя и время задержки. Видим, что пока имя занято, бот просто пытается его занять — но не может
Вводим целевое имя и время задержки. Видим, что пока имя занято, бот просто пытается его занять — но не может

Освобождаем имя, заменяя TESTtrafficcardinal3 на TESTtrafficcardinal7, видим, что бот заметил его освобождение и тут же пытается его занять — успешно
Освобождаем имя, заменяя TESTtrafficcardinal3 на TESTtrafficcardinal7, видим, что бот заметил его освобождение и тут же пытается его занять — успешно

Проверяем, реально ли он занят, — да, реально
Проверяем, реально ли он занят, — да, реально

Подводя итоги

Как видите, создать бот для занятия имени Telegram-канала не так уж и сложно. Главное — не злоупотребляйте подобным, иначе вас быстро забанят. Но вот попытаться вернуть свое имя или же занять красивое имя заброшенного канала с помощью данного бота можно.

Здравствуйте! У вас включен блокировщик рекламы, часть сайта не будет работать!