Spaces:
Running
Running
Captain Ezio
commited on
Commit
·
d9f5db7
1
Parent(s):
66e0581
Bug fixes
Browse files- Powers/plugins/admin.py +1 -1
- Powers/plugins/birthday.py +15 -5
- Powers/plugins/info.py +57 -26
- Powers/plugins/locks.py +22 -20
- Powers/plugins/scheduled_jobs.py +3 -0
- Powers/utils/custom_filters.py +1 -1
- Powers/utils/web_scrapper.py +2 -6
Powers/plugins/admin.py
CHANGED
@@ -16,7 +16,7 @@ from Powers.bot_class import Gojo
|
|
16 |
from Powers.database.approve_db import Approve
|
17 |
from Powers.database.reporting_db import Reporting
|
18 |
from Powers.supports import get_support_staff
|
19 |
-
from Powers.utils.caching import admin_cache_reload
|
20 |
from Powers.utils.custom_filters import admin_filter, command, promote_filter
|
21 |
from Powers.utils.extract_user import extract_user
|
22 |
from Powers.utils.parser import mention_html
|
|
|
16 |
from Powers.database.approve_db import Approve
|
17 |
from Powers.database.reporting_db import Reporting
|
18 |
from Powers.supports import get_support_staff
|
19 |
+
from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
|
20 |
from Powers.utils.custom_filters import admin_filter, command, promote_filter
|
21 |
from Powers.utils.extract_user import extract_user
|
22 |
from Powers.utils.parser import mention_html
|
Powers/plugins/birthday.py
CHANGED
@@ -30,11 +30,11 @@ async def remember_me(c: Gojo, m: Message):
|
|
30 |
splited = m.text.split()
|
31 |
if len(splited) == 1:
|
32 |
await m.reply_text(
|
33 |
-
"**USAGE**:\n/remember [username or user id or reply to user] [DOB]\nDOB should be in format of dd/mm/yyyy\nYear is optional it is not necessary to pass it")
|
34 |
return
|
35 |
if len(splited) != 2 and m.reply_to_message:
|
36 |
await m.reply_text(
|
37 |
-
"**USAGE**:\n/remember [username or user id or reply to user] [DOB]\nDOB should be in format of dd/mm/yyyy\nYear is optional it is not necessary to pass it")
|
38 |
return
|
39 |
DOB = splited[1] if len(splited) == 2 else splited[2]
|
40 |
if len(splited) == 2 and m.reply_to_message:
|
@@ -65,7 +65,7 @@ async def remember_me(c: Gojo, m: Message):
|
|
65 |
|
66 |
data = {"user_id": user, "dob": DOB, "is_year": is_year}
|
67 |
try:
|
68 |
-
if
|
69 |
await m.reply_text("User is already in my database")
|
70 |
return
|
71 |
except Exception as e:
|
@@ -90,7 +90,7 @@ async def who_are_you_again(c: Gojo, m: Message):
|
|
90 |
return
|
91 |
user = m.from_user.id
|
92 |
try:
|
93 |
-
if
|
94 |
bday_info.delete_one({"user_id": user})
|
95 |
await m.reply_text("Removed your birthday")
|
96 |
else:
|
@@ -128,10 +128,18 @@ async def who_is_next(c: Gojo, m: Message):
|
|
128 |
return
|
129 |
txt = "🎊 Upcomming Birthdays Are 🎊\n"
|
130 |
for i in users:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
DOB = give_date(i["dob"])
|
132 |
dete = date(curr.year, DOB.month, DOB.day)
|
133 |
leff = (dete - curr).days
|
134 |
-
txt += f"
|
135 |
txt += "\n\nYou can use /info [user id] to get info about the user"
|
136 |
await xx.delete()
|
137 |
await m.reply_text(txt)
|
@@ -151,6 +159,8 @@ async def cant_recall_it(c: Gojo, m: Message):
|
|
151 |
try:
|
152 |
result = bday_info.find_one({"user_id": user})
|
153 |
if not result:
|
|
|
|
|
154 |
await m.reply_text("User is not in my database")
|
155 |
return
|
156 |
except Exception as e:
|
|
|
30 |
splited = m.text.split()
|
31 |
if len(splited) == 1:
|
32 |
await m.reply_text(
|
33 |
+
"**USAGE**:\n/remember [username or user id or reply to user] [DOB]\nDOB should be in format of dd/mm/yyyy\nYear is optional it is not necessary to pass it\nIf not replied to user then register the birthday of the one who have given the command")
|
34 |
return
|
35 |
if len(splited) != 2 and m.reply_to_message:
|
36 |
await m.reply_text(
|
37 |
+
"**USAGE**:\n/remember [username or user id or reply to user] [DOB]\nDOB should be in format of dd/mm/yyyy\nYear is optional it is not necessary to pass it\nIf not replied to user then register the birthday of the one who have given the command")
|
38 |
return
|
39 |
DOB = splited[1] if len(splited) == 2 else splited[2]
|
40 |
if len(splited) == 2 and m.reply_to_message:
|
|
|
65 |
|
66 |
data = {"user_id": user, "dob": DOB, "is_year": is_year}
|
67 |
try:
|
68 |
+
if bday_info.find_one({"user_id": user}):
|
69 |
await m.reply_text("User is already in my database")
|
70 |
return
|
71 |
except Exception as e:
|
|
|
90 |
return
|
91 |
user = m.from_user.id
|
92 |
try:
|
93 |
+
if bday_info.find_one({"user_id": user}):
|
94 |
bday_info.delete_one({"user_id": user})
|
95 |
await m.reply_text("Removed your birthday")
|
96 |
else:
|
|
|
128 |
return
|
129 |
txt = "🎊 Upcomming Birthdays Are 🎊\n"
|
130 |
for i in users:
|
131 |
+
try:
|
132 |
+
user = await c.get_users(i["user_id"])
|
133 |
+
if user.is_deleted:
|
134 |
+
bday_info.delete_one({"user_id": i["user_id"]})
|
135 |
+
continue
|
136 |
+
name = user.full_name
|
137 |
+
except:
|
138 |
+
name = i["user_id"]
|
139 |
DOB = give_date(i["dob"])
|
140 |
dete = date(curr.year, DOB.month, DOB.day)
|
141 |
leff = (dete - curr).days
|
142 |
+
txt += f"{name} : {leff} days left\n"
|
143 |
txt += "\n\nYou can use /info [user id] to get info about the user"
|
144 |
await xx.delete()
|
145 |
await m.reply_text(txt)
|
|
|
159 |
try:
|
160 |
result = bday_info.find_one({"user_id": user})
|
161 |
if not result:
|
162 |
+
if not m.reply_to_message:
|
163 |
+
await m.reply_text("You are not registered in my database\nUse `/remember` to register your birth day so I can wish you")
|
164 |
await m.reply_text("User is not in my database")
|
165 |
return
|
166 |
except Exception as e:
|
Powers/plugins/info.py
CHANGED
@@ -7,11 +7,14 @@ from pyrogram import enums
|
|
7 |
from pyrogram.errors import EntityBoundsInvalid, MediaCaptionTooLong, RPCError
|
8 |
from pyrogram.raw.functions.channels import GetFullChannel
|
9 |
from pyrogram.raw.functions.users import GetFullUser
|
|
|
10 |
from pyrogram.types import Message
|
11 |
|
12 |
-
from Powers import LOGGER, OWNER_ID
|
13 |
from Powers.bot_class import Gojo
|
14 |
from Powers.database.antispam_db import GBan
|
|
|
|
|
15 |
from Powers.supports import get_support_staff
|
16 |
from Powers.utils.custom_filters import command
|
17 |
from Powers.utils.extract_user import extract_user
|
@@ -57,11 +60,18 @@ async def count(c: Gojo, chat):
|
|
57 |
|
58 |
|
59 |
async def user_info(c: Gojo, user, already=False):
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
|
|
|
65 |
gbanned, reason_gban = gban_db.get_gban(user.id)
|
66 |
if gbanned:
|
67 |
gban = True
|
@@ -71,24 +81,28 @@ async def user_info(c: Gojo, user, already=False):
|
|
71 |
reason = "User is not gbanned"
|
72 |
|
73 |
user_id = user.id
|
74 |
-
|
75 |
-
about = "NA"
|
76 |
-
try:
|
77 |
-
ll = await c.invoke(
|
78 |
-
GetFullUser(
|
79 |
-
id=userrr
|
80 |
-
)
|
81 |
-
)
|
82 |
-
about = ll.full_user.about
|
83 |
-
except Exception:
|
84 |
-
pass
|
85 |
SUPPORT_STAFF = get_support_staff()
|
86 |
username = user.username
|
87 |
-
|
88 |
-
last_name = user.last_name
|
89 |
-
mention = user.mention(f"{first_name}")
|
90 |
dc_id = user.dc_id
|
91 |
is_verified = user.is_verified
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
is_restricted = user.is_restricted
|
93 |
photo_id = user.photo.big_file_id if user.photo else None
|
94 |
is_support = user_id in SUPPORT_STAFF
|
@@ -136,26 +150,27 @@ async def user_info(c: Gojo, user, already=False):
|
|
136 |
<b><i><u>⚡️ Extracted User info From Telegram ⚡️</b></i></u>
|
137 |
|
138 |
<b>🆔 User ID</b>: <code>{user_id}</code>
|
139 |
-
<b>📎 Link To Profile</b>: <a href='tg://user?id={user_id}'>Click Here🚪</a>
|
140 |
<b>🫵 Mention</b>: {mention}
|
141 |
-
<b>🗣
|
142 |
-
<b>🔅 Second Name</b>: <code>{last_name}</code>
|
143 |
<b>🔍 Username</b>: {("@" + username) if username else "NA"}
|
144 |
-
<b>✍️ Bio</b>: `{about}
|
145 |
-
|
|
|
|
|
|
|
146 |
if is_support:
|
147 |
caption += f"<b>🥷 Support user type</b>: <code>{omp}</code>\n<b>💣 Gbanned</b>: {gban}\n"
|
148 |
else:
|
149 |
caption += f"<b>💣 Gbanned</b>: {gban}\n"
|
150 |
|
151 |
if gban:
|
152 |
-
caption += f"<b>☠️ Gban reason</b>: <code>{reason}</code
|
153 |
caption += f"""
|
154 |
<b>🌐 DC ID</b>: {dc_id}
|
155 |
<b>✋ RESTRICTED</b>: {is_restricted}
|
156 |
<b>✅ VERIFIED</b>: {is_verified}
|
157 |
<b>❌ FAKE</b> : {is_fake}
|
158 |
-
<b>⚠️ SCAM</b> : {is_scam}
|
159 |
<b>🤖 BOT</b>: {is_bot}
|
160 |
<b>👀 Last seen</b>: <code>{last_date}</code>
|
161 |
"""
|
@@ -258,6 +273,22 @@ async def info_func(c: Gojo, message: Message):
|
|
258 |
LOGGER.error(e)
|
259 |
LOGGER.error(format_exc())
|
260 |
return await m.edit(str(e))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
261 |
|
262 |
if not photo_id:
|
263 |
await m.delete()
|
|
|
7 |
from pyrogram.errors import EntityBoundsInvalid, MediaCaptionTooLong, RPCError
|
8 |
from pyrogram.raw.functions.channels import GetFullChannel
|
9 |
from pyrogram.raw.functions.users import GetFullUser
|
10 |
+
from pyrogram.raw.types import Channel, UserFull, users
|
11 |
from pyrogram.types import Message
|
12 |
|
13 |
+
from Powers import BDB_URI, LOGGER, OWNER_ID
|
14 |
from Powers.bot_class import Gojo
|
15 |
from Powers.database.antispam_db import GBan
|
16 |
+
from Powers.database.approve_db import Approve
|
17 |
+
from Powers.plugins import bday_info
|
18 |
from Powers.supports import get_support_staff
|
19 |
from Powers.utils.custom_filters import command
|
20 |
from Powers.utils.extract_user import extract_user
|
|
|
60 |
|
61 |
|
62 |
async def user_info(c: Gojo, user, already=False):
|
63 |
+
user_all: users.UserFull = await c.invoke(
|
64 |
+
GetFullUser(
|
65 |
+
id=await c.resolve_peer(user)
|
66 |
+
)
|
67 |
+
)
|
68 |
+
user = await c.get_users(user)
|
69 |
+
full_user: UserFull = user_all.full_user
|
70 |
+
channel: Channel = user_all.chats
|
71 |
+
if user.is_deleted:
|
72 |
+
return "Deleted account", None
|
73 |
|
74 |
+
|
75 |
gbanned, reason_gban = gban_db.get_gban(user.id)
|
76 |
if gbanned:
|
77 |
gban = True
|
|
|
81 |
reason = "User is not gbanned"
|
82 |
|
83 |
user_id = user.id
|
84 |
+
about = full_user.about
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
SUPPORT_STAFF = get_support_staff()
|
86 |
username = user.username
|
87 |
+
full_name = user.full_name
|
|
|
|
|
88 |
dc_id = user.dc_id
|
89 |
is_verified = user.is_verified
|
90 |
+
mention = user.mention
|
91 |
+
dob = False
|
92 |
+
if dob := full_user.birthday:
|
93 |
+
dob = datetime(int(dob.year), int(dob.month), int(dob.day)).strftime("%d %B %Y")
|
94 |
+
else:
|
95 |
+
if BDB_URI:
|
96 |
+
try:
|
97 |
+
if result := bday_info.find_one({"user_id": user}):
|
98 |
+
u_dob = datetime.strptime(result["dob"], "%d/%m/%Y")
|
99 |
+
day = u_dob.day
|
100 |
+
formatted = u_dob.strftime("%B %Y")
|
101 |
+
suffix = {1: 'st', 2: 'nd', 3: 'rd'}.get(day % 10, 'th')
|
102 |
+
dob = f"{day}{suffix} {formatted}"
|
103 |
+
except:
|
104 |
+
pass
|
105 |
+
|
106 |
is_restricted = user.is_restricted
|
107 |
photo_id = user.photo.big_file_id if user.photo else None
|
108 |
is_support = user_id in SUPPORT_STAFF
|
|
|
150 |
<b><i><u>⚡️ Extracted User info From Telegram ⚡️</b></i></u>
|
151 |
|
152 |
<b>🆔 User ID</b>: <code>{user_id}</code>
|
|
|
153 |
<b>🫵 Mention</b>: {mention}
|
154 |
+
<b>🗣 Full Name</b>: <code>{full_name}</code>
|
|
|
155 |
<b>🔍 Username</b>: {("@" + username) if username else "NA"}
|
156 |
+
<b>✍️ Bio</b>: `{about}`\n"""
|
157 |
+
if dob:
|
158 |
+
caption += f"<b>🎂 Birthday<b>: {dob}\n<b>🧑💻 Support</b>: {is_support}\n"
|
159 |
+
else:
|
160 |
+
caption += f"<b>🧑💻 Support</b>: {is_support}\n"
|
161 |
if is_support:
|
162 |
caption += f"<b>🥷 Support user type</b>: <code>{omp}</code>\n<b>💣 Gbanned</b>: {gban}\n"
|
163 |
else:
|
164 |
caption += f"<b>💣 Gbanned</b>: {gban}\n"
|
165 |
|
166 |
if gban:
|
167 |
+
caption += f"<b>☠️ Gban reason</b>: <code>{reason}</code>"
|
168 |
caption += f"""
|
169 |
<b>🌐 DC ID</b>: {dc_id}
|
170 |
<b>✋ RESTRICTED</b>: {is_restricted}
|
171 |
<b>✅ VERIFIED</b>: {is_verified}
|
172 |
<b>❌ FAKE</b> : {is_fake}
|
173 |
+
<b>⚠️ SCAM</b> : {is_scam}
|
174 |
<b>🤖 BOT</b>: {is_bot}
|
175 |
<b>👀 Last seen</b>: <code>{last_date}</code>
|
176 |
"""
|
|
|
273 |
LOGGER.error(e)
|
274 |
LOGGER.error(format_exc())
|
275 |
return await m.edit(str(e))
|
276 |
+
|
277 |
+
|
278 |
+
status = False
|
279 |
+
if m.chat.id != m.from_user.id:
|
280 |
+
try:
|
281 |
+
if status:= await m.chat.get_member(user):
|
282 |
+
status = str(status.status.value).capitalize()
|
283 |
+
except:
|
284 |
+
pass
|
285 |
+
if not status:
|
286 |
+
approved_users = Approve(m.chat.id).list_approved()
|
287 |
+
if user in approved_users:
|
288 |
+
status = "Approved"
|
289 |
+
|
290 |
+
if status:
|
291 |
+
info_caption += f"<b>👥 Status </b>: {status}"
|
292 |
|
293 |
if not photo_id:
|
294 |
await m.delete()
|
Powers/plugins/locks.py
CHANGED
@@ -5,7 +5,8 @@ from traceback import format_exc
|
|
5 |
from pyrogram import filters
|
6 |
from pyrogram.enums import MessageEntityType as MET
|
7 |
from pyrogram.enums import MessageServiceType as MST
|
8 |
-
from pyrogram.errors import ChatAdminRequired, ChatNotModified, RPCError
|
|
|
9 |
from pyrogram.types import CallbackQuery, ChatPermissions, Message
|
10 |
|
11 |
from Powers import LOGGER
|
@@ -495,6 +496,8 @@ async def servicess(c: Gojo, m: Message):
|
|
495 |
timee = datetime.now() + timedelta(minutes=5)
|
496 |
await m.chat.ban_member(i.id, until_date=timee)
|
497 |
sleep(1)
|
|
|
|
|
498 |
except Exception as ef:
|
499 |
LOGGER.error(ef)
|
500 |
LOGGER.error(format_exc())
|
@@ -551,6 +554,23 @@ async def prevent_approved(m: Message):
|
|
551 |
return
|
552 |
|
553 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
554 |
__PLUGIN__ = "locks"
|
555 |
|
556 |
__alt_name__ = ["grouplock", "lock", "grouplocks"]
|
@@ -573,22 +593,4 @@ Allows you to lock and unlock permission types in the chat.
|
|
573 |
• /locktypes: Check available lock types!
|
574 |
|
575 |
**Example:**
|
576 |
-
`/lock media`: this locks all the media messages in the chat."""
|
577 |
-
|
578 |
-
|
579 |
-
@Gojo.on_callback_query(filters.regex("^LOCK_TYPES"))
|
580 |
-
async def lock_types_callback(c: Gojo, q: CallbackQuery):
|
581 |
-
data = q.data
|
582 |
-
|
583 |
-
if data == "LOCK_TYPES":
|
584 |
-
kb = ikb([[("Back", "LOCK_TYPES_back")]])
|
585 |
-
await q.edit_message_caption(
|
586 |
-
l_t,
|
587 |
-
reply_markup=kb
|
588 |
-
)
|
589 |
-
else:
|
590 |
-
kb = ikb([[("Lock Types", "LOCK_TYPES")]])
|
591 |
-
await q.edit_message_caption(
|
592 |
-
__HELP__,
|
593 |
-
reply_markup=kb
|
594 |
-
)
|
|
|
5 |
from pyrogram import filters
|
6 |
from pyrogram.enums import MessageEntityType as MET
|
7 |
from pyrogram.enums import MessageServiceType as MST
|
8 |
+
from pyrogram.errors import (ChatAdminRequired, ChatNotModified, RPCError,
|
9 |
+
UserAdminInvalid)
|
10 |
from pyrogram.types import CallbackQuery, ChatPermissions, Message
|
11 |
|
12 |
from Powers import LOGGER
|
|
|
496 |
timee = datetime.now() + timedelta(minutes=5)
|
497 |
await m.chat.ban_member(i.id, until_date=timee)
|
498 |
sleep(1)
|
499 |
+
except UserAdminInvalid:
|
500 |
+
continue
|
501 |
except Exception as ef:
|
502 |
LOGGER.error(ef)
|
503 |
LOGGER.error(format_exc())
|
|
|
554 |
return
|
555 |
|
556 |
|
557 |
+
@Gojo.on_callback_query(filters.regex("^LOCK_TYPES"))
|
558 |
+
async def lock_types_callback(c: Gojo, q: CallbackQuery):
|
559 |
+
data = q.data
|
560 |
+
|
561 |
+
if data == "LOCK_TYPES":
|
562 |
+
kb = ikb([[("Back", "LOCK_TYPES_back")]])
|
563 |
+
await q.edit_message_caption(
|
564 |
+
l_t,
|
565 |
+
reply_markup=kb
|
566 |
+
)
|
567 |
+
else:
|
568 |
+
kb = ikb([[("Lock Types", "LOCK_TYPES")]])
|
569 |
+
await q.edit_message_caption(
|
570 |
+
__HELP__,
|
571 |
+
reply_markup=kb
|
572 |
+
)
|
573 |
+
|
574 |
__PLUGIN__ = "locks"
|
575 |
|
576 |
__alt_name__ = ["grouplock", "lock", "grouplocks"]
|
|
|
593 |
• /locktypes: Check available lock types!
|
594 |
|
595 |
**Example:**
|
596 |
+
`/lock media`: this locks all the media messages in the chat."""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Powers/plugins/scheduled_jobs.py
CHANGED
@@ -47,6 +47,9 @@ async def send_wishish(JJK: Client):
|
|
47 |
suffix.get((agee % 10), "th")
|
48 |
agee = f"{agee}{suf}"
|
49 |
U = await JJK.get_chat_member(chat_id=j, user_id=i["user_id"])
|
|
|
|
|
|
|
50 |
wish = choice(birthday_wish)
|
51 |
if U.status in [ChatMemberStatus.MEMBER, ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER]:
|
52 |
xXx = await JJK.send_message(j, f"Happy {agee} birthday {U.user.mention}🥳\n{wish}")
|
|
|
47 |
suffix.get((agee % 10), "th")
|
48 |
agee = f"{agee}{suf}"
|
49 |
U = await JJK.get_chat_member(chat_id=j, user_id=i["user_id"])
|
50 |
+
if U.user.is_deleted:
|
51 |
+
bday_info.delete_one({"user_id": i["user_id"]})
|
52 |
+
continue
|
53 |
wish = choice(birthday_wish)
|
54 |
if U.status in [ChatMemberStatus.MEMBER, ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER]:
|
55 |
xXx = await JJK.send_message(j, f"Happy {agee} birthday {U.user.mention}🥳\n{wish}")
|
Powers/utils/custom_filters.py
CHANGED
@@ -42,7 +42,7 @@ def command(
|
|
42 |
if m and not m.from_user and not m.chat.is_admin:
|
43 |
return False
|
44 |
|
45 |
-
if m.from_user.is_bot:
|
46 |
return False
|
47 |
|
48 |
if any([m.forward_from_chat, m.forward_from]):
|
|
|
42 |
if m and not m.from_user and not m.chat.is_admin:
|
43 |
return False
|
44 |
|
45 |
+
if m.from_user and m.from_user.is_bot:
|
46 |
return False
|
47 |
|
48 |
if any([m.forward_from_chat, m.forward_from]):
|
Powers/utils/web_scrapper.py
CHANGED
@@ -209,8 +209,6 @@ class SCRAP_DATA:
|
|
209 |
|
210 |
# else:
|
211 |
# return {}
|
212 |
-
curr_timeout = 20
|
213 |
-
timeout = httpx.Timeout(curr_timeout)
|
214 |
|
215 |
class INSTAGRAM:
|
216 |
def __init__(self, url):
|
@@ -220,15 +218,13 @@ class INSTAGRAM:
|
|
220 |
return bool((re.compile(r"^https?://(?:www\.)?instagram\.com/")).match(self.url))
|
221 |
|
222 |
def get_media(self):
|
223 |
-
global curr_timeout
|
224 |
try:
|
225 |
return httpx.post(
|
226 |
-
f"https://api.qewertyy.dev/downloaders/instagram?url={self.url}"
|
227 |
-
timeout=timeout
|
228 |
).json()
|
229 |
except httpx.ReadTimeout:
|
230 |
try:
|
231 |
-
curr_timeout
|
232 |
timeout = httpx.Timeout(curr_timeout)
|
233 |
return httpx.post(
|
234 |
f"https://api.qewertyy.dev/downloaders/instagram?url={self.url}",
|
|
|
209 |
|
210 |
# else:
|
211 |
# return {}
|
|
|
|
|
212 |
|
213 |
class INSTAGRAM:
|
214 |
def __init__(self, url):
|
|
|
218 |
return bool((re.compile(r"^https?://(?:www\.)?instagram\.com/")).match(self.url))
|
219 |
|
220 |
def get_media(self):
|
|
|
221 |
try:
|
222 |
return httpx.post(
|
223 |
+
f"https://api.qewertyy.dev/downloaders/instagram?url={self.url}"
|
|
|
224 |
).json()
|
225 |
except httpx.ReadTimeout:
|
226 |
try:
|
227 |
+
curr_timeout = 10
|
228 |
timeout = httpx.Timeout(curr_timeout)
|
229 |
return httpx.post(
|
230 |
f"https://api.qewertyy.dev/downloaders/instagram?url={self.url}",
|