randydev's picture
Upload 5 files
1400465 verified
raw
history blame
6.72 kB
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