Spaces:
Runtime error
Runtime error
File size: 9,314 Bytes
78b07ad |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
from pyrogram import Client, filters
from pyrogram.errors import SessionPasswordNeeded
from pyrogram.types import (
CallbackQuery,
InlineKeyboardButton,
InlineKeyboardMarkup,
Message,
ReplyKeyboardRemove,
)
from ..btnsG import gen_inline_keyboard, start_button
from ..btnsK import session_keyboard
from . import START_MSG, BotHelp, Config, Symbols, db, hellbot
@hellbot.bot.on_message(
filters.command("session") & Config.AUTH_USERS & filters.private
)
async def session_menu(_, message: Message):
await message.reply_text(
"**๐ ๐ฏ๐
๐พ๐บ๐๐พ ๐ผ๐๐๐๐๐พ ๐บ๐ ๐๐๐๐๐๐ ๐ฟ๐๐๐ ๐ป๐พ๐
๐๐:**",
reply_markup=session_keyboard(),
)
@hellbot.bot.on_message(filters.regex(r"New ๐ซ") & Config.AUTH_USERS & filters.private)
async def new_session(_, message: Message):
await message.reply_text(
"**๐ฎ๐๐บ๐!** ๐ซ๐พ๐'๐ ๐๐พ๐๐๐ ๐บ ๐๐พ๐ ๐๐พ๐๐๐๐๐",
reply_markup=ReplyKeyboardRemove(),
)
phone_number = await hellbot.bot.ask(
message.chat.id,
"**1.** ๐ค๐๐๐พ๐ ๐๐๐๐ ๐๐พ๐
๐พ๐๐๐บ๐ ๐บ๐ผ๐ผ๐๐๐๐ ๐๐๐๐๐พ ๐๐๐๐ป๐พ๐ ๐๐ ๐บ๐ฝ๐ฝ ๐๐๐พ ๐๐พ๐๐๐๐๐: \n\n__๐ฒ๐พ๐๐ฝ /cancel ๐๐ ๐ผ๐บ๐๐ผ๐พ๐
๐๐๐พ ๐๐๐พ๐๐บ๐๐๐๐.__",
filters=filters.text,
timeout=120,
)
if phone_number.text == "/cancel":
return await message.reply_text("**๐ข๐บ๐๐ผ๐พ๐
๐
๐พ๐ฝ!**")
elif not phone_number.text.startswith("+") and not phone_number.text[1:].isdigit():
return await message.reply_text(
"**๐ค๐๐๐๐!** ๐ฏ๐๐๐๐พ ๐๐๐๐ป๐พ๐ ๐๐๐๐ ๐ป๐พ ๐๐ ๐ฝ๐๐๐๐๐ ๐บ๐๐ฝ ๐๐๐๐๐
๐ฝ ๐ผ๐๐๐๐บ๐๐ ๐ผ๐๐๐๐๐๐ ๐ผ๐๐ฝ๐พ."
)
try:
client = Client(
name="Hellbot",
api_id=Config.API_ID,
api_hash=Config.API_HASH,
in_memory=True,
)
await client.connect()
code = await client.send_code(phone_number.text)
ask_otp = await hellbot.bot.ask(
message.chat.id,
"**2.** ๐ค๐๐๐พ๐ ๐๐๐พ ๐ฎ๐ณ๐ฏ ๐๐พ๐๐ ๐๐ ๐๐๐๐ ๐๐พ๐
๐พ๐๐๐บ๐ ๐บ๐ผ๐ผ๐๐๐๐ ๐ป๐ ๐๐พ๐๐บ๐๐บ๐๐๐๐ ๐พ๐๐พ๐๐ ๐๐๐๐ป๐พ๐ ๐๐๐๐ ๐บ ๐๐๐บ๐ผ๐พ. \n\n**๐ค๐๐บ๐๐๐
๐พ:** `2 4 1 7 4`\n\n__๐ฒ๐พ๐๐ฝ /cancel ๐๐ ๐ผ๐บ๐๐ผ๐พ๐
๐๐๐พ ๐๐๐พ๐๐บ๐๐๐๐.__",
filters=filters.text,
timeout=300,
)
if ask_otp.text == "/cancel":
return await message.reply_text("**๐ข๐บ๐๐ผ๐พ๐
๐
๐พ๐ฝ!**")
otp = ask_otp.text.replace(" ", "")
try:
await client.sign_in(phone_number.text, code.phone_code_hash, otp)
except SessionPasswordNeeded:
two_step_pass = await hellbot.bot.ask(
message.chat.id,
"**3.** ๐ค๐๐๐พ๐ ๐๐๐๐ ๐๐๐ ๐๐๐พ๐ ๐๐พ๐๐๐ฟ๐๐ผ๐บ๐๐๐๐ ๐๐บ๐๐๐๐๐๐ฝ: \n\n__๐ฒ๐พ๐๐ฝ /cancel ๐๐ ๐ผ๐บ๐๐ผ๐พ๐
๐๐๐พ ๐๐๐พ๐๐บ๐๐๐๐.__",
filters=filters.text,
timeout=120,
)
if two_step_pass.text == "/cancel":
return await message.reply_text("**๐ข๐บ๐๐ผ๐พ๐
๐
๐พ๐ฝ!**")
await client.check_password(two_step_pass.text)
session_string = await client.export_session_string()
await message.reply_text(
f"**๐ฒ๐๐ผ๐ผ๐พ๐๐!** ๐ธ๐๐๐ ๐๐พ๐๐๐๐๐ ๐๐๐๐๐๐ ๐๐ ๐๐พ๐๐พ๐๐บ๐๐พ๐ฝ. ๐ ๐ฝ๐ฝ๐๐๐ ๐๐ ๐๐ ๐ฝ๐บ๐๐บ๐ป๐บ๐๐พ..."
)
user_id = (await client.get_me()).id
await db.update_session(user_id, session_string)
await client.disconnect()
await message.reply_text(
"**๐ฒ๐๐ผ๐ผ๐พ๐๐!** ๐ฒ๐พ๐๐๐๐๐ ๐๐๐๐๐๐ ๐บ๐ฝ๐ฝ๐พ๐ฝ ๐๐ ๐ฝ๐บ๐๐บ๐ป๐บ๐๐พ. ๐ธ๐๐ ๐ผ๐บ๐ ๐๐๐ ๐๐๐พ ๐ง๐พ๐
๐
๐ก๐๐ ๐๐ ๐๐๐๐ ๐บ๐ผ๐ผ๐๐๐๐ ๐บ๐ฟ๐๐พ๐ ๐๐พ๐๐๐บ๐๐๐๐๐ ๐๐๐พ ๐ป๐๐.\n\n**๐ญ๐ฎ๐ณ๐ค:** ๐ฅ๐๐ ๐๐พ๐ผ๐๐๐๐๐ ๐๐๐๐๐๐๐พ๐ ๐๐๐ป๐๐ฝ๐ ๐๐๐
๐
๐๐บ๐๐พ ๐๐๐พ ๐บ๐ผ๐ผ๐พ๐๐ ๐๐ ๐๐๐๐ ๐๐พ๐๐๐๐๐ ๐๐๐๐๐๐. ๐ญ๐๐ ๐พ๐๐พ๐ ๐๐๐ ๐๐ ๐๐๐พ ๐ป๐๐."
)
except TimeoutError:
await message.reply_text(
"**๐ณ๐๐๐พ๐๐๐๐ค๐๐๐๐!** ๐ธ๐๐ ๐๐๐๐ ๐
๐๐๐๐พ๐ ๐๐๐บ๐ ๐พ๐๐ผ๐๐พ๐ผ๐๐พ๐ฝ ๐๐ ๐ผ๐๐๐๐
๐พ๐๐พ ๐๐๐พ ๐๐๐๐ผ๐พ๐๐. ๐ฏ๐
๐พ๐บ๐๐พ ๐๐๐ ๐บ๐๐บ๐๐."
)
except Exception as e:
await message.reply_text(f"**๐ค๐๐๐๐!** {e}")
@hellbot.bot.on_message(
filters.regex(r"Delete โ") & Config.AUTH_USERS & filters.private
)
async def delete_session(_, message: Message):
all_sessions = await db.get_all_sessions()
if not all_sessions:
return await message.reply_text("๐ญ๐ ๐๐พ๐๐๐๐๐๐ ๐ฟ๐๐๐๐ฝ ๐๐ ๐ฝ๐บ๐๐บ๐ป๐บ๐๐พ.")
collection = []
for i in all_sessions:
collection.append((i["user_id"], f"rm_session:{i['user_id']}"))
buttons = gen_inline_keyboard(collection, 2)
buttons.append([InlineKeyboardButton("Cancel โ", "auth_close")])
await message.reply_text(
"**๐ข๐๐๐๐๐พ ๐บ ๐๐พ๐๐๐๐๐ ๐๐ ๐ฝ๐พ๐
๐พ๐๐พ:**",
reply_markup=InlineKeyboardMarkup(buttons),
)
@hellbot.bot.on_callback_query(filters.regex(r"rm_session"))
async def rm_session_cb(client: Client, cb: CallbackQuery):
collection = []
user_id = int(cb.data.split(":")[1])
all_sessions = await db.get_all_sessions()
if not all_sessions:
return await cb.message.delete()
try:
owner = await client.get_users(Config.OWNER_ID)
owner_id = owner.id
owner_name = owner.first_name
except:
owner_id = Config.OWNER_ID
owner_name = "๐ฎ๐๐๐พ๐"
if cb.from_user.id not in [user_id, owner_id]:
return await cb.answer(
f"๐ ๐ผ๐ผ๐พ๐๐ ๐๐พ๐๐๐๐๐ผ๐๐พ๐ฝ ๐๐ ๐บ๐๐๐๐๐พ๐ ๐๐๐พ๐๐. Only {owner_name} and session client can delete this session!",
show_alert=True,
)
await db.rm_session(user_id)
await cb.answer("**๐ฒ๐๐ผ๐ผ๐พ๐๐!** ๐ฒ๐พ๐๐๐๐๐ ๐ฝ๐พ๐
๐พ๐๐พ๐ฝ ๐ฟ๐๐๐ ๐ฝ๐บ๐๐บ๐ป๐บ๐๐พ. \n__Restart the bot to apply changes.__", show_alert=True)
for i in all_sessions:
collection.append((i["user_id"], f"rm_session:{i['user_id']}"))
buttons = gen_inline_keyboard(collection, 2)
buttons.append([InlineKeyboardButton("Cancel โ", "auth_close")])
await cb.message.edit_reply_markup(InlineKeyboardMarkup(buttons))
@hellbot.bot.on_message(filters.regex(r"List ๐") & Config.AUTH_USERS & filters.private)
async def list_sessions(_, message: Message):
all_sessions = await db.get_all_sessions()
if not all_sessions:
return await message.reply_text("๐ญ๐ ๐๐พ๐๐๐๐๐๐ ๐ฟ๐๐๐๐ฝ ๐๐ ๐ฝ๐บ๐๐บ๐ป๐บ๐๐พ.")
text = f"**{Symbols.cross_mark} ๐ซ๐๐๐ ๐๐ฟ ๐๐พ๐๐๐๐๐๐:**\n\n"
for i, session in enumerate(all_sessions):
text += f"[{'0' if i <= 9 else ''}{i+1}] {Symbols.bullet} **๐ด๐๐พ๐ ๐จ๐ฃ:** `{session['user_id']}`\n"
await message.reply_text(text)
@hellbot.bot.on_message(filters.regex(r"Home ๐ ") & filters.private & Config.AUTH_USERS)
async def go_home(_, message: Message):
await message.reply_text(
"**Home ๐ **",
reply_markup=ReplyKeyboardRemove(),
)
await message.reply_text(
START_MSG.format(message.from_user.mention),
disable_web_page_preview=True,
reply_markup=InlineKeyboardMarkup(start_button()),
)
BotHelp("Sessions").add(
"session", "This command is packed with tools to manage userbot sessions."
).info(
"Session ๐"
).done()
|