import string from random import choice from asyncio.exceptions import TimeoutError from Data import Data from pyrogram import Client, filters from telethon import TelegramClient from telethon.sessions import StringSession from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton from pyrogram.errors import ( ApiIdInvalid, PhoneNumberInvalid, PhoneCodeInvalid, PhoneCodeExpired, SessionPasswordNeeded, PasswordHashInvalid ) from telethon.errors import ( ApiIdInvalidError, PhoneNumberInvalidError, PhoneCodeInvalidError, PhoneCodeExpiredError, SessionPasswordNeededError, PasswordHashInvalidError ) def generate_random_string(length): characters = string.ascii_uppercase + string.digits random_string = ''.join(choice(characters) for _ in range(length)) return random_string ERROR_MESSAGE = "Oops! An exception occurred! \n\n**Error** : {} " \ "\n\nTolong Laporan ke [Support](t.me/xtdevs) jika eror " \ "sensitive information and you if want to report this as " \ "this error message is not being logged by us!" @Client.on_message(filters.private & filters.command('generate')) async def main(_, msg): await msg.reply( "Please press which string you want to take", reply_markup=InlineKeyboardMarkup( [ [ InlineKeyboardButton("Pyrogram", callback_data="pyrogram"), InlineKeyboardButton("Telethon", callback_data="telethon") ] ] ) ) async def generate_session(bot, msg, telethon=False): await msg.reply("Starting {} Session Generation...".format("Telethon" if telethon else "Pyrogram")) user_id = msg.chat.id api_id_msg = await bot.ask(user_id, 'Please Send `API_ID`', filters=filters.text) if await cancelled(api_id_msg): return try: api_id = int(api_id_msg.text) except ValueError: await api_id_msg.reply('not true API_ID (which must be an integer). Please start generating session again.', quote=True, reply_markup=InlineKeyboardMarkup(Data.generate_button)) return api_hash_msg = await bot.ask(user_id, 'Please Send `API_HASH`', filters=filters.text) if await cancelled(api_id_msg): return api_hash = api_hash_msg.text phone_number_msg = await bot.ask(user_id, "**Please Enter Your Telegram Phone Number With Country Code Format.**\nExample: +1xxxxxxxx", filters=filters.text) if await cancelled(api_id_msg): return phone_number = phone_number_msg.text await msg.reply("Sending OTP...") clients_name = generate_random_string(12) if telethon: client = TelegramClient(StringSession(), api_id, api_hash) else: client = Client("{}".format(clients_name), api_id, api_hash) await client.connect() try: if telethon: code = await client.send_code_request(phone_number) else: code = await client.send_code(phone_number) except (ApiIdInvalid, ApiIdInvalidError): await msg.reply('`API_ID` and `API_HASH` combination is invalid. Please start generating session again.', reply_markup=InlineKeyboardMarkup(Data.generate_button)) return except (PhoneNumberInvalid, PhoneNumberInvalidError): await msg.reply('`PHONE_NUMBER` is invalid. Please start generating session again.', reply_markup=InlineKeyboardMarkup(Data.generate_button)) return try: phone_code_msg = await bot.ask(user_id, "**Please Check OTP Code from Official [Telegram Account](tg://openmessage?user_id=777000).Send OTP Code here after reading Format below.\n\nIf OTP Code is 12345 Please [ ADD SPACE** ] send it Like this `1 2 3 4 5`", filters=filters.text, timeout=600) if await cancelled(api_id_msg): return except TimeoutError: await msg.reply('Time limit reached 10 minutes. Please start generating strings again.', reply_markup=InlineKeyboardMarkup(Data.generate_button)) return phone_code = phone_code_msg.text.replace(" ", "") try: if telethon: await client.sign_in(phone_number, phone_code, password=None) else: await client.sign_in(phone_number, code.phone_code_hash, phone_code) except (PhoneCodeInvalid, PhoneCodeInvalidError): await msg.reply('OTP is invalid. Please start generating session again.', reply_markup=InlineKeyboardMarkup(Data.generate_button)) return except (PhoneCodeExpired, PhoneCodeExpiredError): await msg.reply('OTP is expired. Please start generating session again.', reply_markup=InlineKeyboardMarkup(Data.generate_button)) return except (SessionPasswordNeeded, SessionPasswordNeededError): try: two_step_msg = await bot.ask(user_id, 'Your account has enabled two-step verification. Please provide the password.', filters=filters.text, timeout=300) except TimeoutError: await msg.reply('Time limit reached 10 minutes. Please start generating strings again.', reply_markup=InlineKeyboardMarkup(Data.generate_button)) return try: password = two_step_msg.text if telethon: await client.sign_in(password=password) else: await client.check_password(password=password) if await cancelled(api_id_msg): return except (PasswordHashInvalid, PasswordHashInvalidError): await two_step_msg.reply('Invalid Password Provided. Please start generating session again.', quote=True, reply_markup=InlineKeyboardMarkup(Data.generate_button)) return if telethon: string_session = client.session.save() else: string_session = await client.export_session_string() text = "**{} STRING SESSION** \n\n`{}` \n\nGenerated by @pantekyks".format("TELETHON" if telethon else "PYROGRAM", string_session) await client.send_message("me", text) await client.disconnect() await phone_code_msg.reply("Successfully Fetched {} session string.\n\nPlease check the Saved Message!\n\nBy @rencprx".format("telethon" if telethon else "pyrogram")) async def cancelled(msg): if "/cancel" in msg.text: await msg.reply("Cancel Process!", quote=True, reply_markup=InlineKeyboardMarkup(Data.generate_button)) return True elif "/restart" in msg.text: await msg.reply("Restarting Bots!", quote=True, reply_markup=InlineKeyboardMarkup(Data.generate_button)) return True elif msg.text.startswith("/"): # Bot Commands await msg.reply("Cancel generation process!", quote=True) return True else: return False