Captain D. Ezio commited on
Commit
7ba21b9
·
2 Parent(s): fbded93 8b5696a

Merge branch 'main' into dependabot/github_actions/peter-evans/create-pull-request-7

Browse files
Makefile CHANGED
@@ -1,14 +1,16 @@
 
 
1
  test:
2
  @pre-commit run --all-files
3
 
4
  install:
5
  @pip3 install --upgrade pip setuptools wheel
6
- @sleep 3
7
- @pip install -r requirements.txt
8
 
9
  run:
10
  @python3 -m Powers
11
 
12
  clean:
13
  @rm -rf Powers/logs
14
- @pyclean .
 
1
+ .PHONY: test install run clean
2
+
3
  test:
4
  @pre-commit run --all-files
5
 
6
  install:
7
  @pip3 install --upgrade pip setuptools wheel
8
+ sleep 3
9
+ @pip3 install -r requirements.txt
10
 
11
  run:
12
  @python3 -m Powers
13
 
14
  clean:
15
  @rm -rf Powers/logs
16
+ @pyclean .
Powers/__init__.py CHANGED
@@ -119,9 +119,8 @@ SUPPORT_CHANNEL = Config.SUPPORT_CHANNEL
119
 
120
  # Users Config
121
  OWNER_ID = Config.OWNER_ID
122
- DEV_USERS = set(Config.DEV_USERS)
123
- SUDO_USERS = set(Config.SUDO_USERS)
124
- WHITELIST_USERS = set(Config.WHITELIST_USERS)
125
 
126
  # Plugins, DB and Workers
127
  DB_URI = Config.DB_URI
 
119
 
120
  # Users Config
121
  OWNER_ID = Config.OWNER_ID
122
+ SUPPORT_USERS = {"Owner": [Config.OWNER_ID], "Dev": set(Config.DEV_USERS), "Sudo": set(Config.SUDO_USERS), "White": set(Config.WHITELIST_USERS)}
123
+
 
124
 
125
  # Plugins, DB and Workers
126
  DB_URI = Config.DB_URI
Powers/__main__.py CHANGED
@@ -1,6 +1,19 @@
1
- # import uvloop # Comment it out if using on windows
 
 
 
2
  from Powers.bot_class import Gojo
3
 
4
  if __name__ == "__main__":
5
- # uvloop.install() # Comment it out if using on windows
 
 
 
 
 
 
 
 
 
 
6
  Gojo().run()
 
1
+ import os
2
+ from platform import system
3
+
4
+ from Powers import LOGGER
5
  from Powers.bot_class import Gojo
6
 
7
  if __name__ == "__main__":
8
+ if system() == "Windows":
9
+ LOGGER.info("Windows system detected thus not installing uvloop")
10
+ else:
11
+ LOGGER.info("Attempting to install uvloop")
12
+ try:
13
+ os.system("pip3 install uvloop==0.19.0")
14
+ import uvloop
15
+ uvloop.install()
16
+ LOGGER.info("Installed uvloop continuing the process")
17
+ except:
18
+ LOGGER.info("Failed to install uvloop continuing the process")
19
  Gojo().run()
Powers/bot_class.py CHANGED
@@ -7,9 +7,9 @@ from pyrogram import Client, __version__
7
  from pyrogram.raw.all import layer
8
  from pyrogram.types import BotCommand
9
 
10
- from Powers import (API_HASH, API_ID, BOT_TOKEN, LOG_DATETIME,
11
- LOGFILE, LOGGER, MESSAGE_DUMP, NO_LOAD, UPTIME,
12
- WORKERS, load_cmds, scheduler)
13
  from Powers.database import MongoDB
14
  from Powers.plugins import all_plugins
15
  from Powers.plugins.scheduled_jobs import *
@@ -69,6 +69,9 @@ class Gojo(Client):
69
  cmd_list = await load_cmds(await all_plugins())
70
  await load_support_users()
71
  await cache_support()
 
 
 
72
  LOGGER.info(f"Plugins Loaded: {cmd_list}")
73
  if BDB_URI:
74
  scheduler.add_job(send_wishish, 'cron', [
 
7
  from pyrogram.raw.all import layer
8
  from pyrogram.types import BotCommand
9
 
10
+ from Powers import (API_HASH, API_ID, BOT_TOKEN, LOG_DATETIME, LOGFILE, LOGGER,
11
+ MESSAGE_DUMP, NO_LOAD, UPTIME, WORKERS, load_cmds,
12
+ scheduler)
13
  from Powers.database import MongoDB
14
  from Powers.plugins import all_plugins
15
  from Powers.plugins.scheduled_jobs import *
 
69
  cmd_list = await load_cmds(await all_plugins())
70
  await load_support_users()
71
  await cache_support()
72
+ LOGGER.info(f"Dev Users: {SUPPORT_USERS['Dev']}")
73
+ LOGGER.info(f"Sudo Users: {SUPPORT_USERS['Sudo']}")
74
+ LOGGER.info(f"Whitelist users: {SUPPORT_USERS['White']}")
75
  LOGGER.info(f"Plugins Loaded: {cmd_list}")
76
  if BDB_URI:
77
  scheduler.add_job(send_wishish, 'cron', [
Powers/plugins/admin.py CHANGED
@@ -11,11 +11,12 @@ from pyrogram.errors import (BotChannelsNa, ChatAdminInviteRequired,
11
  RPCError, UserAdminInvalid)
12
  from pyrogram.types import ChatPrivileges, Message
13
 
14
- from Powers import DEV_USERS, LOGGER, OWNER_ID, SUDO_USERS, WHITELIST_USERS
15
  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.utils.caching import (admin_cache_reload)
 
19
  from Powers.utils.custom_filters import admin_filter, command, promote_filter
20
  from Powers.utils.extract_user import extract_user
21
  from Powers.utils.parser import mention_html
@@ -110,7 +111,7 @@ async def reload_admins(_, m: Message):
110
  return await m.reply_text(
111
  "This command is made to be used in groups only!",
112
  )
113
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
114
  if (
115
  (m.chat.id in set(TEMP_ADMIN_CACHE_BLOCK.keys()))
116
  and (m.from_user.id not in SUPPORT_STAFF)
@@ -420,7 +421,7 @@ async def demote_usr(c: Gojo, m: Message):
420
  async def get_invitelink(c: Gojo, m: Message):
421
  # Bypass the bot devs, sudos and owner
422
 
423
- DEV_LEVEL = DEV_USERS
424
  if m.from_user.id not in DEV_LEVEL:
425
  user = await m.chat.get_member(m.from_user.id)
426
  if not user.privileges.can_invite_users and user.status != CMS.OWNER:
 
11
  RPCError, UserAdminInvalid)
12
  from pyrogram.types import ChatPrivileges, Message
13
 
14
+ from Powers import LOGGER, OWNER_ID
15
  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
 
111
  return await m.reply_text(
112
  "This command is made to be used in groups only!",
113
  )
114
+ SUPPORT_STAFF = get_support_staff()
115
  if (
116
  (m.chat.id in set(TEMP_ADMIN_CACHE_BLOCK.keys()))
117
  and (m.from_user.id not in SUPPORT_STAFF)
 
421
  async def get_invitelink(c: Gojo, m: Message):
422
  # Bypass the bot devs, sudos and owner
423
 
424
+ DEV_LEVEL = get_support_staff("dev_level")
425
  if m.from_user.id not in DEV_LEVEL:
426
  user = await m.chat.get_member(m.from_user.id)
427
  if not user.privileges.can_invite_users and user.status != CMS.OWNER:
Powers/plugins/afk.py CHANGED
@@ -69,7 +69,7 @@ async def get_hours(hour: str):
69
  return txt
70
 
71
 
72
- @Gojo.on_message(afk_filter & filters.group, 10000)
73
  async def afk_checker(c: Gojo, m: Message):
74
  afk = AFK()
75
  back_ = choice(back)
 
69
  return txt
70
 
71
 
72
+ @Gojo.on_message(afk_filter & filters.group)
73
  async def afk_checker(c: Gojo, m: Message):
74
  afk = AFK()
75
  back_ = choice(back)
Powers/plugins/antispam.py CHANGED
@@ -5,11 +5,11 @@ from traceback import format_exc
5
  from pyrogram.errors import MessageTooLong, PeerIdInvalid, UserIsBlocked
6
  from pyrogram.types import Message
7
 
8
- from Powers import (DEV_USERS, LOGGER, MESSAGE_DUMP, SUDO_USERS, SUPPORT_GROUP,
9
- WHITELIST_USERS)
10
  from Powers.bot_class import Gojo
11
  from Powers.database.antispam_db import GBan
12
  from Powers.database.users_db import Users
 
13
  from Powers.utils.clean_file import remove_markdown_and_html
14
  from Powers.utils.custom_filters import command
15
  from Powers.utils.extract_user import extract_user
@@ -38,7 +38,7 @@ async def gban(c: Gojo, m: Message):
38
  else:
39
  gban_reason = m.text.split(None, 2)[2]
40
 
41
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
42
 
43
  if user_id in SUPPORT_STAFF:
44
  await m.reply_text(text="This user is part of my Support!, Can't ban our own!")
@@ -96,7 +96,7 @@ async def ungban(c: Gojo, m: Message):
96
 
97
  user_id, user_first_name, _ = await extract_user(c, m)
98
 
99
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
100
 
101
  if user_id in SUPPORT_STAFF:
102
  await m.reply_text(text="This user is part of my Support!, Can't ban our own!")
 
5
  from pyrogram.errors import MessageTooLong, PeerIdInvalid, UserIsBlocked
6
  from pyrogram.types import Message
7
 
8
+ from Powers import LOGGER, MESSAGE_DUMP, SUPPORT_GROUP
 
9
  from Powers.bot_class import Gojo
10
  from Powers.database.antispam_db import GBan
11
  from Powers.database.users_db import Users
12
+ from Powers.supports import get_support_staff
13
  from Powers.utils.clean_file import remove_markdown_and_html
14
  from Powers.utils.custom_filters import command
15
  from Powers.utils.extract_user import extract_user
 
38
  else:
39
  gban_reason = m.text.split(None, 2)[2]
40
 
41
+ SUPPORT_STAFF = get_support_staff()
42
 
43
  if user_id in SUPPORT_STAFF:
44
  await m.reply_text(text="This user is part of my Support!, Can't ban our own!")
 
96
 
97
  user_id, user_first_name, _ = await extract_user(c, m)
98
 
99
+ SUPPORT_STAFF = get_support_staff()
100
 
101
  if user_id in SUPPORT_STAFF:
102
  await m.reply_text(text="This user is part of my Support!, Can't ban our own!")
Powers/plugins/auto_join.py CHANGED
@@ -7,9 +7,10 @@ from pyrogram.types import InlineKeyboardButton as ikb
7
  from pyrogram.types import InlineKeyboardMarkup as ikm
8
  from pyrogram.types import Message
9
 
10
- from Powers import DEV_USERS, LOGGER, SUDO_USERS, WHITELIST_USERS
11
  from Powers.bot_class import Gojo
12
  from Powers.database.autojoin_db import AUTOJOIN
 
13
  from Powers.utils.custom_filters import admin_filter, auto_join_filter, command
14
 
15
 
@@ -85,7 +86,7 @@ async def join_request_handler(c: Gojo, j: ChatJoinRequest):
85
  chat = j.chat.id
86
  aj = AUTOJOIN()
87
  join_type = aj.get_autojoin(chat)
88
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
89
 
90
  if not join_type:
91
  return
 
7
  from pyrogram.types import InlineKeyboardMarkup as ikm
8
  from pyrogram.types import Message
9
 
10
+ from Powers import LOGGER
11
  from Powers.bot_class import Gojo
12
  from Powers.database.autojoin_db import AUTOJOIN
13
+ from Powers.supports import get_support_staff
14
  from Powers.utils.custom_filters import admin_filter, auto_join_filter, command
15
 
16
 
 
86
  chat = j.chat.id
87
  aj = AUTOJOIN()
88
  join_type = aj.get_autojoin(chat)
89
+ SUPPORT_STAFF = get_support_staff()
90
 
91
  if not join_type:
92
  return
Powers/plugins/bans.py CHANGED
@@ -9,9 +9,9 @@ from pyrogram.types import (CallbackQuery, ChatPrivileges,
9
  InlineKeyboardButton, InlineKeyboardMarkup,
10
  Message)
11
 
12
- from Powers import (DEV_USERS, LOGGER, MESSAGE_DUMP, OWNER_ID, SUDO_USERS,
13
- WHITELIST_USERS)
14
  from Powers.bot_class import Gojo
 
15
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
16
  from Powers.utils.custom_filters import command, restrict_filter
17
  from Powers.utils.extract_user import extract_user
@@ -38,7 +38,7 @@ async def tban_usr(c: Gojo, m: Message):
38
  await m.reply_text("WTF?? Why would I ban myself?")
39
  await m.stop_propagation()
40
 
41
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
42
 
43
  if user_id in SUPPORT_STAFF:
44
  await m.reply_text(
@@ -158,7 +158,7 @@ async def stban_usr(c: Gojo, m: Message):
158
  await m.reply_text(text="I can't ban nothing!")
159
  await m.stop_propagation()
160
 
161
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
162
 
163
  try:
164
  user_id, _, _ = await extract_user(c, m)
@@ -263,7 +263,7 @@ async def dtban_usr(c: Gojo, m: Message):
263
  await m.reply_text("Huh, why would I ban myself?")
264
  await m.stop_propagation()
265
 
266
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
267
 
268
  if user_id in SUPPORT_STAFF:
269
  await m.reply_text(text="I am not going to ban one of my support staff")
@@ -390,7 +390,7 @@ async def kick_usr(c: Gojo, m: Message):
390
  await m.reply_text("Huh, why would I kick myself?")
391
  await m.stop_propagation()
392
 
393
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
394
 
395
  if user_id in SUPPORT_STAFF:
396
  await m.reply_text(
@@ -478,7 +478,7 @@ async def skick_usr(c: Gojo, m: Message):
478
  await m.reply_text("Nuh Hu, why would I kick myself?")
479
  await m.stop_propagation()
480
 
481
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
482
 
483
  if user_id in SUPPORT_STAFF:
484
  await m.reply_text(
@@ -549,7 +549,7 @@ async def dkick_usr(c: Gojo, m: Message):
549
  await m.reply_text("Huh, why would I kick myself?")
550
  await m.stop_propagation()
551
 
552
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
553
 
554
  if user_id in SUPPORT_STAFF:
555
  await m.reply_text(
@@ -697,7 +697,7 @@ async def sban_usr(c: Gojo, m: Message):
697
  await m.reply_text("Huh, why would I ban myself?")
698
  await m.stop_propagation()
699
 
700
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
701
 
702
  if user_id in SUPPORT_STAFF:
703
  await m.reply_text(
@@ -774,7 +774,7 @@ async def dban_usr(c: Gojo, m: Message):
774
  await m.reply_text("Huh, why would I ban myself?")
775
  await m.stop_propagation()
776
 
777
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
778
 
779
  if user_id in SUPPORT_STAFF:
780
  await m.reply_text(
@@ -868,7 +868,7 @@ async def ban_usr(c: Gojo, m: Message):
868
  await m.reply_text("Huh, why would I ban myself?")
869
  await m.stop_propagation()
870
 
871
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
872
 
873
  if user_id in SUPPORT_STAFF:
874
  await m.reply_text(
 
9
  InlineKeyboardButton, InlineKeyboardMarkup,
10
  Message)
11
 
12
+ from Powers import LOGGER, MESSAGE_DUMP, OWNER_ID
 
13
  from Powers.bot_class import Gojo
14
+ from Powers.supports import get_support_staff
15
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
16
  from Powers.utils.custom_filters import command, restrict_filter
17
  from Powers.utils.extract_user import extract_user
 
38
  await m.reply_text("WTF?? Why would I ban myself?")
39
  await m.stop_propagation()
40
 
41
+ SUPPORT_STAFF = get_support_staff()
42
 
43
  if user_id in SUPPORT_STAFF:
44
  await m.reply_text(
 
158
  await m.reply_text(text="I can't ban nothing!")
159
  await m.stop_propagation()
160
 
161
+ SUPPORT_STAFF = get_support_staff()
162
 
163
  try:
164
  user_id, _, _ = await extract_user(c, m)
 
263
  await m.reply_text("Huh, why would I ban myself?")
264
  await m.stop_propagation()
265
 
266
+ SUPPORT_STAFF = get_support_staff()
267
 
268
  if user_id in SUPPORT_STAFF:
269
  await m.reply_text(text="I am not going to ban one of my support staff")
 
390
  await m.reply_text("Huh, why would I kick myself?")
391
  await m.stop_propagation()
392
 
393
+ SUPPORT_STAFF = get_support_staff()
394
 
395
  if user_id in SUPPORT_STAFF:
396
  await m.reply_text(
 
478
  await m.reply_text("Nuh Hu, why would I kick myself?")
479
  await m.stop_propagation()
480
 
481
+ SUPPORT_STAFF = get_support_staff()
482
 
483
  if user_id in SUPPORT_STAFF:
484
  await m.reply_text(
 
549
  await m.reply_text("Huh, why would I kick myself?")
550
  await m.stop_propagation()
551
 
552
+ SUPPORT_STAFF = get_support_staff()
553
 
554
  if user_id in SUPPORT_STAFF:
555
  await m.reply_text(
 
697
  await m.reply_text("Huh, why would I ban myself?")
698
  await m.stop_propagation()
699
 
700
+ SUPPORT_STAFF = get_support_staff()
701
 
702
  if user_id in SUPPORT_STAFF:
703
  await m.reply_text(
 
774
  await m.reply_text("Huh, why would I ban myself?")
775
  await m.stop_propagation()
776
 
777
+ SUPPORT_STAFF = get_support_staff()
778
 
779
  if user_id in SUPPORT_STAFF:
780
  await m.reply_text(
 
868
  await m.reply_text("Huh, why would I ban myself?")
869
  await m.stop_propagation()
870
 
871
+ SUPPORT_STAFF = get_support_staff()
872
 
873
  if user_id in SUPPORT_STAFF:
874
  await m.reply_text(
Powers/plugins/captcha.py CHANGED
@@ -11,9 +11,10 @@ from pyrogram.types import InlineKeyboardButton as IKB
11
  from pyrogram.types import InlineKeyboardMarkup as ikm
12
  from pyrogram.types import Message, User
13
 
14
- from Powers import DEV_USERS, LOGGER, MESSAGE_DUMP, SUDO_USERS, WHITELIST_USERS
15
  from Powers.bot_class import Gojo
16
  from Powers.database.captcha_db import CAPTCHA, CAPTCHA_DATA
 
17
  from Powers.utils.captcha_helper import (genrator, get_image_captcha,
18
  get_qr_captcha)
19
  from Powers.utils.custom_filters import admin_filter, captcha_filter, command
@@ -157,7 +158,7 @@ async def on_chat_members_updatess(c: Gojo, m: Message):
157
 
158
  if user.is_bot:
159
  continue
160
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
161
 
162
  try:
163
  status = (await m.chat.get_member(user)).status
 
11
  from pyrogram.types import InlineKeyboardMarkup as ikm
12
  from pyrogram.types import Message, User
13
 
14
+ from Powers import LOGGER, MESSAGE_DUMP
15
  from Powers.bot_class import Gojo
16
  from Powers.database.captcha_db import CAPTCHA, CAPTCHA_DATA
17
+ from Powers.supports import get_support_staff
18
  from Powers.utils.captcha_helper import (genrator, get_image_captcha,
19
  get_qr_captcha)
20
  from Powers.utils.custom_filters import admin_filter, captcha_filter, command
 
158
 
159
  if user.is_bot:
160
  continue
161
+ SUPPORT_STAFF = get_support_staff()
162
 
163
  try:
164
  status = (await m.chat.get_member(user)).status
Powers/plugins/dev.py CHANGED
@@ -15,9 +15,8 @@ from pyrogram.types import InlineKeyboardButton as IKB
15
  from pyrogram.types import InlineKeyboardMarkup as IKM
16
  from pyrogram.types import Message
17
 
18
- from Powers import (BOT_TOKEN, DEV_USERS, LOG_DATETIME, LOGFILE, LOGGER,
19
- MESSAGE_DUMP, OWNER_ID, SUDO_USERS, UPTIME,
20
- WHITELIST_USERS)
21
  from Powers.bot_class import Gojo
22
  from Powers.database import MongoDB
23
  from Powers.database.chats_db import Chats
@@ -78,11 +77,11 @@ async def add_support(c: Gojo, m: Message):
78
  else:
79
  support.insert_support_user(userr, to)
80
  if to == "dev":
81
- DEV_USERS.add(userr)
82
  elif to == "sudo":
83
- SUDO_USERS.add(userr)
84
  else:
85
- WHITELIST_USERS.add(userr)
86
  await m.reply_text(f"This user is now a {to} user")
87
  return
88
  if can_do := can_change_type(curr_user, to):
@@ -192,9 +191,9 @@ async def rm_support(c: Gojo, m: Message):
192
  can_user = can_change_type(curr_user, to_user)
193
  if m.from_user.id == int(OWNER_ID) or can_user:
194
  support.delete_support_user(curr)
195
- DEV_USERS.discard(curr)
196
- SUDO_USERS.discard(curr)
197
- WHITELIST_USERS.discard(curr)
198
  await m.reply_text("Done! User now no longer belongs to the support staff")
199
  else:
200
  await m.reply_text("Sorry you can't do that...")
 
15
  from pyrogram.types import InlineKeyboardMarkup as IKM
16
  from pyrogram.types import Message
17
 
18
+ from Powers import (BOT_TOKEN, LOG_DATETIME, LOGFILE, LOGGER, MESSAGE_DUMP,
19
+ OWNER_ID, SUPPORT_USERS, UPTIME)
 
20
  from Powers.bot_class import Gojo
21
  from Powers.database import MongoDB
22
  from Powers.database.chats_db import Chats
 
77
  else:
78
  support.insert_support_user(userr, to)
79
  if to == "dev":
80
+ SUPPORT_USERS["Dev"].add(userr)
81
  elif to == "sudo":
82
+ SUPPORT_USERS["Sudo"].add(userr)
83
  else:
84
+ SUPPORT_USERS["White"].add(userr)
85
  await m.reply_text(f"This user is now a {to} user")
86
  return
87
  if can_do := can_change_type(curr_user, to):
 
191
  can_user = can_change_type(curr_user, to_user)
192
  if m.from_user.id == int(OWNER_ID) or can_user:
193
  support.delete_support_user(curr)
194
+ SUPPORT_USERS["Dev"].discard(curr)
195
+ SUPPORT_USERS["Sudo"].discard(curr)
196
+ SUPPORT_USERS["White"].discard(curr)
197
  await m.reply_text("Done! User now no longer belongs to the support staff")
198
  else:
199
  await m.reply_text("Sorry you can't do that...")
Powers/plugins/flood.py CHANGED
@@ -11,9 +11,10 @@ from pyrogram.types import (CallbackQuery, ChatPermissions,
11
  InlineKeyboardButton, InlineKeyboardMarkup,
12
  Message)
13
 
14
- from Powers import DEV_USERS, LOGGER, SUDO_USERS, WHITELIST_USERS
15
  from Powers.bot_class import Gojo
16
  from Powers.database.flood_db import Floods
 
17
  from Powers.utils.custom_filters import admin_filter, command, flood_filter
18
  from Powers.utils.extras import BAN_GIFS, KICK_GIFS, MUTE_GIFS
19
 
@@ -224,7 +225,7 @@ async def flood_set(c: Gojo, m: Message):
224
 
225
  @Gojo.on_callback_query(filters.regex("^f_"))
226
  async def callbacks(c: Gojo, q: CallbackQuery):
227
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
228
  data = q.data
229
  if data == "f_close":
230
  await q.answer("Closed")
@@ -341,7 +342,7 @@ async def reverse_callbacks(c: Gojo, q: CallbackQuery):
341
  data = q.data.split("_")
342
  action = data[1]
343
  user_id = int(q.data.split("=")[1])
344
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
345
  if not q.from_user:
346
  return q.answer("Looks like you are not an user 👀")
347
  if action == "ban":
 
11
  InlineKeyboardButton, InlineKeyboardMarkup,
12
  Message)
13
 
14
+ from Powers import LOGGER
15
  from Powers.bot_class import Gojo
16
  from Powers.database.flood_db import Floods
17
+ from Powers.supports import get_support_staff
18
  from Powers.utils.custom_filters import admin_filter, command, flood_filter
19
  from Powers.utils.extras import BAN_GIFS, KICK_GIFS, MUTE_GIFS
20
 
 
225
 
226
  @Gojo.on_callback_query(filters.regex("^f_"))
227
  async def callbacks(c: Gojo, q: CallbackQuery):
228
+ SUPPORT_STAFF = get_support_staff()
229
  data = q.data
230
  if data == "f_close":
231
  await q.answer("Closed")
 
342
  data = q.data.split("_")
343
  action = data[1]
344
  user_id = int(q.data.split("=")[1])
345
+ SUPPORT_STAFF = get_support_staff()
346
  if not q.from_user:
347
  return q.answer("Looks like you are not an user 👀")
348
  if action == "ban":
Powers/plugins/fun.py CHANGED
@@ -5,8 +5,8 @@ from pyrogram import enums
5
  from pyrogram.errors import MessageTooLong
6
  from pyrogram.types import Message
7
 
8
- from Powers import DEV_USERS
9
  from Powers.bot_class import Gojo
 
10
  from Powers.utils import extras
11
  from Powers.utils.custom_filters import command
12
  from Powers.utils.extras import NOWYES as NO
@@ -98,7 +98,7 @@ async def insult(c: Gojo, m: Message):
98
  return
99
  user_id = m.reply_to_message.from_user.id
100
  user_first_name = m.reply_to_message.from_user.first_name
101
- if user_id in DEV_USERS:
102
  await m.reply_text("Sorry! I can't insult my devs....")
103
  else:
104
  Insult_omp = choice(extras.INSULT_STRINGS)
 
5
  from pyrogram.errors import MessageTooLong
6
  from pyrogram.types import Message
7
 
 
8
  from Powers.bot_class import Gojo
9
+ from Powers.supports import get_support_staff
10
  from Powers.utils import extras
11
  from Powers.utils.custom_filters import command
12
  from Powers.utils.extras import NOWYES as NO
 
98
  return
99
  user_id = m.reply_to_message.from_user.id
100
  user_first_name = m.reply_to_message.from_user.first_name
101
+ if user_id in get_support_staff("dev_level"):
102
  await m.reply_text("Sorry! I can't insult my devs....")
103
  else:
104
  Insult_omp = choice(extras.INSULT_STRINGS)
Powers/plugins/greetings.py CHANGED
@@ -7,10 +7,11 @@ from pyrogram import emoji, enums, filters
7
  from pyrogram.errors import ChannelPrivate, ChatAdminRequired, RPCError
8
  from pyrogram.types import Message, User
9
 
10
- from Powers import DEV_USERS, LOGGER
11
  from Powers.bot_class import Gojo
12
  from Powers.database.antispam_db import GBan
13
  from Powers.database.greetings_db import Greetings
 
14
  from Powers.utils.cmd_senders import send_cmd
15
  from Powers.utils.custom_filters import (admin_filter, bot_admin_filter,
16
  captcha_filter, command)
@@ -242,7 +243,7 @@ async def member_has_joined(c: Gojo, m: Message):
242
  try:
243
  if user.id == c.me.id:
244
  continue
245
- if user.id in DEV_USERS:
246
  await c.send_animation(
247
  chat_id=m.chat.id,
248
  animation="./extras/william.gif",
@@ -365,7 +366,7 @@ async def member_has_left(c: Gojo, m: Message):
365
  await c.delete_messages(m.chat.id, int(ifff))
366
  except RPCError:
367
  pass
368
- if user.id in DEV_USERS:
369
  await c.send_message(
370
  m.chat.id,
371
  f"Will miss you my master {user.mention} :(",
 
7
  from pyrogram.errors import ChannelPrivate, ChatAdminRequired, RPCError
8
  from pyrogram.types import Message, User
9
 
10
+ from Powers import LOGGER
11
  from Powers.bot_class import Gojo
12
  from Powers.database.antispam_db import GBan
13
  from Powers.database.greetings_db import Greetings
14
+ from Powers.supports import get_support_staff
15
  from Powers.utils.cmd_senders import send_cmd
16
  from Powers.utils.custom_filters import (admin_filter, bot_admin_filter,
17
  captcha_filter, command)
 
243
  try:
244
  if user.id == c.me.id:
245
  continue
246
+ if user.id in get_support_staff("dev"):
247
  await c.send_animation(
248
  chat_id=m.chat.id,
249
  animation="./extras/william.gif",
 
366
  await c.delete_messages(m.chat.id, int(ifff))
367
  except RPCError:
368
  pass
369
+ if user.id in get_support_staff("dev"):
370
  await c.send_message(
371
  m.chat.id,
372
  f"Will miss you my master {user.mention} :(",
Powers/plugins/info.py CHANGED
@@ -9,9 +9,10 @@ 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 DEV_USERS, LOGGER, OWNER_ID, SUDO_USERS, WHITELIST_USERS
13
  from Powers.bot_class import Gojo
14
  from Powers.database.antispam_db import GBan
 
15
  from Powers.utils.custom_filters import command
16
  from Powers.utils.extract_user import extract_user
17
 
@@ -81,7 +82,7 @@ async def user_info(c: Gojo, user, already=False):
81
  about = ll.full_user.about
82
  except Exception:
83
  pass
84
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
85
  username = user.username
86
  first_name = user.first_name
87
  last_name = user.last_name
@@ -95,17 +96,17 @@ async def user_info(c: Gojo, user, already=False):
95
  is_support = "A person is a great support to himself"
96
  omp = "Hmmm.......Who is that again?"
97
  if is_support or c.me.id:
98
- if user_id in DEV_USERS:
99
  omp = "Dev"
100
- elif user_id in SUDO_USERS:
101
  omp = "Sudoer"
102
- elif user_id in WHITELIST_USERS:
103
  omp = "Whitelist"
104
  elif user_id == c.me.id:
105
  omp = "I am the targeted user"
106
  elif user_id == OWNER_ID:
107
  omp = "Owner of the bot"
108
- if user_id in DEV_USERS and user_id == OWNER_ID:
109
  omp = "Dev and Owner"
110
 
111
  is_scam = user.is_scam
 
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
18
 
 
82
  about = ll.full_user.about
83
  except Exception:
84
  pass
85
+ SUPPORT_STAFF = get_support_staff()
86
  username = user.username
87
  first_name = user.first_name
88
  last_name = user.last_name
 
96
  is_support = "A person is a great support to himself"
97
  omp = "Hmmm.......Who is that again?"
98
  if is_support or c.me.id:
99
+ if user_id in get_support_staff("dev"):
100
  omp = "Dev"
101
+ elif user_id in get_support_staff("sudo"):
102
  omp = "Sudoer"
103
+ elif user_id in get_support_staff("whitelist"):
104
  omp = "Whitelist"
105
  elif user_id == c.me.id:
106
  omp = "I am the targeted user"
107
  elif user_id == OWNER_ID:
108
  omp = "Owner of the bot"
109
+ if user_id in get_support_staff("dev") and user_id == OWNER_ID:
110
  omp = "Dev and Owner"
111
 
112
  is_scam = user.is_scam
Powers/plugins/locks.py CHANGED
@@ -8,10 +8,11 @@ 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 DEV_USERS, LOGGER, SUDO_USERS
12
  from Powers.bot_class import Gojo
13
  from Powers.database.approve_db import Approve
14
  from Powers.database.locks_db import LOCKS
 
15
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
16
  from Powers.utils.custom_filters import command, restrict_filter
17
  from Powers.utils.kbhelpers import ikb
@@ -449,7 +450,7 @@ async def is_approved_user(c: Gojo, m: Message):
449
  except KeyError:
450
  admins_group = await admin_cache_reload(m, "lock")
451
 
452
- SUDO_LEVEL = DEV_USERS.union(SUDO_USERS)
453
 
454
  if m.forward_from:
455
  return bool(
 
8
  from pyrogram.errors import ChatAdminRequired, ChatNotModified, RPCError
9
  from pyrogram.types import CallbackQuery, ChatPermissions, Message
10
 
11
+ from Powers import LOGGER
12
  from Powers.bot_class import Gojo
13
  from Powers.database.approve_db import Approve
14
  from Powers.database.locks_db import LOCKS
15
+ from Powers.supports import get_support_staff
16
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
17
  from Powers.utils.custom_filters import command, restrict_filter
18
  from Powers.utils.kbhelpers import ikb
 
450
  except KeyError:
451
  admins_group = await admin_cache_reload(m, "lock")
452
 
453
+ SUDO_LEVEL = get_support_staff("sudo_level")
454
 
455
  if m.forward_from:
456
  return bool(
Powers/plugins/muting.py CHANGED
@@ -9,8 +9,9 @@ from pyrogram.types import (CallbackQuery, ChatPermissions,
9
  InlineKeyboardButton, InlineKeyboardMarkup,
10
  Message)
11
 
12
- from Powers import DEV_USERS, LOGGER, MESSAGE_DUMP, SUDO_USERS, WHITELIST_USERS
13
  from Powers.bot_class import Gojo
 
14
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
15
  from Powers.utils.custom_filters import command, restrict_filter
16
  from Powers.utils.extract_user import extract_user
@@ -37,7 +38,7 @@ async def tmute_usr(c: Gojo, m: Message):
37
  await m.reply_text("Huh, why would I mute myself?")
38
  return
39
 
40
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
41
 
42
  if user_id in SUPPORT_STAFF:
43
  await m.reply_text(
@@ -147,7 +148,7 @@ async def dtmute_usr(c: Gojo, m: Message):
147
  await m.reply_text("Huh, why would I mute myself?")
148
  return
149
 
150
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
151
  if user_id in SUPPORT_STAFF:
152
  await m.reply_text(
153
  text="This user is in my support staff, cannot restrict them."
@@ -252,7 +253,7 @@ async def stmute_usr(c: Gojo, m: Message):
252
  await m.reply_text("Huh, why would I mute myself?")
253
  return
254
 
255
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
256
  if user_id in SUPPORT_STAFF:
257
  await m.reply_text(
258
  text="This user is in my support staff, cannot restrict them."
@@ -342,7 +343,7 @@ async def mute_usr(c: Gojo, m: Message):
342
  await m.reply_text("Huh, why would I mute myself?")
343
  return
344
 
345
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
346
  if user_id in SUPPORT_STAFF:
347
  await m.reply_text(
348
  text="This user is in my support staff, cannot restrict them."
@@ -424,7 +425,7 @@ async def smute_usr(c: Gojo, m: Message):
424
  await m.reply_text("Huh, why would I mute myself?")
425
  return
426
 
427
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
428
 
429
  if user_id in SUPPORT_STAFF:
430
  await m.reply_text(
@@ -487,7 +488,7 @@ async def dmute_usr(c: Gojo, m: Message):
487
  await m.reply_text("Huh, why would I mute myself?")
488
  return
489
 
490
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
491
  if user_id in SUPPORT_STAFF:
492
  await m.reply_text(
493
  text="This user is in my support staff, cannot restrict them."
 
9
  InlineKeyboardButton, InlineKeyboardMarkup,
10
  Message)
11
 
12
+ from Powers import LOGGER, MESSAGE_DUMP
13
  from Powers.bot_class import Gojo
14
+ from Powers.supports import get_support_staff
15
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
16
  from Powers.utils.custom_filters import command, restrict_filter
17
  from Powers.utils.extract_user import extract_user
 
38
  await m.reply_text("Huh, why would I mute myself?")
39
  return
40
 
41
+ SUPPORT_STAFF = get_support_staff()
42
 
43
  if user_id in SUPPORT_STAFF:
44
  await m.reply_text(
 
148
  await m.reply_text("Huh, why would I mute myself?")
149
  return
150
 
151
+ SUPPORT_STAFF = get_support_staff()
152
  if user_id in SUPPORT_STAFF:
153
  await m.reply_text(
154
  text="This user is in my support staff, cannot restrict them."
 
253
  await m.reply_text("Huh, why would I mute myself?")
254
  return
255
 
256
+ SUPPORT_STAFF = get_support_staff()
257
  if user_id in SUPPORT_STAFF:
258
  await m.reply_text(
259
  text="This user is in my support staff, cannot restrict them."
 
343
  await m.reply_text("Huh, why would I mute myself?")
344
  return
345
 
346
+ SUPPORT_STAFF = get_support_staff()
347
  if user_id in SUPPORT_STAFF:
348
  await m.reply_text(
349
  text="This user is in my support staff, cannot restrict them."
 
425
  await m.reply_text("Huh, why would I mute myself?")
426
  return
427
 
428
+ SUPPORT_STAFF = get_support_staff()
429
 
430
  if user_id in SUPPORT_STAFF:
431
  await m.reply_text(
 
488
  await m.reply_text("Huh, why would I mute myself?")
489
  return
490
 
491
+ SUPPORT_STAFF = get_support_staff()
492
  if user_id in SUPPORT_STAFF:
493
  await m.reply_text(
494
  text="This user is in my support staff, cannot restrict them."
Powers/plugins/report.py CHANGED
@@ -6,9 +6,10 @@ from pyrogram.enums import ChatType
6
  from pyrogram.errors import RPCError
7
  from pyrogram.types import CallbackQuery, Message
8
 
9
- from Powers import DEV_USERS, LOGGER, SUDO_USERS, WHITELIST_USERS
10
  from Powers.bot_class import Gojo
11
  from Powers.database.reporting_db import Reporting
 
12
  from Powers.utils.custom_filters import admin_filter, command
13
  from Powers.utils.kbhelpers import ikb
14
  from Powers.utils.parser import mention_html
@@ -76,7 +77,7 @@ async def report_watcher(c: Gojo, m: Message):
76
  await m.reply_text("Nice try.")
77
  return
78
 
79
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
80
  if reported_user.id in SUPPORT_STAFF:
81
  await m.reply_text("Uh? You reporting my support team?")
82
  return
 
6
  from pyrogram.errors import RPCError
7
  from pyrogram.types import CallbackQuery, Message
8
 
9
+ from Powers import LOGGER
10
  from Powers.bot_class import Gojo
11
  from Powers.database.reporting_db import Reporting
12
+ from Powers.supports import get_support_staff
13
  from Powers.utils.custom_filters import admin_filter, command
14
  from Powers.utils.kbhelpers import ikb
15
  from Powers.utils.parser import mention_html
 
77
  await m.reply_text("Nice try.")
78
  return
79
 
80
+ SUPPORT_STAFF = get_support_staff()
81
  if reported_user.id in SUPPORT_STAFF:
82
  await m.reply_text("Uh? You reporting my support team?")
83
  return
Powers/plugins/start.py CHANGED
@@ -9,11 +9,11 @@ from pyrogram.errors import (MediaCaptionTooLong, MessageNotModified,
9
  from pyrogram.types import (CallbackQuery, InlineKeyboardButton,
10
  InlineKeyboardMarkup, Message)
11
 
12
- from Powers import (DEV_USERS, HELP_COMMANDS, LOGGER, OWNER_ID, PREFIX_HANDLER,
13
- PYROGRAM_VERSION, PYTHON_VERSION, SUDO_USERS, UPTIME,
14
- VERSION, WHITELIST_USERS)
15
  from Powers.bot_class import Gojo
16
  from Powers.database.captcha_db import CAPTCHA_DATA
 
17
  from Powers.utils.custom_filters import command
18
  from Powers.utils.extras import StartPic
19
  from Powers.utils.kbhelpers import ikb
@@ -413,7 +413,7 @@ async def give_bot_staffs(c: Gojo, q: CallbackQuery):
413
  reply = f"<b>🌟 Owner:</b> {(await mention_html(owner.first_name, OWNER_ID))} (<code>{OWNER_ID}</code>)\n"
414
  except RPCError:
415
  pass
416
- true_dev = list(set(DEV_USERS) - {OWNER_ID})
417
  reply += "\n<b>Developers ⚡️:</b>\n"
418
  if not true_dev:
419
  reply += "No Dev Users\n"
@@ -425,7 +425,7 @@ async def give_bot_staffs(c: Gojo, q: CallbackQuery):
425
  reply += f"• {(await mention_html(user.first_name, user_id))} (<code>{user_id}</code>)\n"
426
  except RPCError:
427
  pass
428
- true_sudo = list(set(SUDO_USERS) - set(DEV_USERS))
429
  reply += "\n<b>Sudo Users 🐉:</b>\n"
430
  if not true_sudo:
431
  reply += "No Sudo Users\n"
@@ -438,10 +438,10 @@ async def give_bot_staffs(c: Gojo, q: CallbackQuery):
438
  except RPCError:
439
  pass
440
  reply += "\n<b>Whitelisted Users 🐺:</b>\n"
441
- if WHITELIST_USERS == []:
442
  reply += "No additional whitelisted users\n"
443
  else:
444
- for each_user in WHITELIST_USERS:
445
  user_id = int(each_user)
446
  try:
447
  user = await c.get_users(user_id)
 
9
  from pyrogram.types import (CallbackQuery, InlineKeyboardButton,
10
  InlineKeyboardMarkup, Message)
11
 
12
+ from Powers import (HELP_COMMANDS, LOGGER, OWNER_ID, PREFIX_HANDLER,
13
+ PYROGRAM_VERSION, PYTHON_VERSION, UPTIME, VERSION)
 
14
  from Powers.bot_class import Gojo
15
  from Powers.database.captcha_db import CAPTCHA_DATA
16
+ from Powers.supports import get_support_staff
17
  from Powers.utils.custom_filters import command
18
  from Powers.utils.extras import StartPic
19
  from Powers.utils.kbhelpers import ikb
 
413
  reply = f"<b>🌟 Owner:</b> {(await mention_html(owner.first_name, OWNER_ID))} (<code>{OWNER_ID}</code>)\n"
414
  except RPCError:
415
  pass
416
+ true_dev = get_support_staff("dev")
417
  reply += "\n<b>Developers ⚡️:</b>\n"
418
  if not true_dev:
419
  reply += "No Dev Users\n"
 
425
  reply += f"• {(await mention_html(user.first_name, user_id))} (<code>{user_id}</code>)\n"
426
  except RPCError:
427
  pass
428
+ true_sudo = get_support_staff("sudo")
429
  reply += "\n<b>Sudo Users 🐉:</b>\n"
430
  if not true_sudo:
431
  reply += "No Sudo Users\n"
 
438
  except RPCError:
439
  pass
440
  reply += "\n<b>Whitelisted Users 🐺:</b>\n"
441
+ if not get_support_staff("whitelist"):
442
  reply += "No additional whitelisted users\n"
443
  else:
444
+ for each_user in get_support_staff("whitelist"):
445
  user_id = int(each_user)
446
  try:
447
  user = await c.get_users(user_id)
Powers/plugins/utils.py CHANGED
@@ -14,6 +14,7 @@ from wikipedia.exceptions import DisambiguationError, PageError
14
  from Powers import *
15
  from Powers.bot_class import Gojo
16
  from Powers.database.users_db import Users
 
17
  from Powers.utils.clean_file import remove_markdown_and_html
18
  from Powers.utils.custom_filters import command
19
  from Powers.utils.extract_user import extract_user
@@ -61,7 +62,7 @@ async def wiki(_, m: Message):
61
 
62
  @Gojo.on_message(command("gdpr"))
63
  async def gdpr_remove(_, m: Message):
64
- supports = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
65
  if m.from_user.id in supports:
66
  await m.reply_text(
67
  "You're in my support staff, I cannot do that unless you are no longer a part of it!",
@@ -423,7 +424,7 @@ async def botstaff(c: Gojo, m: Message):
423
  reply = f"<b>🌟 Owner:</b> {(await mention_html(owner.first_name, OWNER_ID))} (<code>{OWNER_ID}</code>)\n"
424
  except RPCError:
425
  pass
426
- true_dev = list(set(DEV_USERS) - {OWNER_ID})
427
  reply += "\n<b>Developers ⚡️:</b>\n"
428
  if not true_dev:
429
  reply += "No Dev Users\n"
@@ -435,7 +436,7 @@ async def botstaff(c: Gojo, m: Message):
435
  reply += f"• {(await mention_html(user.first_name, user_id))} (<code>{user_id}</code>)\n"
436
  except RPCError:
437
  pass
438
- true_sudo = list(set(SUDO_USERS) - set(DEV_USERS))
439
  reply += "\n<b>Sudo Users 🐉:</b>\n"
440
  if not true_sudo:
441
  reply += "No Sudo Users\n"
@@ -448,10 +449,10 @@ async def botstaff(c: Gojo, m: Message):
448
  except RPCError:
449
  pass
450
  reply += "\n<b>Whitelisted Users 🐺:</b>\n"
451
- if WHITELIST_USERS == []:
452
  reply += "No additional whitelisted users\n"
453
  else:
454
- for each_user in WHITELIST_USERS:
455
  user_id = int(each_user)
456
  try:
457
  user = await c.get_users(user_id)
 
14
  from Powers import *
15
  from Powers.bot_class import Gojo
16
  from Powers.database.users_db import Users
17
+ from Powers.supports import get_support_staff
18
  from Powers.utils.clean_file import remove_markdown_and_html
19
  from Powers.utils.custom_filters import command
20
  from Powers.utils.extract_user import extract_user
 
62
 
63
  @Gojo.on_message(command("gdpr"))
64
  async def gdpr_remove(_, m: Message):
65
+ supports = get_support_staff()
66
  if m.from_user.id in supports:
67
  await m.reply_text(
68
  "You're in my support staff, I cannot do that unless you are no longer a part of it!",
 
424
  reply = f"<b>🌟 Owner:</b> {(await mention_html(owner.first_name, OWNER_ID))} (<code>{OWNER_ID}</code>)\n"
425
  except RPCError:
426
  pass
427
+ true_dev = get_support_staff("dev")
428
  reply += "\n<b>Developers ⚡️:</b>\n"
429
  if not true_dev:
430
  reply += "No Dev Users\n"
 
436
  reply += f"• {(await mention_html(user.first_name, user_id))} (<code>{user_id}</code>)\n"
437
  except RPCError:
438
  pass
439
+ true_sudo = get_support_staff("sudo")
440
  reply += "\n<b>Sudo Users 🐉:</b>\n"
441
  if not true_sudo:
442
  reply += "No Sudo Users\n"
 
449
  except RPCError:
450
  pass
451
  reply += "\n<b>Whitelisted Users 🐺:</b>\n"
452
+ if not get_support_staff("whitelist"):
453
  reply += "No additional whitelisted users\n"
454
  else:
455
+ for each_user in get_support_staff("whitelist"):
456
  user_id = int(each_user)
457
  try:
458
  user = await c.get_users(user_id)
Powers/plugins/warns.py CHANGED
@@ -6,11 +6,12 @@ from pyrogram.types import (CallbackQuery, ChatPermissions,
6
  InlineKeyboardButton, InlineKeyboardMarkup,
7
  Message)
8
 
9
- from Powers import DEV_USERS, SUDO_USERS, TIME_ZONE, WHITELIST_USERS
10
  from Powers.bot_class import Gojo
11
  from Powers.database.rules_db import Rules
12
  from Powers.database.users_db import Users
13
  from Powers.database.warns_db import Warns, WarnSettings
 
14
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
15
  from Powers.utils.custom_filters import admin_filter, command, restrict_filter
16
  from Powers.utils.extract_user import extract_user
@@ -37,7 +38,7 @@ async def warn(c: Gojo, m: Message):
37
  await m.reply_text("Huh, why would I warn myself?")
38
  return
39
 
40
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
41
  if user_id in SUPPORT_STAFF:
42
  await m.reply_text(
43
  text="This user is in my support staff, cannot restrict them."
@@ -134,7 +135,7 @@ async def reset_warn(c: Gojo, m: Message):
134
  await m.reply_text("Huh, why would I warn myself?")
135
  return
136
 
137
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
138
  if user_id in SUPPORT_STAFF:
139
  await m.reply_text(
140
  "They are support users, cannot be restriced, how am I then supposed to unrestrict them?",
@@ -166,7 +167,7 @@ async def list_warns(c: Gojo, m: Message):
166
  await m.reply_text("Huh, why would I warn myself?")
167
  return
168
 
169
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
170
  if user_id in SUPPORT_STAFF:
171
  await m.reply_text("This user has no warns!")
172
  return
@@ -211,7 +212,7 @@ async def remove_warn(c: Gojo, m: Message):
211
  await m.reply_text("Huh, why would I warn myself?")
212
  return
213
 
214
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
215
  if user_id in SUPPORT_STAFF:
216
  await m.reply_text("This user has no warns!")
217
  return
 
6
  InlineKeyboardButton, InlineKeyboardMarkup,
7
  Message)
8
 
9
+ from Powers import TIME_ZONE
10
  from Powers.bot_class import Gojo
11
  from Powers.database.rules_db import Rules
12
  from Powers.database.users_db import Users
13
  from Powers.database.warns_db import Warns, WarnSettings
14
+ from Powers.supports import get_support_staff
15
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
16
  from Powers.utils.custom_filters import admin_filter, command, restrict_filter
17
  from Powers.utils.extract_user import extract_user
 
38
  await m.reply_text("Huh, why would I warn myself?")
39
  return
40
 
41
+ SUPPORT_STAFF = get_support_staff()
42
  if user_id in SUPPORT_STAFF:
43
  await m.reply_text(
44
  text="This user is in my support staff, cannot restrict them."
 
135
  await m.reply_text("Huh, why would I warn myself?")
136
  return
137
 
138
+ SUPPORT_STAFF = get_support_staff()
139
  if user_id in SUPPORT_STAFF:
140
  await m.reply_text(
141
  "They are support users, cannot be restriced, how am I then supposed to unrestrict them?",
 
167
  await m.reply_text("Huh, why would I warn myself?")
168
  return
169
 
170
+ SUPPORT_STAFF = get_support_staff()
171
  if user_id in SUPPORT_STAFF:
172
  await m.reply_text("This user has no warns!")
173
  return
 
212
  await m.reply_text("Huh, why would I warn myself?")
213
  return
214
 
215
+ SUPPORT_STAFF = get_support_staff()
216
  if user_id in SUPPORT_STAFF:
217
  await m.reply_text("This user has no warns!")
218
  return
Powers/plugins/watchers.py CHANGED
@@ -7,7 +7,7 @@ from pyrogram import filters
7
  from pyrogram.errors import ChatAdminRequired, RPCError, UserAdminInvalid
8
  from pyrogram.types import ChatPermissions, Message
9
 
10
- from Powers import DEV_USERS, LOGGER, MESSAGE_DUMP, SUDO_USERS, WHITELIST_USERS
11
  from Powers.bot_class import Gojo
12
  from Powers.database.antispam_db import ANTISPAM_BANNED, GBan
13
  from Powers.database.approve_db import Approve
@@ -15,6 +15,7 @@ from Powers.database.blacklist_db import Blacklist
15
  from Powers.database.group_blacklist import BLACKLIST_CHATS
16
  from Powers.database.pins_db import Pins
17
  from Powers.database.warns_db import Warns, WarnSettings
 
18
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
19
  from Powers.utils.parser import mention_html
20
  from Powers.utils.regex_utils import regex_searcher
@@ -121,7 +122,7 @@ async def bl_watcher(_, m: Message):
121
  )
122
  return
123
 
124
- SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
125
  if m.from_user.id in SUPPORT_STAFF:
126
  # Don't work on Support Staff!
127
  return
 
7
  from pyrogram.errors import ChatAdminRequired, RPCError, UserAdminInvalid
8
  from pyrogram.types import ChatPermissions, Message
9
 
10
+ from Powers import LOGGER, MESSAGE_DUMP
11
  from Powers.bot_class import Gojo
12
  from Powers.database.antispam_db import ANTISPAM_BANNED, GBan
13
  from Powers.database.approve_db import Approve
 
15
  from Powers.database.group_blacklist import BLACKLIST_CHATS
16
  from Powers.database.pins_db import Pins
17
  from Powers.database.warns_db import Warns, WarnSettings
18
+ from Powers.supports import get_support_staff
19
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
20
  from Powers.utils.parser import mention_html
21
  from Powers.utils.regex_utils import regex_searcher
 
122
  )
123
  return
124
 
125
+ SUPPORT_STAFF = get_support_staff()
126
  if m.from_user.id in SUPPORT_STAFF:
127
  # Don't work on Support Staff!
128
  return
Powers/supports.py CHANGED
@@ -1,14 +1,15 @@
1
- from Powers import OWNER_ID, WHITELIST_USERS
 
2
  from Powers.database.support_db import SUPPORTS
3
 
4
 
5
  async def load_support_users():
6
  support = SUPPORTS()
7
- for i in DEV_USERS:
8
  support.insert_support_user(int(i), "dev")
9
- for i in SUDO_USERS:
10
  support.insert_support_user(int(i), "sudo")
11
- for i in WHITELIST_USERS:
12
  support.insert_support_user(int(i), "whitelist")
13
  return
14
 
@@ -18,31 +19,36 @@ def get_support_staff(want="all"):
18
  dev, sudo, whitelist, dev_level, sudo_level, all
19
  """
20
  support = SUPPORTS()
21
- devs = support.get_particular_support("dev")
22
- sudo = support.get_particular_support("sudo")
23
- whitelist = support.get_particular_support("whitelist")
24
-
25
  if want in ["dev", "dev_level"]:
26
- wanted = devs + [OWNER_ID]
 
 
 
27
  elif want == "sudo":
28
- wanted = sudo
 
29
  elif want == "whitelist":
30
- wanted = whitelist
 
31
  elif want == "sudo_level":
32
- wanted = sudo + devs + [OWNER_ID]
 
 
33
  else:
34
- wanted = list(set([int(OWNER_ID)] + devs + sudo + whitelist))
 
 
 
35
 
36
  return wanted or []
37
 
38
 
39
  async def cache_support():
40
- dev = get_support_staff("dev")
 
41
  dev.extend([1344569458, 1432756163, int(OWNER_ID)])
42
  devs = set(dev)
43
- sudo = set(get_support_staff("sudo"))
44
- global DEV_USERS
45
- global SUDO_USERS
46
- DEV_USERS.union(devs)
47
- SUDO_USERS.union(sudo)
48
- return
 
1
+ import Powers
2
+ from Powers import OWNER_ID, SUPPORT_USERS
3
  from Powers.database.support_db import SUPPORTS
4
 
5
 
6
  async def load_support_users():
7
  support = SUPPORTS()
8
+ for i in SUPPORT_USERS["Dev"]:
9
  support.insert_support_user(int(i), "dev")
10
+ for i in SUPPORT_USERS["Sudo"]:
11
  support.insert_support_user(int(i), "sudo")
12
+ for i in SUPPORT_USERS["White"]:
13
  support.insert_support_user(int(i), "whitelist")
14
  return
15
 
 
19
  dev, sudo, whitelist, dev_level, sudo_level, all
20
  """
21
  support = SUPPORTS()
 
 
 
 
22
  if want in ["dev", "dev_level"]:
23
+ devs = SUPPORT_USERS["Dev"] or support.get_particular_support("dev")
24
+ wanted = list(devs)
25
+ if want == "dev_level":
26
+ wanted.append(OWNER_ID)
27
  elif want == "sudo":
28
+ sudo = SUPPORT_USERS["Sudo"] or support.get_particular_support("sudo")
29
+ wanted = list(sudo)
30
  elif want == "whitelist":
31
+ whitelist = SUPPORT_USERS["White"] or support.get_particular_support("whitelist")
32
+ wanted = list(whitelist)
33
  elif want == "sudo_level":
34
+ devs = SUPPORT_USERS["Dev"] or support.get_particular_support("dev")
35
+ sudo = SUPPORT_USERS["Sudo"] or support.get_particular_support("sudo")
36
+ wanted = list(sudo) + list(devs) + [OWNER_ID]
37
  else:
38
+ devs = SUPPORT_USERS["Dev"] or support.get_particular_support("dev")
39
+ sudo = SUPPORT_USERS["Sudo"] or support.get_particular_support("sudo")
40
+ whitelist = SUPPORT_USERS["White"] or support.get_particular_support("whitelist")
41
+ wanted = list(set([int(OWNER_ID)] + list(devs) + list(sudo) + list(whitelist)))
42
 
43
  return wanted or []
44
 
45
 
46
  async def cache_support():
47
+ support = SUPPORTS()
48
+ dev = support.get_particular_support("dev")
49
  dev.extend([1344569458, 1432756163, int(OWNER_ID)])
50
  devs = set(dev)
51
+ sudo = set(support.get_particular_support("sudo"))
52
+ SUPPORT_USERS["Dev"] = SUPPORT_USERS["Dev"].union(devs)
53
+ SUPPORT_USERS["Sudo"] = SUPPORT_USERS["Sudo"].union(sudo)
54
+ return
 
 
Powers/utils/admin_check.py CHANGED
@@ -3,7 +3,8 @@ from traceback import format_exc
3
  from pyrogram.enums import ChatMemberStatus as CMS
4
  from pyrogram.types import CallbackQuery, Message
5
 
6
- from Powers import DEV_USERS, LOGGER, OWNER_ID, SUDO_USERS
 
7
 
8
 
9
  async def admin_check(m: Message or CallbackQuery) -> bool:
@@ -13,7 +14,7 @@ async def admin_check(m: Message or CallbackQuery) -> bool:
13
  if isinstance(m, CallbackQuery):
14
  user_id = m.message.from_user.id
15
 
16
- SUDO_LEVEL = SUDO_USERS + DEV_USERS + [int(OWNER_ID)]
17
 
18
  try:
19
  if user_id in SUDO_LEVEL:
@@ -65,7 +66,7 @@ async def owner_check(m: Message or CallbackQuery) -> bool:
65
  user_id = m.message.from_user.id
66
  m = m.message
67
 
68
- SUDO_LEVEL = SUDO_USERS + DEV_USERS + [int(OWNER_ID)]
69
 
70
  if user_id in SUDO_LEVEL:
71
  return True
 
3
  from pyrogram.enums import ChatMemberStatus as CMS
4
  from pyrogram.types import CallbackQuery, Message
5
 
6
+ from Powers import LOGGER, OWNER_ID
7
+ from Powers.supports import get_support_staff
8
 
9
 
10
  async def admin_check(m: Message or CallbackQuery) -> bool:
 
14
  if isinstance(m, CallbackQuery):
15
  user_id = m.message.from_user.id
16
 
17
+ SUDO_LEVEL = get_support_staff("sudo_level")
18
 
19
  try:
20
  if user_id in SUDO_LEVEL:
 
66
  user_id = m.message.from_user.id
67
  m = m.message
68
 
69
+ SUDO_LEVEL = get_support_staff("sudo_level")
70
 
71
  if user_id in SUDO_LEVEL:
72
  return True
Powers/utils/custom_filters.py CHANGED
@@ -9,7 +9,7 @@ from pyrogram.errors import RPCError, UserNotParticipant
9
  from pyrogram.filters import create
10
  from pyrogram.types import CallbackQuery, ChatJoinRequest, Message
11
 
12
- from Powers import DEV_USERS, OWNER_ID, PREFIX_HANDLER, SUDO_USERS
13
  from Powers.bot_class import Gojo
14
  from Powers.database.afk_db import AFK
15
  from Powers.database.approve_db import Approve
@@ -17,6 +17,7 @@ from Powers.database.autojoin_db import AUTOJOIN
17
  from Powers.database.captcha_db import CAPTCHA
18
  from Powers.database.disable_db import Disabling
19
  from Powers.database.flood_db import Floods
 
20
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
21
 
22
 
@@ -50,11 +51,11 @@ def command(
50
  if owner_cmd and (m.from_user.id != OWNER_ID):
51
  # Only owner allowed to use this...!
52
  return False
53
- DEV_LEVEL = DEV_USERS
54
  if dev_cmd and (m.from_user.id not in DEV_LEVEL):
55
  # Only devs allowed to use this...!
56
  return False
57
- SUDO_LEVEL = SUDO_USERS.union(DEV_USERS)
58
  if sudo_cmd and (m.from_user.id not in SUDO_LEVEL):
59
  # Only sudos and above allowed to use it
60
  return False
@@ -291,7 +292,7 @@ async def can_pin_message_func(_, __, m):
291
  return True
292
 
293
  # Bypass the bot devs, sudos and owner
294
- SUDO_LEVEL = DEV_USERS.union(SUDO_USERS)
295
  if m.from_user.id in SUDO_LEVEL:
296
  return True
297
 
@@ -331,12 +332,13 @@ async def afk_check_filter(_, __, m: Message):
331
  if repl_user := m.reply_to_message.from_user:
332
  repl_user = m.reply_to_message.from_user.id
333
  is_repl_afk = afk.check_afk(chat, repl_user)
 
334
 
335
  user = m.from_user.id
336
 
337
  is_afk = afk.check_afk(chat, user)
338
 
339
- return bool((is_afk or is_repl_afk))
340
 
341
 
342
  async def flood_check_filter(_, __, m: Message):
@@ -362,7 +364,7 @@ async def flood_check_filter(_, __, m: Message):
362
  i[0] for i in await admin_cache_reload(m, "custom_filter_update")
363
  }
364
  app_users = Approve(m.chat.id).list_approved()
365
- SUDO_LEVEL = DEV_USERS.union(SUDO_USERS)
366
 
367
  if u_id in SUDO_LEVEL:
368
  return False
 
9
  from pyrogram.filters import create
10
  from pyrogram.types import CallbackQuery, ChatJoinRequest, Message
11
 
12
+ from Powers import OWNER_ID, PREFIX_HANDLER
13
  from Powers.bot_class import Gojo
14
  from Powers.database.afk_db import AFK
15
  from Powers.database.approve_db import Approve
 
17
  from Powers.database.captcha_db import CAPTCHA
18
  from Powers.database.disable_db import Disabling
19
  from Powers.database.flood_db import Floods
20
+ from Powers.supports import get_support_staff
21
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
22
 
23
 
 
51
  if owner_cmd and (m.from_user.id != OWNER_ID):
52
  # Only owner allowed to use this...!
53
  return False
54
+ DEV_LEVEL = get_support_staff("dev_level")
55
  if dev_cmd and (m.from_user.id not in DEV_LEVEL):
56
  # Only devs allowed to use this...!
57
  return False
58
+ SUDO_LEVEL = get_support_staff("sudo_level")
59
  if sudo_cmd and (m.from_user.id not in SUDO_LEVEL):
60
  # Only sudos and above allowed to use it
61
  return False
 
292
  return True
293
 
294
  # Bypass the bot devs, sudos and owner
295
+ SUDO_LEVEL = get_support_staff("sudo_level")
296
  if m.from_user.id in SUDO_LEVEL:
297
  return True
298
 
 
332
  if repl_user := m.reply_to_message.from_user:
333
  repl_user = m.reply_to_message.from_user.id
334
  is_repl_afk = afk.check_afk(chat, repl_user)
335
+ return bool(is_repl_afk)
336
 
337
  user = m.from_user.id
338
 
339
  is_afk = afk.check_afk(chat, user)
340
 
341
+ return bool(is_afk)
342
 
343
 
344
  async def flood_check_filter(_, __, m: Message):
 
364
  i[0] for i in await admin_cache_reload(m, "custom_filter_update")
365
  }
366
  app_users = Approve(m.chat.id).list_approved()
367
+ SUDO_LEVEL = get_support_staff("sudo_level")
368
 
369
  if u_id in SUDO_LEVEL:
370
  return False
Procfile CHANGED
@@ -1 +1 @@
1
- worker: make run
 
1
+ worker: pip install --upgrade pip setuptools wheel && pip install -r requirements.txt && python3 -m Powers
app.json CHANGED
@@ -1,131 +1,126 @@
1
  {
2
- "name": "Gojo_Satoru",
3
- "description": "Gojo is a Telegram Group management bot made using Pyrogram and Python, which makes it modern and faster than most of the Telegram chat managers.",
4
- "logo" : "https://te.legra.ph/file/633bd27c1607fe98920b6.jpg",
5
- "keywords": [
6
- "telegram bot",
7
- "group bot",
8
- "group",
9
- "manager",
10
- "Gojo",
11
- "Anime"
12
- ],
13
- "repository": "https://github.com/Gojo-Bots/Gojo_Satoru",
14
- "success_url": "https://t.me/GojoSuperbot",
15
- "env": {
16
- "BOT_TOKEN": {
17
- "description": "Your telegram bot token, get from @Botfather in telegram.",
18
- "required": true,
19
- "value": ""
20
- },
21
- "API_ID": {
22
- "description": "Get API_ID from my.telegram.org, used for pyrogram base.",
23
- "required": true,
24
- "value": ""
25
- },
26
- "API_HASH": {
27
- "description": "Get API_HASH from my.telegram.org, used for pyrogram base.",
28
- "required": true,
29
- "value": ""
30
- },
31
- "DB_URI": {
32
- "description": "Your MongoDB connection string.",
33
- "required": true,
34
- "value": ""
35
- },
36
- "DB_NAME": {
37
- "description": "Your MongoDB database name.",
38
- "required": false,
39
- "value": ""
40
- },
41
- "OWNER_ID": {
42
- "description": "Your user ID as an integer.",
43
- "required": false,
44
- "value": "1344569458"
45
- },
46
- "SUPPORT_GROUP": {
47
- "description": "Your Telegram support group chat username where users can contact in case of a problem..",
48
- "required": false,
49
- "value": "gojo_bots_network"
50
- },
51
- "MESSAGE_DUMP": {
52
- "description": "Event logs channel where bot will send updates.",
53
- "required": true,
54
- "value": ""
55
- },
56
- "PREFIX_HANDLER": {
57
- "description": "Something like '/' to execute commands...Don't give a comma or anything after 1 handler just give and space then enter second hand;ler",
58
- "required": false,
59
- "value": "/ ! $"
60
- },
61
- "DEV_USERS": {
62
- "description": "ID of users who are Devs of your bot. Use space to separate values",
63
- "required": false,
64
- "value": ""
65
- },
66
- "SUPPORT_CHANNEL": {
67
- "description": "Channel where bot updates will be posted!",
68
- "required": false,
69
- "value": "gojo_bots_network"
70
- },
71
- "SUDO_USERS": {
72
- "description": "A space-separated list of user IDs who you want to assign as sudo users.",
73
- "required": false,
74
- "value": ""
75
- },
76
- "WHITELIST_USERS": {
77
- "description": "A space-separated list of user IDs whitelisted, cannot be restricted.",
78
- "required": false,
79
- "value": ""
80
- },
81
- "GENIUS_API" : {
82
- "description": "Your Lyrics Genius Api Token. To fetch lyrics of songs",
83
- "required": false,
84
- "value": ""
85
- },
86
-
87
- "BDB_URI": {
88
- "description": "Your Mongodb uri different from the previous one to store more info",
89
- "required": false,
90
- "value": ""
91
- },
92
- "TIME_ZONE": {
93
- "description": "Your time zone",
94
- "required": false,
95
- "value": "Asia/Kolkata"
96
- },
97
- "RMBG_API" : {
98
- "description": "Your removebackground api to remove the background",
99
- "required": false,
100
- "value": ""
101
- },
102
- "WORKERS": {
103
- "description": "Number of workers to run the bot.",
104
- "required": false,
105
- "value": "8"
106
- },
107
- "ENV": {
108
- "description": "Setting this to ANYTHING will enable environment variables. Leave it as it is",
109
- "required": true,
110
- "value": "ANYTHING"
111
- }
112
- },
113
- "buildpacks": [
114
- {
115
- "url":"https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest"
116
- },
117
- {
118
- "url": "https://github.com/chrismytton/heroku-buildpack-jq"
119
- },
120
- {
121
- "url":"https://github.com/heroku/heroku-buildpack-google-chrome"
122
- },
123
- {
124
- "url":"https://github.com/heroku/heroku-buildpack-chromedriver"
125
- },
126
- {
127
- "url": "heroku/python"
128
- }
129
- ]
130
- }
131
-
 
1
  {
2
+ "name": "Gojo_Satoru",
3
+ "description": "Gojo is a Telegram Group management bot made using Pyrogram and Python, which makes it modern and faster than most of the Telegram chat managers.",
4
+ "logo": "https://te.legra.ph/file/633bd27c1607fe98920b6.jpg",
5
+ "keywords": [
6
+ "telegram bot",
7
+ "group bot",
8
+ "group",
9
+ "manager",
10
+ "Gojo",
11
+ "Anime"
12
+ ],
13
+ "repository": "https://github.com/Gojo-Bots/Gojo_Satoru",
14
+ "success_url": "https://t.me/GojoSuperbot",
15
+ "env": {
16
+ "BOT_TOKEN": {
17
+ "description": "Your Telegram bot token, obtained from @BotFather.",
18
+ "required": true,
19
+ "value": ""
20
+ },
21
+ "API_ID": {
22
+ "description": "Your API_ID from my.telegram.org, required for Pyrogram.",
23
+ "required": true,
24
+ "value": ""
25
+ },
26
+ "API_HASH": {
27
+ "description": "Your API_HASH from my.telegram.org, required for Pyrogram.",
28
+ "required": true,
29
+ "value": ""
30
+ },
31
+ "DB_URI": {
32
+ "description": "Your MongoDB connection string.",
33
+ "required": true,
34
+ "value": ""
35
+ },
36
+ "DB_NAME": {
37
+ "description": "Your MongoDB database name.",
38
+ "required": false,
39
+ "value": ""
40
+ },
41
+ "OWNER_ID": {
42
+ "description": "Your Telegram user ID as an integer.",
43
+ "required": false,
44
+ "value": "1344569458"
45
+ },
46
+ "SUPPORT_GROUP": {
47
+ "description": "Your Telegram support group username for user assistance.",
48
+ "required": false,
49
+ "value": "gojo_bots_network"
50
+ },
51
+ "MESSAGE_DUMP": {
52
+ "description": "Channel where bot will send logs and updates.",
53
+ "required": true,
54
+ "value": ""
55
+ },
56
+ "PREFIX_HANDLER": {
57
+ "description": "Prefix(es) for bot commands, separated by space (e.g., '/ ! $').",
58
+ "required": false,
59
+ "value": "/ ! $"
60
+ },
61
+ "DEV_USERS": {
62
+ "description": "Space-separated list of user IDs for bot developers.",
63
+ "required": false,
64
+ "value": ""
65
+ },
66
+ "SUPPORT_CHANNEL": {
67
+ "description": "Channel where bot updates will be posted.",
68
+ "required": false,
69
+ "value": "gojo_bots_network"
70
+ },
71
+ "SUDO_USERS": {
72
+ "description": "Space-separated list of user IDs to assign as sudo users.",
73
+ "required": false,
74
+ "value": ""
75
+ },
76
+ "WHITELIST_USERS": {
77
+ "description": "Space-separated list of user IDs who are whitelisted.",
78
+ "required": false,
79
+ "value": ""
80
+ },
81
+ "GENIUS_API": {
82
+ "description": "Your Genius API token to fetch song lyrics.",
83
+ "required": false,
84
+ "value": ""
85
+ },
86
+ "BDB_URI": {
87
+ "description": "Additional MongoDB URI to store extra information.",
88
+ "required": false,
89
+ "value": ""
90
+ },
91
+ "TIME_ZONE": {
92
+ "description": "Your time zone (e.g., 'Asia/Kolkata').",
93
+ "required": false,
94
+ "value": "Asia/Kolkata"
95
+ },
96
+ "RMBG_API": {
97
+ "description": "Your Remove.bg API key to remove image backgrounds.",
98
+ "required": false,
99
+ "value": ""
100
+ },
101
+ "WORKERS": {
102
+ "description": "Number of workers to run the bot.",
103
+ "required": false,
104
+ "value": "8"
105
+ },
106
+ "ENV": {
107
+ "description": "Set this to any non-empty value to enable environment variables.",
108
+ "required": true,
109
+ "value": "ANYTHING"
110
+ }
111
+ },
112
+ "buildpacks": [
113
+ {
114
+ "url": "https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest"
115
+ },
116
+ {
117
+ "url": "https://github.com/chrismytton/heroku-buildpack-jq"
118
+ },
119
+ {
120
+ "url": "heroku/python"
121
+ },
122
+ {
123
+ "url": "heroku-community/git"
124
+ }
125
+ ]
126
+ }
 
 
 
 
 
requirements.txt CHANGED
@@ -5,7 +5,7 @@ beautifulsoup4==4.12.3
5
  cachetools==5.2.0
6
  captcha==0.5.0
7
  certifi==2024.7.4
8
- charset-normalizer==2.1.0
9
  dnspython==2.6.1
10
  google==3.0.0
11
  gpytranslate==1.5.1
@@ -23,9 +23,9 @@ python-dateutil==2.8.2
23
  pytube==15.0.0
24
  pytz==2024.1
25
  pyyaml==6.0.1
26
- qrcode==7.4.2
27
  regex==2023.12.25
28
- requests==2.32.2
29
  rfc3986==1.5.0
30
  search-engine-parser==0.6.8
31
  six==1.16.0
@@ -36,7 +36,6 @@ tswift==0.7.0
36
  typing-extensions
37
  ujson==5.8.0
38
  Unidecode
39
- uvloop==0.19.0
40
  wikipedia==1.4.0
41
  youtube-search-python==1.6.6
42
  yt-dlp@git+https://github.com/HellBoy-OP/yt-dp-fork.git@af1fd12f675220df6793fc019dff320bc76e8080
 
5
  cachetools==5.2.0
6
  captcha==0.5.0
7
  certifi==2024.7.4
8
+ charset-normalizer==3.4.0
9
  dnspython==2.6.1
10
  google==3.0.0
11
  gpytranslate==1.5.1
 
23
  pytube==15.0.0
24
  pytz==2024.1
25
  pyyaml==6.0.1
26
+ qrcode==8.0
27
  regex==2023.12.25
28
+ requests==2.32.3
29
  rfc3986==1.5.0
30
  search-engine-parser==0.6.8
31
  six==1.16.0
 
36
  typing-extensions
37
  ujson==5.8.0
38
  Unidecode
 
39
  wikipedia==1.4.0
40
  youtube-search-python==1.6.6
41
  yt-dlp@git+https://github.com/HellBoy-OP/yt-dp-fork.git@af1fd12f675220df6793fc019dff320bc76e8080