Форум сайта python.su
Всем привет, я пишу бота(ЮБ), и тут такая проблемка, я хочу сделать автоматическое подключение.
Это бот 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()
Офлайн
это базовый пример, и его можно и нужно улучшать и адаптировать под конкретные требования и сценарии
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()
Офлайн
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()
Офлайн
ZeroCool77Я только сейчас заметил, что нужно человеку писать но можно в обычного бота?
можно использовать систему авторизации Telegram по номеру телефона, которая запрашивает у пользователя код подтверждения.Установите библиотеку telethon
Офлайн