iamgojoof6eyes commited on
Commit
c664d1d
·
1 Parent(s): 07a8062

Removed dependecy of HTTPx

Browse files
Powers/__init__.py CHANGED
@@ -60,6 +60,8 @@ LOGGER.info("Source Code: https://github.com/iamgojoof6eyes/Gojo_Satarou\n")
60
  BOT_TOKEN = Config.BOT_TOKEN
61
  API_ID = Config.API_ID
62
  API_HASH = Config.API_HASH
 
 
63
 
64
  # General Config
65
  MESSAGE_DUMP = Config.MESSAGE_DUMP
 
60
  BOT_TOKEN = Config.BOT_TOKEN
61
  API_ID = Config.API_ID
62
  API_HASH = Config.API_HASH
63
+ ARQ_API_URL = Config.ARQ_API_URL
64
+ ARQ_API_KEY = Config.ARQ_API_KEY
65
 
66
  # General Config
67
  MESSAGE_DUMP = Config.MESSAGE_DUMP
Powers/bot_class.py CHANGED
@@ -1,6 +1,9 @@
1
  from platform import python_version
2
  from threading import RLock
3
  from time import gmtime, strftime, time
 
 
 
4
 
5
  from pyrogram import Client, __version__
6
  from pyrogram.raw.all import layer
@@ -16,6 +19,8 @@ from Powers import (
16
  NO_LOAD,
17
  UPTIME,
18
  WORKERS,
 
 
19
  load_cmds,
20
  )
21
  from Powers.database import MongoDB
@@ -29,7 +34,9 @@ if MESSAGE_DUMP == -100 or not str(MESSAGE_DUMP).startswith("-100"):
29
  raise Exception(
30
  "Please enter a vaild Supergroup ID, A Supergroup ID starts with -100",
31
  )
32
-
 
 
33
 
34
  class Gojo(Client):
35
  """Starts the Pyrogram Client on the Bot Token when we do 'python3 -m Powers'"""
 
1
  from platform import python_version
2
  from threading import RLock
3
  from time import gmtime, strftime, time
4
+ from aiohttp import ClientSession
5
+ from Python_ARQ import ARQ
6
+ import asyncio
7
 
8
  from pyrogram import Client, __version__
9
  from pyrogram.raw.all import layer
 
19
  NO_LOAD,
20
  UPTIME,
21
  WORKERS,
22
+ ARQ_API_URL,
23
+ ARQ_API_KEY,
24
  load_cmds,
25
  )
26
  from Powers.database import MongoDB
 
34
  raise Exception(
35
  "Please enter a vaild Supergroup ID, A Supergroup ID starts with -100",
36
  )
37
+
38
+ aiohttpsession = ClientSession()
39
+ arq = ARQ(ARQ_API_URL, ARQ_API_KEY, aiohttpsession)
40
 
41
  class Gojo(Client):
42
  """Starts the Pyrogram Client on the Bot Token when we do 'python3 -m Powers'"""
Powers/plugins/admin.py CHANGED
@@ -555,21 +555,21 @@ __alt_name__ = [
555
  __HELP__ = """Lazy to promote or demote someone for admins? Want to see basic information about chat?
556
  All stuff about chatroom such as admin lists, pinning or grabbing an invite link can be done easily using the bot.
557
  **User Commands:**
558
- × /adminlist: List all the admins in the Group.
559
  **Admin only:**
560
- × /invitelink: Gets chat invitelink.
561
- × /promote: Promotes the user replied to or tagged (supports with title).
562
- × /fullpromote: Fully Promotes the user replied to or tagged (supports with title).
563
- × /demote: Demotes the user replied to or tagged.
564
- × /admincache: Reloads the List of all the admins in the Group.
565
- × /zombies: Bans all the deleted accounts. (owner only)
566
- × /title: sets a custom title for an admin that the bot promoted.
567
- × /disable <commandname>: Stop users from using "commandname" in this group.
568
- × /enable <item name>: Allow users from using "commandname" in this group.
569
- × /disableable: List all disableable commands.
570
- × /disabledel <yes/off>: Delete disabled commands when used by non-admins.
571
- × /disabled: List the disabled commands in this chat.
572
- × /enableall: enable all disabled commands.
573
 
574
  **Example:**
575
  `/promote @username`: this promotes a user to admin."""
 
555
  __HELP__ = """Lazy to promote or demote someone for admins? Want to see basic information about chat?
556
  All stuff about chatroom such as admin lists, pinning or grabbing an invite link can be done easily using the bot.
557
  **User Commands:**
558
+ * /adminlist: List all the admins in the Group.
559
  **Admin only:**
560
+ * /invitelink: Gets chat invitelink.
561
+ * /promote: Promotes the user replied to or tagged (supports with title).
562
+ * /fullpromote: Fully Promotes the user replied to or tagged (supports with title).
563
+ * /demote: Demotes the user replied to or tagged.
564
+ * /admincache: Reloads the List of all the admins in the Group.
565
+ * /zombies: Bans all the deleted accounts. (owner only)
566
+ * /title: sets a custom title for an admin that the bot promoted.
567
+ * /disable <commandname>: Stop users from using "commandname" in this group.
568
+ * /enable <item name>: Allow users from using "commandname" in this group.
569
+ * /disableable: List all disableable commands.
570
+ * /disabledel <yes/off>: Delete disabled commands when used by non-admins.
571
+ * /disabled: List the disabled commands in this chat.
572
+ * /enableall: enable all disabled commands.
573
 
574
  **Example:**
575
  `/promote @username`: this promotes a user to admin."""
Powers/plugins/approve.py CHANGED
@@ -238,10 +238,10 @@ __HELP__ = """Sometimes, you might trust a user not to send unwanted content.
238
  Maybe not enough to make them admin, but you might be ok with locks, blacklists, and antiflood not applying to them.
239
  That's what approvals are for - approve trustworthy users to allow them to send stuff without restrictions!
240
  **Admin commands:**
241
- × /approval: Check a user's approval status in this chat.
242
- × /approve: Approve of a user. Locks, blacklists, and antiflood won't apply to them anymore.
243
- × /unapprove: Unapprove of a user. They will now be subject to blocklists.
244
- × /approved: List all approved users.
245
- × /unapproveall: Unapprove *ALL* users in a chat. This cannot be undone!
246
  **Example:**
247
  `/approve @username`: this approves a user in the chat."""
 
238
  Maybe not enough to make them admin, but you might be ok with locks, blacklists, and antiflood not applying to them.
239
  That's what approvals are for - approve trustworthy users to allow them to send stuff without restrictions!
240
  **Admin commands:**
241
+ * /approval: Check a user's approval status in this chat.
242
+ * /approve: Approve of a user. Locks, blacklists, and antiflood won't apply to them anymore.
243
+ * /unapprove: Unapprove of a user. They will now be subject to blocklists.
244
+ * /approved: List all approved users.
245
+ * /unapproveall: Unapprove *ALL* users in a chat. This cannot be undone!
246
  **Example:**
247
  `/approve @username`: this approves a user in the chat."""
Powers/plugins/bans.py CHANGED
@@ -884,15 +884,15 @@ __HELP__ = """Someone annoying entered your group?
884
  Want to ban/restriction him/her?
885
  This is the plugin for you, easily kick, ban and unban members in a group.
886
  **Admin only:**
887
- × /kick: Kick the user replied or tagged.
888
- × /skick: Kick the user replied or tagged and delete your messsage.
889
- × /dkick: Kick the user replied and delete their message.
890
- × /ban: Bans the user replied to or tagged.
891
- × /sban: Bans the user replied or tagged and delete your messsage.
892
- × /dban: Bans the user replied and delete their message.
893
- × /tban <userhandle> x(m/h/d): Bans a user for x time. (via handle, or reply). m = minutes, h = hours, d = days.
894
- × /stban <userhandle> x(m/h/d): Silently bans a user for x time. (via handle, or reply). m = minutes, h = hours, d = days.
895
- × /dtban <userhandle> x(m/h/d): Silently bans a user for x time and delete the replied message. (via reply). m = minutes, h = hours, d = days.
896
- × /unban: Unbans the user replied to or tagged.
897
  **Example:**
898
  `/ban @username`: this bans a user in the chat."""
 
884
  Want to ban/restriction him/her?
885
  This is the plugin for you, easily kick, ban and unban members in a group.
886
  **Admin only:**
887
+ * /kick: Kick the user replied or tagged.
888
+ * /skick: Kick the user replied or tagged and delete your messsage.
889
+ * /dkick: Kick the user replied and delete their message.
890
+ * /ban: Bans the user replied to or tagged.
891
+ * /sban: Bans the user replied or tagged and delete your messsage.
892
+ * /dban: Bans the user replied and delete their message.
893
+ * /tban <userhandle> x(m/h/d): Bans a user for x time. (via handle, or reply). m = minutes, h = hours, d = days.
894
+ * /stban <userhandle> x(m/h/d): Silently bans a user for x time. (via handle, or reply). m = minutes, h = hours, d = days.
895
+ * /dtban <userhandle> x(m/h/d): Silently bans a user for x time and delete the replied message. (via reply). m = minutes, h = hours, d = days.
896
+ * /unban: Unbans the user replied to or tagged.
897
  **Example:**
898
  `/ban @username`: this bans a user in the chat."""
Powers/plugins/blacklist.py CHANGED
@@ -213,14 +213,14 @@ __HELP__ = """Want to restrict certain words or sentences in your group?
213
  Blacklists are used to stop certain triggers from being said in a group. Any time the trigger is mentioned, that message will immediately be deleted.
214
  A good combo is sometimes to pair this up with warn filters!
215
  **NOTE:** blacklists do not affect group admins.
216
- × /blacklist: View the current blacklisted words.
217
  **Admin only:**
218
- × /addblacklist `<triggers>`: Add a trigger to the blacklist. Each line is considered one trigger, so using different lines will allow you to add multiple triggers.
219
- × /unblacklist `<triggers>`: Remove triggers from the blacklist. Same newline logic applies here, so you can remove multiple triggers at once.
220
- × /blaction `<action>`: This action will occur when user uses a blacklist word. Choose from - 'kick', 'ban', 'mute', 'warn'.
221
  Default is 'none', which will delete the users message on typing a blacklist word.
222
  **Owner Only**
223
- × /rmallblacklist: Removes all the blacklists from the current chat.
224
  **Note:** Can only add or remove one blacklist at a time!
225
  **Example:**
226
  `/addblacklist hello`: this adds the word 'hello' as blacklist in the chat."""
 
213
  Blacklists are used to stop certain triggers from being said in a group. Any time the trigger is mentioned, that message will immediately be deleted.
214
  A good combo is sometimes to pair this up with warn filters!
215
  **NOTE:** blacklists do not affect group admins.
216
+ * /blacklist: View the current blacklisted words.
217
  **Admin only:**
218
+ * /addblacklist `<triggers>`: Add a trigger to the blacklist. Each line is considered one trigger, so using different lines will allow you to add multiple triggers.
219
+ * /unblacklist `<triggers>`: Remove triggers from the blacklist. Same newline logic applies here, so you can remove multiple triggers at once.
220
+ * /blaction `<action>`: This action will occur when user uses a blacklist word. Choose from - 'kick', 'ban', 'mute', 'warn'.
221
  Default is 'none', which will delete the users message on typing a blacklist word.
222
  **Owner Only**
223
+ * /rmallblacklist: Removes all the blacklists from the current chat.
224
  **Note:** Can only add or remove one blacklist at a time!
225
  **Example:**
226
  `/addblacklist hello`: this adds the word 'hello' as blacklist in the chat."""
Powers/plugins/dev.py CHANGED
@@ -21,7 +21,7 @@ from Powers.bot_class import Gojo
21
  from Powers.database.chats_db import Chats
22
  from Powers.utils.clean_file import remove_markdown_and_html
23
  from Powers.utils.custom_filters import command
24
- from Powers.utils.http_helper import HTTPx
25
  from Powers.utils.kbhelpers import ikb
26
  from Powers.utils.parser import mention_markdown
27
  from Powers.vars import Config
@@ -55,28 +55,6 @@ async def send_log(c: Gojo, m: Message):
55
  return
56
 
57
 
58
- @Gojo.on_message(command("ginfo", sudo_cmd=True))
59
- async def group_info(c: Gojo, m: Message):
60
- if len(m.text.split()) != 2:
61
- await m.reply_text(
62
- f"It works like this: <code>{Config.PREFIX_HANDLER} chat_id</code>",
63
- )
64
- return
65
-
66
- chat_id = m.text.split(None, 1)[1]
67
-
68
- replymsg = await m.reply_text("Fetching info about group...!")
69
- grp_data = await c.get_chat(chat_id)
70
- msg = (
71
- f"Information for group: {chat_id}\n\n"
72
- f"Group Name: {grp_data['title']}\n"
73
- f"Members Count: {grp_data['members_count']}\n"
74
- f"Type: {grp_data['type']}\n"
75
- f"Group ID: {grp_data['id']}"
76
- )
77
- await replymsg.edit_text(msg)
78
- return
79
-
80
  @Gojo.on_message(command("neofetch", dev_cmd=True))
81
  async def neofetch_stats(_, m: Message):
82
  cmd = "neofetch --stdout"
@@ -211,21 +189,6 @@ async def execution(_, m: Message):
211
  return
212
 
213
 
214
- @Gojo.on_message(command("ip", dev_cmd=True))
215
- async def public_ip(c: Gojo, m: Message):
216
- ip = await HTTPx.get("https://api.ipify.org")
217
- await c.send_message(
218
- MESSAGE_DUMP,
219
- f"#IP\n\n**User:** {(await mention_markdown(m.from_user.first_name, m.from_user.id))}",
220
- )
221
- await m.reply_text(
222
- text=f"""<b>Bot IP Address:</b>
223
- <code>{ip.text}</code>""",
224
- quote=True,
225
- )
226
- return
227
-
228
-
229
  @Gojo.on_message(command("chatlist", dev_cmd=True))
230
  async def chats(c: Gojo, m: Message):
231
  exmsg = await m.reply_text(text="Exporting Charlist...")
 
21
  from Powers.database.chats_db import Chats
22
  from Powers.utils.clean_file import remove_markdown_and_html
23
  from Powers.utils.custom_filters import command
24
+ from Powers.utils.http_helper import *
25
  from Powers.utils.kbhelpers import ikb
26
  from Powers.utils.parser import mention_markdown
27
  from Powers.vars import Config
 
55
  return
56
 
57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  @Gojo.on_message(command("neofetch", dev_cmd=True))
59
  async def neofetch_stats(_, m: Message):
60
  cmd = "neofetch --stdout"
 
189
  return
190
 
191
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
  @Gojo.on_message(command("chatlist", dev_cmd=True))
193
  async def chats(c: Gojo, m: Message):
194
  exmsg = await m.reply_text(text="Exporting Charlist...")
Powers/plugins/fun.py CHANGED
@@ -209,15 +209,15 @@ _DISABLE_CMDS_ = [
209
  "shrug",
210
  ]
211
 
212
- __HELP__ = """× /runs: reply a random string from an array of replies.
213
- × /slap: slap a user, or get slapped if not a reply.
214
- × /insult: to insult a user, or get insulted if not a reply
215
- × /shrug : get shrug XD.
216
- × /decide : Randomly answers yes/no/maybe
217
- × /toss : Tosses A coin
218
- × /yes : check urself :V
219
- × /no : check urself :V
220
- × /bluetext : check urself :V
221
- × /roll : Roll a dice.
222
- × /react : Random Reaction
223
- × /shout `<keyword>`: write anything you want to give loud shout."""
 
209
  "shrug",
210
  ]
211
 
212
+ __HELP__ = """* /runs: reply a random string from an array of replies.
213
+ * /slap: slap a user, or get slapped if not a reply.
214
+ * /insult: to insult a user, or get insulted if not a reply
215
+ * /shrug : get shrug XD.
216
+ * /decide : Randomly answers yes/no/maybe
217
+ * /toss : Tosses A coin
218
+ * /yes : check urself :V
219
+ * /no : check urself :V
220
+ * /bluetext : check urself :V
221
+ * /roll : Roll a dice.
222
+ * /react : Random Reaction
223
+ * /shout `<keyword>`: write anything you want to give loud shout."""
Powers/plugins/greetings.py CHANGED
@@ -485,17 +485,17 @@ a) Currently it supports only text!
485
  b) Gojo must be an admin to greet and goodbye users.
486
 
487
  Admin Commands:
488
- × /setwelcome <reply> : Sets a custom welcome message.
489
- × /setgoodbye <reply> : Sets a custom goodbye message.
490
- × /resetwelcome : Resets to bot default welcome message.
491
- × /resetgoodbye : Resets to bot default goodbye message.
492
- × /welcome <on/off> | noformat : enable/disable | Shows the current welcome message | settings.
493
- × /goodbye <on/off> | noformat : enable/disable | Shows the current goodbye message | settings.
494
- × /cleanwelcome <on/off> : Shows or sets the current clean welcome settings.
495
- × /cleangoodbye <on/off> : Shows or sets the current clean goodbye settings.
496
 
497
  ── **Cleaner** ──:
498
- × /cleanservice <on/off> : Use it to clean all service messages automatically or to view current status.
499
 
500
  ── **Format** ──
501
  Check /markdownhelp for help related to formatting!"""
 
485
  b) Gojo must be an admin to greet and goodbye users.
486
 
487
  Admin Commands:
488
+ * /setwelcome <reply> : Sets a custom welcome message.
489
+ * /setgoodbye <reply> : Sets a custom goodbye message.
490
+ * /resetwelcome : Resets to bot default welcome message.
491
+ * /resetgoodbye : Resets to bot default goodbye message.
492
+ * /welcome <on/off> | noformat : enable/disable | Shows the current welcome message | settings.
493
+ * /goodbye <on/off> | noformat : enable/disable | Shows the current goodbye message | settings.
494
+ * /cleanwelcome <on/off> : Shows or sets the current clean welcome settings.
495
+ * /cleangoodbye <on/off> : Shows or sets the current clean goodbye settings.
496
 
497
  ── **Cleaner** ──:
498
+ * /cleanservice <on/off> : Use it to clean all service messages automatically or to view current status.
499
 
500
  ── **Format** ──
501
  Check /markdownhelp for help related to formatting!"""
Powers/plugins/locks.py CHANGED
@@ -331,10 +331,10 @@ __HELP__ = """ Use this to lock group permissions.
331
  Allows you to lock and unlock permission types in the chat.
332
 
333
  **Usage:**
334
- × /lock `<type>`: Lock Chat permission.
335
- × /unlock `<type>`: Unlock Chat permission.
336
- × /locks: View Chat permission.
337
- × /locktypes: Check available lock types!
338
 
339
  **Example:**
340
  `/lock media`: this locks all the media messages in the chat."""
 
331
  Allows you to lock and unlock permission types in the chat.
332
 
333
  **Usage:**
334
+ * /lock `<type>`: Lock Chat permission.
335
+ * /unlock `<type>`: Unlock Chat permission.
336
+ * /locks: View Chat permission.
337
+ * /locktypes: Check available lock types!
338
 
339
  **Example:**
340
  `/lock media`: this locks all the media messages in the chat."""
Powers/plugins/muting.py CHANGED
@@ -603,13 +603,13 @@ __HELP__ = """Want someone to keep quite for a while in the group?
603
  Mute plugin is here to help, mute or unmute any user easily!
604
 
605
  **Admin only:**
606
- × /mute: Mute the user replied to or mentioned.
607
- × /smute: silences a user without notifying. Can also be used as a reply, muting the replied to user.
608
- × /dmute: Mute a user by reply, and delete their message.
609
- × /tmute <userhandle> x(m/h/d): mutes a user for x time. (via handle, or reply). m = minutes, h = hours, d = days.
610
- × /stmute <userhandle> x(m/h/d): mutes a user for x time without notifying. (via handle, or reply). m = minutes, h = hours, d = days.
611
- × /dtmute <userhandle> x(m/h/d): Mute the replied user, and delete the replied message. (via reply). m = minutes, h = hours, d = days.
612
- × /unmute: Unmutes the user mentioned or replied to.
613
 
614
  **Example:**
615
  `/mute @username`; this mutes a user."""
 
603
  Mute plugin is here to help, mute or unmute any user easily!
604
 
605
  **Admin only:**
606
+ * /mute: Mute the user replied to or mentioned.
607
+ * /smute: silences a user without notifying. Can also be used as a reply, muting the replied to user.
608
+ * /dmute: Mute a user by reply, and delete their message.
609
+ * /tmute <userhandle> x(m/h/d): mutes a user for x time. (via handle, or reply). m = minutes, h = hours, d = days.
610
+ * /stmute <userhandle> x(m/h/d): mutes a user for x time without notifying. (via handle, or reply). m = minutes, h = hours, d = days.
611
+ * /dtmute <userhandle> x(m/h/d): Mute the replied user, and delete the replied message. (via reply). m = minutes, h = hours, d = days.
612
+ * /unmute: Unmutes the user mentioned or replied to.
613
 
614
  **Example:**
615
  `/mute @username`; this mutes a user."""
Powers/plugins/notes.py CHANGED
@@ -429,26 +429,26 @@ __HELP__ = """Save a note, get that, even you can delete that note.
429
  This note only avaiable for your whole group!
430
  Only admins can save and deletenotes, anyone can get them.
431
 
432
- × /save `<notename>` <`note content or reply to message>`
433
  Save a note, you can get or delete that later.
434
 
435
- × /get `<note>` or #<note>
436
  Get that note, if avaiable.
437
 
438
- × /get `<note>` noformat or /get `<note>` raw
439
  Get that note in raw format, so you can edit and update it.
440
 
441
- × /clear `<note>`
442
  Delete that note, if avaiable.
443
 
444
- × /clearall
445
  Clears all notes in the chat!
446
  **NOTE:** Can only be used by owner of chat!
447
 
448
- × /saved or /notes
449
  Get all your notes, if too much notes, please use this in your saved message instead!
450
 
451
- × /privatenotes `<on/yes/no/off>`: Whether to turn private rules on or off, prevents spam in chat when people use notes command.
452
 
453
  ── **Note Format** ──
454
  Check /markdownhelp for help related to formatting!"""
 
429
  This note only avaiable for your whole group!
430
  Only admins can save and deletenotes, anyone can get them.
431
 
432
+ * /save `<notename>` <`note content or reply to message>`
433
  Save a note, you can get or delete that later.
434
 
435
+ * /get `<note>` or #<note>
436
  Get that note, if avaiable.
437
 
438
+ * /get `<note>` noformat or /get `<note>` raw
439
  Get that note in raw format, so you can edit and update it.
440
 
441
+ * /clear `<note>`
442
  Delete that note, if avaiable.
443
 
444
+ * /clearall
445
  Clears all notes in the chat!
446
  **NOTE:** Can only be used by owner of chat!
447
 
448
+ * /saved or /notes
449
  Get all your notes, if too much notes, please use this in your saved message instead!
450
 
451
+ * /privatenotes `<on/yes/no/off>`: Whether to turn private rules on or off, prevents spam in chat when people use notes command.
452
 
453
  ── **Note Format** ──
454
  Check /markdownhelp for help related to formatting!"""
Powers/plugins/pin.py CHANGED
@@ -239,10 +239,10 @@ __alt_name__ = ["pin", "unpin"]
239
  __HELP__ = """Here you find find all help related to groups pins and how to manage them via me.
240
 
241
  **Admin Cmds:**
242
- × /pin: Silently pins the message replied to - add `loud`, `notify` or `alert` to give notificaton to users.
243
- × /unpin: Unpins the last pinned message.
244
- × /pinned: Gives the current pinned message of the chat.
245
- × /unpinall: Unpins all the pinned message in the current chat.
246
- × /antichannelpin `<on/off/yes/no>`: Toggle antichannelpin status. All the messages from linked channel will be unpinned if enabled!
247
- × /cleanlinked `<on/off/yes/no>`: Toggle cleanlinked status. All the messages from linked channel will be deleted if enabled!
248
- × /permapin `<text>`: Pin a custom messages via bot. This message can contain markdown, and can be used in replies to the media include additional buttons and text."""
 
239
  __HELP__ = """Here you find find all help related to groups pins and how to manage them via me.
240
 
241
  **Admin Cmds:**
242
+ * /pin: Silently pins the message replied to - add `loud`, `notify` or `alert` to give notificaton to users.
243
+ * /unpin: Unpins the last pinned message.
244
+ * /pinned: Gives the current pinned message of the chat.
245
+ * /unpinall: Unpins all the pinned message in the current chat.
246
+ * /antichannelpin `<on/off/yes/no>`: Toggle antichannelpin status. All the messages from linked channel will be unpinned if enabled!
247
+ * /cleanlinked `<on/off/yes/no>`: Toggle cleanlinked status. All the messages from linked channel will be deleted if enabled!
248
+ * /permapin `<text>`: Pin a custom messages via bot. This message can contain markdown, and can be used in replies to the media include additional buttons and text."""
Powers/plugins/purge.py CHANGED
@@ -117,6 +117,6 @@ __PLUGIN__ = "purges"
117
  __alt_name__ = ["purge", "del", "spurge"]
118
 
119
  __HELP__ = """Want to delete messages in you group?
120
- × /purge: Deletes messages upto replied message.
121
- × /spurge: Deletes messages upto replied message without a success message.
122
- × /del: Deletes a single message, used as a reply to message."""
 
117
  __alt_name__ = ["purge", "del", "spurge"]
118
 
119
  __HELP__ = """Want to delete messages in you group?
120
+ * /purge: Deletes messages upto replied message.
121
+ * /spurge: Deletes messages upto replied message without a success message.
122
+ * /del: Deletes a single message, used as a reply to message."""
Powers/plugins/report.py CHANGED
@@ -201,11 +201,11 @@ __PLUGIN__ = "reporting"
201
 
202
  __alt_name__ = ["reports", "report"]
203
 
204
- __HELP__ = """× /report `<reason>`: reply to a message to report it to admins.
205
  - @admin: reply to a message to report it to admins.
206
  **NOTE:** Neither of these will get triggered if used by admins.
207
 
208
  **Admins Only:**
209
- × /reports `<on/off/yes/no>`: change report setting, or view current status.
210
  - If done in PM, toggles your status.
211
  - If in group, toggles that groups's status."""
 
201
 
202
  __alt_name__ = ["reports", "report"]
203
 
204
+ __HELP__ = """* /report `<reason>`: reply to a message to report it to admins.
205
  - @admin: reply to a message to report it to admins.
206
  **NOTE:** Neither of these will get triggered if used by admins.
207
 
208
  **Admins Only:**
209
+ * /reports `<on/off/yes/no>`: change report setting, or view current status.
210
  - If done in PM, toggles your status.
211
  - If in group, toggles that groups's status."""
Powers/plugins/rules.py CHANGED
@@ -149,9 +149,9 @@ __alt_name__ = ["rule"]
149
 
150
  __HELP__ = """Set rules for you chat so that members know what to do and what not to do in your group!
151
 
152
- × /rules: get the rules for current chat.
153
 
154
  **Admin only:**
155
- × /setrules `<rules>`: Set the rules for this chat, also works as a reply to a message.
156
- × /clearrules: Clear the rules for this chat.
157
- × /privrules `<on/yes/no/off>`: Turns on/off the option to send the rules to PM of user or group."""
 
149
 
150
  __HELP__ = """Set rules for you chat so that members know what to do and what not to do in your group!
151
 
152
+ * /rules: get the rules for current chat.
153
 
154
  **Admin only:**
155
+ * /setrules `<rules>`: Set the rules for this chat, also works as a reply to a message.
156
+ * /clearrules: Clear the rules for this chat.
157
+ * /privrules `<on/yes/no/off>`: Turns on/off the option to send the rules to PM of user or group."""
Powers/plugins/utils.py CHANGED
@@ -1,31 +1,29 @@
1
- from html import escape
2
  from io import BytesIO
3
  from os import remove
 
 
 
 
 
 
 
 
 
4
 
5
  from gpytranslate import Translator
6
  from pyrogram import filters
7
  from pyrogram.errors import MessageTooLong, PeerIdInvalid, RPCError
8
- from pyrogram.types import Message
9
- from tswift import Song
10
- from wikipedia import summary
11
- from wikipedia.exceptions import DisambiguationError, PageError
12
 
13
- from Powers import (
14
- DEV_USERS,
15
- LOGGER,
16
- OWNER_ID,
17
- SUDO_USERS,
18
- SUPPORT_GROUP,
19
- SUPPORT_STAFF,
20
- WHITELIST_USERS,
21
- )
22
  from Powers.bot_class import Gojo
23
  from Powers.database.antispam_db import GBan
24
  from Powers.database.users_db import Users
25
  from Powers.utils.clean_file import remove_markdown_and_html
26
  from Powers.utils.custom_filters import command
27
  from Powers.utils.extract_user import extract_user
28
- from Powers.utils.http_helper import HTTPx, http
29
  from Powers.utils.kbhelpers import ikb
30
  from Powers.utils.parser import mention_html
31
  from Powers.vars import Config
@@ -198,176 +196,131 @@ async def get_gifid(_, m: Message):
198
  @Gojo.on_message(
199
  command("github") & (filters.group | filters.private),
200
  )
201
- async def github(_, m: Message):
202
- if len(m.text.split()) == 2:
203
- username = m.text.split(None, 1)[1]
204
- LOGGER.info(f"{m.from_user.id} used github cmd in {m.chat.id}")
205
- else:
206
- await m.reply_text(
207
- f"Usage: <code>{Config.PREFIX_HANDLER}github username</code>",
208
- )
209
- return
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
 
211
- URL = f"https://api.github.com/users/{username}"
212
- r = await HTTPx.get(URL)
213
- if r.status_code == 404:
214
- await m.reply_text(f"<code>{username}</code> not found", quote=True)
 
 
 
 
 
 
 
215
  return
 
216
 
217
- r_json = r.json()
218
- url = r_json.get("html_url", None)
219
- name = r_json.get("name", None)
220
- company = r_json.get("company", None)
221
- followers = r_json.get("followers", 0)
222
- following = r_json.get("following", 0)
223
- public_repos = r_json.get("public_repos", 0)
224
- bio = r_json.get("bio", None)
225
- created_at = r_json.get("created_at", "Not Found")
226
-
227
- REPLY = (
228
- f"<b>GitHub Info for @{username}:</b>"
229
- f"\n<b>Name:</b> <code>{name}</code>\n"
230
- f"<b>Bio:</b> <code>{bio}</code>\n"
231
- f"<b>URL:</b> {url}\n"
232
- f"<b>Public Repos:</b> {public_repos}\n"
233
- f"<b>Followers:</b> {followers}\n"
234
- f"<b>Following:</b> {following}\n"
235
- f"<b>Company:</b> <code>{company}</code>\n"
236
- f"<b>Created at:</b> <code>{created_at}</code>"
237
- )
238
 
239
- await m.reply_text(REPLY, quote=True, disable_web_page_preview=True)
240
- return
 
 
 
 
241
 
 
 
242
 
243
- @Gojo.on_message(
244
- command("info") & (filters.group | filters.private),
245
- )
246
- async def my_info(c: Gojo, m: Message):
247
- try:
248
- user_id, name, user_name = await extract_user(c, m)
249
- except PeerIdInvalid:
250
- await m.reply_text(text="I haven't seen this user, mind forwarding one of their messages so I can recognize them?")
251
- return
252
- except ValueError as ef:
253
- if "Peer id invalid" in str(ef):
254
- await m.reply_text(text="User not found, please check the ID again")
255
- return
256
- try:
257
- user = Users.get_user_info(int(user_id))
258
- name = user["name"]
259
- user_name = user["username"]
260
- user_id = user["_id"]
261
- except KeyError:
262
- LOGGER.warning(f"Calling api to fetch info about user {user_id}")
263
- user = await c.get_users(user_id)
264
- name = (
265
- escape(user["first_name"] + " " + user["last_name"])
266
- if user["last_name"]
267
- else user["first_name"]
268
- )
269
- user_name = user["username"]
270
- user_id = user["id"]
271
- except PeerIdInvalid:
272
- await m.reply_text(text="""Failed to get user
273
- Peer ID invalid, I haven't seen this user anywhere earlier, maybe username would help to know them!""")
274
- return
275
- except (RPCError, Exception) as ef:
276
- await m.reply_text(
277
- text=f"""Some error occured, report to @{SUPPORT_GROUP}
278
- <b>Error:</b> <code>{ef}</code>"""
279
- )
280
- return
281
 
282
- gbanned, reason_gban = gban_db.get_gban(user_id)
283
- LOGGER.info(f"{m.from_user.id} used info cmd for {user_id} in {m.chat.id}")
284
- user_id=user_id,
285
- user_name=name,
286
- text = f"""<b>Characteristics:</b>
287
- <b>ID:</b> <code>{user_id}</code>
288
- <b>First Name:</b> {user_name}"""
289
-
290
- if user_name:
291
- text += f"<b>Username:</b> @{user_name}"
292
- perma_link=(await mention_html("Click Here", user_id))
293
- text += f"<b>Permanent User Link:</b> {perma_link}"
294
-
295
- if gbanned:
296
- text += f"\nThis user is Globally banned beacuse: {reason_gban}\n"
297
-
298
- if user_id == OWNER_ID:
299
- text += "This person is my Owner, I would never do anything against them!"
300
- elif user_id in DEV_USERS:
301
- text += "This member is one of my Developers ⚡️"
302
- elif user_id in SUDO_USERS:
303
- text += "This user is one of my Sudos, he has powers which are approximately same to owner!"
304
- elif user_id in WHITELIST_USERS:
305
- text += "This person is 'Whitelist User', they cannot be banned!"
306
-
307
- await m.reply_text(text, parse_mode="html", disable_web_page_preview=True)
308
- return
309
 
 
 
310
 
311
- @Gojo.on_message(command("paste"))
312
- async def paste_it(_, m: Message):
313
- replymsg = await m.reply_text(text="Pasting...", quote=True)
 
 
 
 
 
 
314
  try:
315
- if m.reply_to_message:
316
- if m.reply_to_message.document:
317
- dl_loc = await m.reply_to_message.download()
318
- with open(dl_loc) as f:
319
- txt = f.read()
320
- remove(dl_loc)
321
- else:
322
- txt = m.reply_to_message.text
323
  else:
324
- txt = m.text.split(None, 1)[1]
325
- ur = "https://hastebin.com/documents"
326
- r = await http.post(ur, json={"content": txt})
327
- url = f"https://hastebin.com/{r.json().get('key')}"
328
- await replymsg.edit_text(
329
- text="Pasted to NekoBin!",
330
- reply_markup=ikb([[("NekoBin"), url, "url"]]),
331
- )
332
- LOGGER.info(f"{m.from_user.id} used paste cmd in {m.chat.id}")
333
- except Exception as e:
334
- await replymsg.edit_text(f"Error: {e}")
335
- return
336
- return
337
 
338
 
339
  @Gojo.on_message(command("tr"))
340
- async def translate(_, m: Message):
341
  trl = Translator()
342
- if m.reply_to_message and (m.reply_to_message.text or m.reply_to_message.caption):
343
- if len(m.text.split()) == 1:
344
  target_lang = "en"
345
  else:
346
- target_lang = m.text.split()[1]
347
- if m.reply_to_message.text:
348
- text = m.reply_to_message.text
349
  else:
350
- text = m.reply_to_message.caption
351
  else:
352
- if len(m.text.split()) <= 2:
353
- await m.reply_text(
354
- "Provide lang code.\n[Available options](https://telegra.ph/Lang-Codes-11-08).\n<b>Usage:</b> <code>/tr en</code>",
355
  )
356
  return
357
- target_lang = m.text.split(None, 2)[1]
358
- text = m.text.split(None, 2)[2]
359
  detectlang = await trl.detect(text)
360
  try:
361
  tekstr = await trl(text, targetlang=target_lang)
362
  except ValueError as err:
363
- await m.reply_text(f"Error: <code>{str(err)}</code>")
364
  return
365
- LOGGER.info(f"{m.from_user.id} used translate cmd in {m.chat.id}")
366
- return await m.reply_text(
367
  f"<b>Translated:</b> from {detectlang} to {target_lang} \n<code>``{tekstr.text}``</code>",
368
  )
369
 
370
 
 
 
371
  __PLUGIN__ = "utils"
372
  _DISABLE_CMDS_ = [
373
  "paste",
@@ -384,14 +337,14 @@ __alt_name__ = ["util", "misc", "tools"]
384
 
385
  __HELP__ = """Some utils provided by bot to make your tasks easy!
386
 
387
- × /id: Get the current group id. If used by replying to a message, get that user's id.
388
- × /info: Get information about a user.
389
- × /gifid: Reply to a gif to me to tell you its file ID.
390
- × /wiki: `<query>`: wiki your query.
391
- × /tr `<language>`: Translates the text and then replies to you with the language you have specifed, works as a reply to message.
392
- × /github `<username>`: Search for the user using github api!
393
- × /lyrics `<song>`: Get the lyrics of the song you specify!
394
- × /weebify `<text>` or `<reply to message>`: To weebify the text.
395
 
396
  **Example:**
397
- `/info @username`: this fetches the information about a user from the database."""
 
 
1
  from io import BytesIO
2
  from os import remove
3
+ import re
4
+ import aiofiles
5
+ from search_engine_parser import GoogleSearch
6
+ from datetime import datetime
7
+ from aiohttp import ClientSession
8
+ from tswift import Song
9
+ from wikipedia import summary
10
+ from wikipedia.exceptions import DisambiguationError, PageError
11
+
12
 
13
  from gpytranslate import Translator
14
  from pyrogram import filters
15
  from pyrogram.errors import MessageTooLong, PeerIdInvalid, RPCError
16
+ from pyrogram.types import Message,InlineKeyboardButton, InlineKeyboardMarkup
 
 
 
17
 
18
+
19
+ from Powers import *
 
 
 
 
 
 
 
20
  from Powers.bot_class import Gojo
21
  from Powers.database.antispam_db import GBan
22
  from Powers.database.users_db import Users
23
  from Powers.utils.clean_file import remove_markdown_and_html
24
  from Powers.utils.custom_filters import command
25
  from Powers.utils.extract_user import extract_user
26
+ from Powers.utils.http_helper import *
27
  from Powers.utils.kbhelpers import ikb
28
  from Powers.utils.parser import mention_html
29
  from Powers.vars import Config
 
196
  @Gojo.on_message(
197
  command("github") & (filters.group | filters.private),
198
  )
199
+ async def github(_, message):
200
+ try:
201
+ if len(message.command) < 2:
202
+ await message.reply_text('"/github" Needs An Argument')
203
+ return
204
+ gett = message.text.split(None, 1)[1]
205
+ text = gett + ' "site:github.com"'
206
+ gresults = await GoogleSearch().async_search(text, 1)
207
+ result = ""
208
+ for i in range(4):
209
+ try:
210
+ title = gresults["titles"][i].replace("\n", " ")
211
+ source = gresults["links"][i]
212
+ description = gresults["descriptions"][i]
213
+ result += f"[{title}]({source})\n"
214
+ result += f"`{description}`\n\n"
215
+ except IndexError:
216
+ pass
217
+ await message.reply_text(result, disable_web_page_preview=True)
218
+ except Exception as e:
219
+ await message.reply_text(str(e))
220
+
221
+ #paste here
222
+ session = ClientSession()
223
+ pattern = re.compile(r"^text/|json$|yaml$|xml$|toml$|x-sh$|x-shellscript$")
224
+ BASE = "https://batbin.me/"
225
 
226
+ async def post(url: str, *args, **kwargs):
227
+ async with session.post(url, *args, **kwargs) as resp:
228
+ try:
229
+ data = await resp.json()
230
+ except Exception:
231
+ data = await resp.text()
232
+ return data
233
+
234
+ async def paste(content: str):
235
+ resp = await post(f"{BASE}api/v2/paste", data=content)
236
+ if not resp["success"]:
237
  return
238
+ return BASE + resp["message"]
239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
 
241
+ @Gojo.on_message(command("paste"))
242
+ async def paste_func(_, message: Message):
243
+ if not message.reply_to_message:
244
+ return await message.reply_text("Reply To A Message With `/paste`")
245
+
246
+ r = message.reply_to_message
247
 
248
+ if not r.text and not r.document:
249
+ return await message.reply_text("Only text and documents are supported")
250
 
251
+ m = await message.reply_text("Pasting...")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
252
 
253
+ if r.text:
254
+ content = str(r.text)
255
+ elif r.document:
256
+ if r.document.file_size > 40000:
257
+ return await m.edit("You can only paste files smaller than 40KB.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
258
 
259
+ if not pattern.search(r.document.mime_type):
260
+ return await m.edit("Only text files can be pasted.")
261
 
262
+ doc = await message.reply_to_message.download()
263
+
264
+ async with aiofiles.open(doc, mode="r") as f:
265
+ content = await f.read()
266
+
267
+ remove(doc)
268
+
269
+ link = await paste(content)
270
+ kb = [[InlineKeyboardButton(text="Paste Link ", url=link)]]
271
  try:
272
+ if m.from_user.is_bot:
273
+ await message.reply_photo(
274
+ photo=link,
275
+ quote=False,
276
+ caption="Pasted",
277
+ reply_markup=InlineKeyboardMarkup(kb),
278
+ )
 
279
  else:
280
+ await message.reply_photo(
281
+ photo=link,
282
+ quote=False,
283
+ caption="Pasted",
284
+ reply_markup=InlineKeyboardMarkup(kb),
285
+ )
286
+ await m.delete()
287
+ except Exception:
288
+ await m.edit("Here is the link of the document....", reply_markup=InlineKeyboardMarkup(kb))
 
 
 
 
289
 
290
 
291
  @Gojo.on_message(command("tr"))
292
+ async def tr(_, message):
293
  trl = Translator()
294
+ if message.reply_to_message and (message.reply_to_message.text or message.reply_to_message.caption):
295
+ if len(message.text.split()) == 1:
296
  target_lang = "en"
297
  else:
298
+ target_lang = message.text.split()[1]
299
+ if message.reply_to_message.text:
300
+ text = message.reply_to_message.text
301
  else:
302
+ text = message.reply_to_message.caption
303
  else:
304
+ if len(message.text.split()) <= 2:
305
+ await message.reply_text(
306
+ "Provide lang code.\n[Available options](https://telegra.ph/Lang-Codes-02-22).\n<b>Usage:</b> <code>/tr en</code>",
307
  )
308
  return
309
+ target_lang = message.text.split(None, 2)[1]
310
+ text = message.text.split(None, 2)[2]
311
  detectlang = await trl.detect(text)
312
  try:
313
  tekstr = await trl(text, targetlang=target_lang)
314
  except ValueError as err:
315
+ await message.reply_text(f"Error: <code>{str(err)}</code>")
316
  return
317
+ return await message.reply_text(
 
318
  f"<b>Translated:</b> from {detectlang} to {target_lang} \n<code>``{tekstr.text}``</code>",
319
  )
320
 
321
 
322
+
323
+
324
  __PLUGIN__ = "utils"
325
  _DISABLE_CMDS_ = [
326
  "paste",
 
337
 
338
  __HELP__ = """Some utils provided by bot to make your tasks easy!
339
 
340
+ * /id: Get the current group id. If used by replying to a message, get that user's id.
341
+ * /info: Get information about a user.
342
+ * /gifid: Reply to a gif to me to tell you its file ID.
343
+ * /wiki: `<query>`: wiki your query.
344
+ * /tr `<language>`: Translates the text and then replies to you with the language you have specifed, works as a reply to message.
345
+ * /github `<username>`: Search for the user using github api!
346
+ * /lyrics `<song>`: Get the lyrics of the song you specify!
347
+ * /weebify `<text>` or `<reply to message>`: To weebify the text.
348
 
349
  **Example:**
350
+ `/github @iamgojoof6eyes`: this fetches the information about a user from the database."""
Powers/utils/http_helper.py CHANGED
@@ -1,14 +1,48 @@
1
- from httpx import AsyncClient, Timeout
 
2
 
3
- timeout = Timeout(40, pool=None)
4
- http = AsyncClient(http2=True, timeout=timeout)
 
 
 
 
 
5
 
6
 
7
- class HTTPx:
8
- """class for helping get the data from url using aiohttp."""
 
 
 
 
 
9
 
10
- @staticmethod
11
- async def get(link: str):
12
- """Get JSON data from the provided link."""
13
- async with AsyncClient() as sess:
14
- return await sess.get(link)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from asyncio import gather
2
+ from bot_class import aiohttpsession as session
3
 
4
+ async def get(url: str, *args, **kwargs):
5
+ async with session.get(url, *args, **kwargs) as resp:
6
+ try:
7
+ data = await resp.json()
8
+ except Exception:
9
+ data = await resp.text()
10
+ return data
11
 
12
 
13
+ async def head(url: str, *args, **kwargs):
14
+ async with session.head(url, *args, **kwargs) as resp:
15
+ try:
16
+ data = await resp.json()
17
+ except Exception:
18
+ data = await resp.text()
19
+ return data
20
 
21
+
22
+ async def post(url: str, *args, **kwargs):
23
+ async with session.post(url, *args, **kwargs) as resp:
24
+ try:
25
+ data = await resp.json()
26
+ except Exception:
27
+ data = await resp.text()
28
+ return data
29
+
30
+
31
+ async def multiget(url: str, times: int, *args, **kwargs):
32
+ return await gather(*[get(url, *args, **kwargs) for _ in range(times)])
33
+
34
+
35
+ async def multihead(url: str, times: int, *args, **kwargs):
36
+ return await gather(*[head(url, *args, **kwargs) for _ in range(times)])
37
+
38
+
39
+ async def multipost(url: str, times: int, *args, **kwargs):
40
+ return await gather(*[post(url, *args, **kwargs) for _ in range(times)])
41
+
42
+
43
+ async def resp_get(url: str, *args, **kwargs):
44
+ return await session.get(url, *args, **kwargs)
45
+
46
+
47
+ async def resp_post(url: str, *args, **kwargs):
48
+ return await session.post(url, *args, **kwargs)
Powers/utils/start_utils.py CHANGED
@@ -256,8 +256,8 @@ async def get_help_msg(m: Message or CallbackQuery, help_option: str):
256
  Hey There! My name is Gojo.
257
  I'm here to help you manage your groups!
258
  Commands available:
259
- × /start: Start the bot
260
- × /help: Give's you this message.
261
  """
262
  help_kb = [
263
  *(await gen_cmds_kb(m)),
 
256
  Hey There! My name is Gojo.
257
  I'm here to help you manage your groups!
258
  Commands available:
259
+ * /start: Start the bot
260
+ * /help: Give's you this message.
261
  """
262
  help_kb = [
263
  *(await gen_cmds_kb(m)),
Powers/vars.py CHANGED
@@ -29,6 +29,8 @@ class Config:
29
  SUPPORT_CHANNEL = config("SUPPORT_CHANNEL", default="gojo_updates")
30
  VERSION = config("VERSION", default="v2.0")
31
  WORKERS = int(config("WORKERS", default=16))
 
 
32
  BOT_USERNAME = ""
33
  BOT_ID = ""
34
  BOT_NAME = ""
@@ -55,3 +57,5 @@ class Development:
55
  SUPPORT_CHANNEL = "SUPPORT_CHANNEL"
56
  VERSION = "VERSION"
57
  WORKERS = 8
 
 
 
29
  SUPPORT_CHANNEL = config("SUPPORT_CHANNEL", default="gojo_updates")
30
  VERSION = config("VERSION", default="v2.0")
31
  WORKERS = int(config("WORKERS", default=16))
32
+ ARQ_API_URL = config("ARQ_API_URL", default="https://arq.hamker.in")
33
+ ARQ_API_KEY = config("ARQ_API_KEY", default=None)
34
  BOT_USERNAME = ""
35
  BOT_ID = ""
36
  BOT_NAME = ""
 
57
  SUPPORT_CHANNEL = "SUPPORT_CHANNEL"
58
  VERSION = "VERSION"
59
  WORKERS = 8
60
+ ARQ_API_URL = "ARQ API url here"
61
+ ARQ_API_KEY = "ARQ API key here"
app.json CHANGED
@@ -63,6 +63,16 @@
63
  "required": true,
64
  "value": "/ ! $"
65
  },
 
 
 
 
 
 
 
 
 
 
66
  "DEV_USERS": {
67
  "description": "ID of users who are Devs of your bot (can use /py etc.)...Don't give comma or anything after 1 id just give and space then enter second id. If you are a noob and would come and bother Hell support then keep the current ID's here at they are and add yours.",
68
  "required": false,
 
63
  "required": true,
64
  "value": "/ ! $"
65
  },
66
+ "ARQ_API_URL": {
67
+ "description": "Leave it as it is....",
68
+ "required": true,
69
+ "value": "https://arq.hamker.in"
70
+ },
71
+ "ARQ_API_KEY": {
72
+ "description": "Get this from @ARQRobot.",
73
+ "required": true,
74
+ "value":""
75
+ },
76
  "DEV_USERS": {
77
  "description": "ID of users who are Devs of your bot (can use /py etc.)...Don't give comma or anything after 1 id just give and space then enter second id. If you are a noob and would come and bother Hell support then keep the current ID's here at they are and add yours.",
78
  "required": false,
requirements.txt CHANGED
@@ -1,4 +1,5 @@
1
- aiofiles==0.8.0; python_version >= "3.6" and python_version < "4.0"
 
2
  anyio==3.5.0; python_full_version >= "3.6.2" and python_version >= "3.6"
3
  asyncio==3.4.3
4
  beautifulsoup4==4.10.0; python_full_version > "3.0.0"
@@ -8,11 +9,11 @@ charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >=
8
  dnspython==2.2.1; python_version >= "3.6" and python_version < "4.0"
9
  google==3.0.0
10
  gpytranslate==1.4.0; python_version >= "3.6"
 
11
  h11==0.12.0; python_version >= "3.6"
12
  h2==4.1.0; python_version >= "3.6" and python_full_version >= "3.6.1"
13
  hpack==4.0.0; python_version >= "3.6" and python_full_version >= "3.6.1"
14
  httpcore==0.13.7; python_version >= "3.6"
15
- httpx==0.22.0; python_version >= "3.7"
16
  hyperframe==6.0.1; python_version >= "3.6" and python_full_version >= "3.6.1"
17
  idna==3.3; python_version >= "3.6" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5") and python_full_version >= "3.6.2"
18
  lxml==4.8.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
@@ -21,15 +22,16 @@ pyaes==1.6.1; python_version >= "3.6" and python_version < "4.0"
21
  pymongo==3.12.3
22
  pyrogram==2.0.19; python_version >= "3.7"
23
  pysocks==1.7.1; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.4.0"
 
24
  python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
25
  pyyaml==6.0; python_version >= "3.6"
26
  regex==2021.11.10
27
  requests==2.27.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
28
  rfc3986==1.5.0; python_version >= "3.6"
 
29
  six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
30
  sniffio==1.2.0; python_full_version >= "3.6.2" and python_version >= "3.6"
31
  soupsieve==2.3.1; python_version >= "3.6" and python_full_version > "3.0.0"
32
- speedtest-cli==2.1.3
33
  tgcrypto==1.2.3; python_version >= "3.6" and python_version < "4.0"
34
  tswift==0.7.0
35
  typing-extensions==4.1.1; python_full_version >= "3.6.2" and python_version >= "3.6" and python_version < "3.8"
 
1
+ aiofiles
2
+ aiohttp
3
  anyio==3.5.0; python_full_version >= "3.6.2" and python_version >= "3.6"
4
  asyncio==3.4.3
5
  beautifulsoup4==4.10.0; python_full_version > "3.0.0"
 
9
  dnspython==2.2.1; python_version >= "3.6" and python_version < "4.0"
10
  google==3.0.0
11
  gpytranslate==1.4.0; python_version >= "3.6"
12
+ gTTS
13
  h11==0.12.0; python_version >= "3.6"
14
  h2==4.1.0; python_version >= "3.6" and python_full_version >= "3.6.1"
15
  hpack==4.0.0; python_version >= "3.6" and python_full_version >= "3.6.1"
16
  httpcore==0.13.7; python_version >= "3.6"
 
17
  hyperframe==6.0.1; python_version >= "3.6" and python_full_version >= "3.6.1"
18
  idna==3.3; python_version >= "3.6" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5") and python_full_version >= "3.6.2"
19
  lxml==4.8.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
 
22
  pymongo==3.12.3
23
  pyrogram==2.0.19; python_version >= "3.7"
24
  pysocks==1.7.1; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.4.0"
25
+ python-arq
26
  python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
27
  pyyaml==6.0; python_version >= "3.6"
28
  regex==2021.11.10
29
  requests==2.27.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
30
  rfc3986==1.5.0; python_version >= "3.6"
31
+ search_engine_parser
32
  six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
33
  sniffio==1.2.0; python_full_version >= "3.6.2" and python_version >= "3.6"
34
  soupsieve==2.3.1; python_version >= "3.6" and python_full_version > "3.0.0"
 
35
  tgcrypto==1.2.3; python_version >= "3.6" and python_version < "4.0"
36
  tswift==0.7.0
37
  typing-extensions==4.1.1; python_full_version >= "3.6.2" and python_version >= "3.6" and python_version < "3.8"