Spaces:
Sleeping
Sleeping
Captain Ezio
commited on
Commit
·
6dcea66
1
Parent(s):
c62ca93
almost done
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- Powers/__init__.py +4 -16
- Powers/bot_class.py +1 -0
- Powers/database/antispam_db.py +2 -1
- Powers/database/approve_db.py +0 -2
- Powers/database/blacklist_db.py +0 -2
- Powers/database/chats_db.py +0 -1
- Powers/database/disable_db.py +0 -2
- Powers/database/filters_db.py +9 -1
- Powers/database/greetings_db.py +0 -2
- Powers/database/locks_db.py +32 -20
- Powers/database/pins_db.py +0 -1
- Powers/database/reporting_db.py +0 -2
- Powers/database/rules_db.py +0 -2
- Powers/database/users_db.py +0 -1
- Powers/database/warns_db.py +0 -4
- Powers/plugins/admin.py +11 -18
- Powers/plugins/antispam.py +8 -9
- Powers/plugins/approve.py +0 -6
- Powers/plugins/auto_join.py +2 -3
- Powers/plugins/bans.py +17 -49
- Powers/plugins/birthday.py +8 -8
- Powers/plugins/blacklist.py +0 -9
- Powers/plugins/captcha.py +2 -3
- Powers/plugins/chat_blacklist.py +0 -3
- Powers/plugins/clean_db.py +0 -1
- Powers/plugins/dev.py +23 -6
- Powers/plugins/disable.py +0 -7
- Powers/plugins/filters.py +3 -8
- Powers/plugins/flood.py +5 -7
- Powers/plugins/formatting.py +0 -1
- Powers/plugins/fun.py +1 -19
- Powers/plugins/greetings.py +7 -19
- Powers/plugins/info.py +12 -9
- Powers/plugins/locks.py +21 -34
- Powers/plugins/muting.py +10 -34
- Powers/plugins/notes.py +3 -15
- Powers/plugins/pin.py +2 -12
- Powers/plugins/report.py +3 -13
- Powers/plugins/rules.py +1 -8
- Powers/plugins/scheduled_jobs.py +0 -3
- Powers/plugins/start.py +3 -12
- Powers/plugins/stats.py +5 -2
- Powers/plugins/stickers.py +12 -43
- Powers/plugins/utils.py +2 -8
- Powers/plugins/warns.py +5 -19
- Powers/plugins/watchers.py +6 -18
- Powers/plugins/web_con.py +22 -23
- Powers/supports.py +11 -3
- Powers/utils/admin_check.py +6 -7
- Powers/utils/caching.py +0 -3
Powers/__init__.py
CHANGED
@@ -123,23 +123,11 @@ MESSAGE_DUMP = Config.MESSAGE_DUMP
|
|
123 |
SUPPORT_GROUP = Config.SUPPORT_GROUP
|
124 |
SUPPORT_CHANNEL = Config.SUPPORT_CHANNEL
|
125 |
|
126 |
-
# Users Config
|
127 |
OWNER_ID = Config.OWNER_ID
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
WHITELIST_USERS = Config.WHITELIST_USERS
|
132 |
-
|
133 |
-
|
134 |
-
defult_dev = [1344569458, 1432756163, 5294360309] + [int(OWNER_ID)]
|
135 |
-
|
136 |
-
Defult_dev = set(defult_dev)
|
137 |
-
|
138 |
-
DEVS = DEVS_USER | Defult_dev
|
139 |
-
DEV_USERS = list(DEVS)
|
140 |
-
|
141 |
-
CHROME_BIN = Config.CHROME_BIN
|
142 |
-
CHROME_DRIVER = Config.CHROME_DRIVER
|
143 |
|
144 |
# Plugins, DB and Workers
|
145 |
DB_URI = Config.DB_URI
|
|
|
123 |
SUPPORT_GROUP = Config.SUPPORT_GROUP
|
124 |
SUPPORT_CHANNEL = Config.SUPPORT_CHANNEL
|
125 |
|
126 |
+
# Users Config
|
127 |
OWNER_ID = Config.OWNER_ID
|
128 |
+
DEV_USERS = set(Config.DEV_USERS)
|
129 |
+
SUDO_USERS = set(Config.SUDO_USERS)
|
130 |
+
WHITELIST_USERS = set(Config.WHITELIST_USERS)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
|
132 |
# Plugins, DB and Workers
|
133 |
DB_URI = Config.DB_URI
|
Powers/bot_class.py
CHANGED
@@ -67,6 +67,7 @@ class Gojo(Client):
|
|
67 |
# Get cmds and keys
|
68 |
cmd_list = await load_cmds(await all_plugins())
|
69 |
await load_support_users()
|
|
|
70 |
LOGGER.info(f"Plugins Loaded: {cmd_list}")
|
71 |
scheduler.add_job(clean_my_db, 'cron', [
|
72 |
self], hour=3, minute=0, second=0)
|
|
|
67 |
# Get cmds and keys
|
68 |
cmd_list = await load_cmds(await all_plugins())
|
69 |
await load_support_users()
|
70 |
+
await cache_support()
|
71 |
LOGGER.info(f"Plugins Loaded: {cmd_list}")
|
72 |
scheduler.add_job(clean_my_db, 'cron', [
|
73 |
self], hour=3, minute=0, second=0)
|
Powers/database/antispam_db.py
CHANGED
@@ -28,6 +28,7 @@ class GBan(MongoDB):
|
|
28 |
return self.update_gban_reason(user_id, reason)
|
29 |
|
30 |
# If not already gbanned, then add to gban
|
|
|
31 |
time_rn = datetime.now(TZ)
|
32 |
return self.insert_one(
|
33 |
{
|
@@ -43,8 +44,8 @@ class GBan(MongoDB):
|
|
43 |
with INSERTION_LOCK:
|
44 |
# Check if user is already gbanned or not
|
45 |
if self.find_one({"_id": user_id}):
|
|
|
46 |
return self.delete_one({"_id": user_id})
|
47 |
-
|
48 |
return "User not gbanned!"
|
49 |
|
50 |
def get_gban(self, user_id: int):
|
|
|
28 |
return self.update_gban_reason(user_id, reason)
|
29 |
|
30 |
# If not already gbanned, then add to gban
|
31 |
+
ANTISPAM_BANNED.add(user_id)
|
32 |
time_rn = datetime.now(TZ)
|
33 |
return self.insert_one(
|
34 |
{
|
|
|
44 |
with INSERTION_LOCK:
|
45 |
# Check if user is already gbanned or not
|
46 |
if self.find_one({"_id": user_id}):
|
47 |
+
ANTISPAM_BANNED.remove(user_id)
|
48 |
return self.delete_one({"_id": user_id})
|
|
|
49 |
return "User not gbanned!"
|
50 |
|
51 |
def get_gban(self, user_id: int):
|
Powers/database/approve_db.py
CHANGED
@@ -81,8 +81,6 @@ class Approve(MongoDB):
|
|
81 |
if not chat_data:
|
82 |
new_data = {"_id": self.chat_id, "users": []}
|
83 |
self.insert_one(new_data)
|
84 |
-
LOGGER.info(
|
85 |
-
f"Initialized Approve Document for chat {self.chat_id}")
|
86 |
return new_data
|
87 |
return chat_data
|
88 |
# Migrate if chat id changes!
|
|
|
81 |
if not chat_data:
|
82 |
new_data = {"_id": self.chat_id, "users": []}
|
83 |
self.insert_one(new_data)
|
|
|
|
|
84 |
return new_data
|
85 |
return chat_data
|
86 |
# Migrate if chat id changes!
|
Powers/database/blacklist_db.py
CHANGED
@@ -110,8 +110,6 @@ class Blacklist(MongoDB):
|
|
110 |
"reason": "Automated blacklisted word: {{}}",
|
111 |
}
|
112 |
self.insert_one(new_data)
|
113 |
-
LOGGER.info(
|
114 |
-
f"Initialized Blacklist Document for chat {self.chat_id}")
|
115 |
return new_data
|
116 |
return chat_data
|
117 |
|
|
|
110 |
"reason": "Automated blacklisted word: {{}}",
|
111 |
}
|
112 |
self.insert_one(new_data)
|
|
|
|
|
113 |
return new_data
|
114 |
return chat_data
|
115 |
|
Powers/database/chats_db.py
CHANGED
@@ -107,7 +107,6 @@ class Chats(MongoDB):
|
|
107 |
if not chat_data:
|
108 |
new_data = {"_id": self.chat_id, "chat_name": "", "users": []}
|
109 |
self.insert_one(new_data)
|
110 |
-
LOGGER.info(f"Initialized Chats Document for chat {self.chat_id}")
|
111 |
return new_data
|
112 |
return chat_data
|
113 |
|
|
|
107 |
if not chat_data:
|
108 |
new_data = {"_id": self.chat_id, "chat_name": "", "users": []}
|
109 |
self.insert_one(new_data)
|
|
|
110 |
return new_data
|
111 |
return chat_data
|
112 |
|
Powers/database/disable_db.py
CHANGED
@@ -149,8 +149,6 @@ class Disabling(MongoDB):
|
|
149 |
DISABLED_CMDS[self.chat_id] = {
|
150 |
"commands": [], "action": "none"}
|
151 |
self.insert_one(new_data)
|
152 |
-
LOGGER.info(
|
153 |
-
f"Initialized Disabling Document for chat {self.chat_id}")
|
154 |
return new_data
|
155 |
DISABLED_CMDS[self.chat_id] = chat_data
|
156 |
return chat_data
|
|
|
149 |
DISABLED_CMDS[self.chat_id] = {
|
150 |
"commands": [], "action": "none"}
|
151 |
self.insert_one(new_data)
|
|
|
|
|
152 |
return new_data
|
153 |
DISABLED_CMDS[self.chat_id] = chat_data
|
154 |
return chat_data
|
Powers/database/filters_db.py
CHANGED
@@ -24,7 +24,15 @@ class Filters(MongoDB):
|
|
24 |
# Database update
|
25 |
curr = self.find_one({"chat_id": chat_id, "keyword": keyword})
|
26 |
if curr:
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
return self.insert_one(
|
29 |
{
|
30 |
"chat_id": chat_id,
|
|
|
24 |
# Database update
|
25 |
curr = self.find_one({"chat_id": chat_id, "keyword": keyword})
|
26 |
if curr:
|
27 |
+
self.update(
|
28 |
+
{"chat_id": chat_id, "keyword": keyword},
|
29 |
+
{
|
30 |
+
"filter_reply": filter_reply,
|
31 |
+
"msgtype": msgtype,
|
32 |
+
"fileid": fileid
|
33 |
+
}
|
34 |
+
)
|
35 |
+
return
|
36 |
return self.insert_one(
|
37 |
{
|
38 |
"chat_id": chat_id,
|
Powers/database/greetings_db.py
CHANGED
@@ -161,8 +161,6 @@ class Greetings(MongoDB):
|
|
161 |
"goodbye_mtype": False
|
162 |
}
|
163 |
self.insert_one(new_data)
|
164 |
-
LOGGER.info(
|
165 |
-
f"Initialized Greetings Document for chat {self.chat_id}")
|
166 |
return new_data
|
167 |
return chat_data
|
168 |
|
|
|
161 |
"goodbye_mtype": False
|
162 |
}
|
163 |
self.insert_one(new_data)
|
|
|
|
|
164 |
return new_data
|
165 |
return chat_data
|
166 |
|
Powers/database/locks_db.py
CHANGED
@@ -58,35 +58,47 @@ class LOCKS(MongoDB):
|
|
58 |
else:
|
59 |
return False
|
60 |
|
61 |
-
def get_lock_channel(self, locktype: str = "all"
|
62 |
"""
|
63 |
locktypes: anti_c_send, anti_fwd, anti_fwd_u, anti_fwd_c, anti_links, bot
|
64 |
"""
|
65 |
if locktype not in ["anti_c_send", "anti_fwd", "anti_fwd_u", "anti_fwd_c", "anti_links", "bot", "all"]:
|
66 |
return False
|
67 |
else:
|
68 |
-
if locktype
|
69 |
-
|
|
|
|
|
70 |
else:
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
to_return.append(bool(curr))
|
82 |
-
return all(to_return)
|
83 |
-
else:
|
84 |
-
curr = self.find_all(find)
|
85 |
if not curr:
|
86 |
-
|
87 |
else:
|
88 |
-
|
89 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
|
91 |
def merge_u_and_c(self, chat: int, locktype: str):
|
92 |
if locktype == "anti_fwd_u":
|
|
|
58 |
else:
|
59 |
return False
|
60 |
|
61 |
+
def get_lock_channel(self, chat: int, locktype: str = "all"):
|
62 |
"""
|
63 |
locktypes: anti_c_send, anti_fwd, anti_fwd_u, anti_fwd_c, anti_links, bot
|
64 |
"""
|
65 |
if locktype not in ["anti_c_send", "anti_fwd", "anti_fwd_u", "anti_fwd_c", "anti_links", "bot", "all"]:
|
66 |
return False
|
67 |
else:
|
68 |
+
if locktype != "all":
|
69 |
+
curr = self.find_one(
|
70 |
+
{"chat_id": chat, "locktype": locktype})
|
71 |
+
return bool(curr)
|
72 |
else:
|
73 |
+
to_return = {
|
74 |
+
"anti_channel": False,
|
75 |
+
"anti_fwd": {
|
76 |
+
"user": False,
|
77 |
+
"chat": False
|
78 |
+
},
|
79 |
+
"anti_links": False,
|
80 |
+
"bot": False
|
81 |
+
}
|
82 |
+
curr = self.find_all({"chat_id": chat})
|
|
|
|
|
|
|
|
|
83 |
if not curr:
|
84 |
+
return None
|
85 |
else:
|
86 |
+
for i in list(curr):
|
87 |
+
if i["locktype"] == "anti_c_send":
|
88 |
+
to_return["anti_channel"] = True
|
89 |
+
elif i["locktype"] == "anti_fwd":
|
90 |
+
to_return["anti_fwd"]["user"] = to_return["anti_fwd"]["chat"] = True
|
91 |
+
elif i["locktype"] == "anti_fwd_u":
|
92 |
+
to_return["anti_fwd"]["user"] = True
|
93 |
+
elif i["locktype"] == "anti_fwd_c":
|
94 |
+
to_return["anti_fwd"]["chat"] = True
|
95 |
+
elif i["anti_links"] == "anti_links":
|
96 |
+
to_return["anti_links"] = True
|
97 |
+
elif i["locktype"] == "bot":
|
98 |
+
to_return["bot"] = True
|
99 |
+
else:
|
100 |
+
continue
|
101 |
+
return to_return
|
102 |
|
103 |
def merge_u_and_c(self, chat: int, locktype: str):
|
104 |
if locktype == "anti_fwd_u":
|
Powers/database/pins_db.py
CHANGED
@@ -62,7 +62,6 @@ class Pins(MongoDB):
|
|
62 |
"cleanlinked": False,
|
63 |
}
|
64 |
self.insert_one(new_data)
|
65 |
-
LOGGER.info(f"Initialized Pins Document for chat {self.chat_id}")
|
66 |
return new_data
|
67 |
return chat_data
|
68 |
|
|
|
62 |
"cleanlinked": False,
|
63 |
}
|
64 |
self.insert_one(new_data)
|
|
|
65 |
return new_data
|
66 |
return chat_data
|
67 |
|
Powers/database/reporting_db.py
CHANGED
@@ -45,8 +45,6 @@ class Reporting(MongoDB):
|
|
45 |
new_data = {"_id": self.chat_id,
|
46 |
"status": True, "chat_type": chat_type}
|
47 |
self.insert_one(new_data)
|
48 |
-
LOGGER.info(
|
49 |
-
f"Initialized Language Document for chat {self.chat_id}")
|
50 |
return new_data
|
51 |
return chat_data
|
52 |
|
|
|
45 |
new_data = {"_id": self.chat_id,
|
46 |
"status": True, "chat_type": chat_type}
|
47 |
self.insert_one(new_data)
|
|
|
|
|
48 |
return new_data
|
49 |
return chat_data
|
50 |
|
Powers/database/rules_db.py
CHANGED
@@ -68,8 +68,6 @@ class Rules(MongoDB):
|
|
68 |
if not chat_data:
|
69 |
new_data = {"_id": self.chat_id, "privrules": False, "rules": ""}
|
70 |
self.insert_one(new_data)
|
71 |
-
LOGGER.info(
|
72 |
-
f"Initialized Language Document for chat {self.chat_id}")
|
73 |
return new_data
|
74 |
return chat_data
|
75 |
|
|
|
68 |
if not chat_data:
|
69 |
new_data = {"_id": self.chat_id, "privrules": False, "rules": ""}
|
70 |
self.insert_one(new_data)
|
|
|
|
|
71 |
return new_data
|
72 |
return chat_data
|
73 |
|
Powers/database/users_db.py
CHANGED
@@ -70,7 +70,6 @@ class Users(MongoDB):
|
|
70 |
new_data = {"_id": self.user_id,
|
71 |
"username": "", "name": "unknown_till_now"}
|
72 |
self.insert_one(new_data)
|
73 |
-
LOGGER.info(f"Initialized User Document for {self.user_id}")
|
74 |
return new_data
|
75 |
return chat_data
|
76 |
|
|
|
70 |
new_data = {"_id": self.user_id,
|
71 |
"username": "", "name": "unknown_till_now"}
|
72 |
self.insert_one(new_data)
|
|
|
73 |
return new_data
|
74 |
return chat_data
|
75 |
|
Powers/database/warns_db.py
CHANGED
@@ -109,8 +109,6 @@ class Warns(MongoDB):
|
|
109 |
"num_warns": 0,
|
110 |
}
|
111 |
self.insert_one(new_data)
|
112 |
-
LOGGER.info(
|
113 |
-
f"Initialized Warn Document for {user_id} in {self.chat_id}")
|
114 |
return new_data
|
115 |
return chat_data
|
116 |
|
@@ -129,8 +127,6 @@ class WarnSettings(MongoDB):
|
|
129 |
new_data = {"_id": self.chat_id,
|
130 |
"warn_mode": "none", "warn_limit": 3}
|
131 |
self.insert_one(new_data)
|
132 |
-
LOGGER.info(
|
133 |
-
f"Initialized Warn Settings Document for {self.chat_id}")
|
134 |
return new_data
|
135 |
return chat_data
|
136 |
|
|
|
109 |
"num_warns": 0,
|
110 |
}
|
111 |
self.insert_one(new_data)
|
|
|
|
|
112 |
return new_data
|
113 |
return chat_data
|
114 |
|
|
|
127 |
new_data = {"_id": self.chat_id,
|
128 |
"warn_mode": "none", "warn_limit": 3}
|
129 |
self.insert_one(new_data)
|
|
|
|
|
130 |
return new_data
|
131 |
return chat_data
|
132 |
|
Powers/plugins/admin.py
CHANGED
@@ -11,18 +11,15 @@ from pyrogram.errors import (BotChannelsNa, ChatAdminInviteRequired,
|
|
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, TEMP_ADMIN_CACHE_BLOCK,
|
20 |
admin_cache_reload)
|
21 |
-
from Powers.utils.custom_filters import
|
22 |
-
promote_filter)
|
23 |
from Powers.utils.extract_user import extract_user
|
24 |
from Powers.utils.parser import mention_html
|
25 |
-
from Powers.vars import Config
|
26 |
|
27 |
|
28 |
@Gojo.on_message(command("adminlist"))
|
@@ -67,7 +64,7 @@ async def adminlist_show(_, m: Message):
|
|
67 |
adminstr += "\n\n<b>Bots:</b>\n"
|
68 |
adminstr += "\n".join(f"- {i}" for i in mention_bots)
|
69 |
await m.reply_text(adminstr + "\n\n" + note)
|
70 |
-
|
71 |
except Exception as ef:
|
72 |
if str(ef) == str(m.chat.id):
|
73 |
await m.reply_text(text="Use /admincache to reload admins!")
|
@@ -95,7 +92,11 @@ async def zombie_clean(c: Gojo, m: Message):
|
|
95 |
except UserAdminInvalid:
|
96 |
failed += 1
|
97 |
except FloodWait as e:
|
98 |
-
await sleep(e.
|
|
|
|
|
|
|
|
|
99 |
if zombie == 0:
|
100 |
return await wait.edit_text("Group is clean!")
|
101 |
await wait.delete()
|
@@ -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 =
|
114 |
if (
|
115 |
(m.chat.id in set(TEMP_ADMIN_CACHE_BLOCK.keys()))
|
116 |
and (m.from_user.id not in SUPPORT_STAFF)
|
@@ -122,7 +123,6 @@ async def reload_admins(_, m: Message):
|
|
122 |
await admin_cache_reload(m, "admincache")
|
123 |
TEMP_ADMIN_CACHE_BLOCK[m.chat.id] = "manualblock"
|
124 |
await m.reply_text(text="Reloaded all admins in this chat!")
|
125 |
-
LOGGER.info(f"Admincache cmd use in {m.chat.id} by {m.from_user.id}")
|
126 |
except RPCError as ef:
|
127 |
await m.reply_text(
|
128 |
text=f"Some error occured, report it using `/bug` \n <b>Error:</b> <code>{ef}</code>"
|
@@ -206,9 +206,6 @@ async def fullpromote_usr(c: Gojo, m: Message):
|
|
206 |
except Exception as e:
|
207 |
LOGGER.error(e)
|
208 |
LOGGER.error(format_exc())
|
209 |
-
LOGGER.info(
|
210 |
-
f"{m.from_user.id} fullpromoted {user_id} in {m.chat.id} with title '{title}'",
|
211 |
-
)
|
212 |
await m.reply_text(
|
213 |
(
|
214 |
"{promoter} promoted {promoted} in chat <b>{chat_title}</b> with full rights!"
|
@@ -311,9 +308,7 @@ async def promote_usr(c: Gojo, m: Message):
|
|
311 |
except Exception as e:
|
312 |
LOGGER.error(e)
|
313 |
LOGGER.error(format_exc())
|
314 |
-
|
315 |
-
f"{m.from_user.id} promoted {user_id} in {m.chat.id} with title '{title}'",
|
316 |
-
)
|
317 |
await m.reply_text(
|
318 |
("{promoter} promoted {promoted} in chat <b>{chat_title}</b>!").format(
|
319 |
promoter=(await mention_html(m.from_user.first_name, m.from_user.id)),
|
@@ -382,7 +377,6 @@ async def demote_usr(c: Gojo, m: Message):
|
|
382 |
user_id=user_id,
|
383 |
privileges=ChatPrivileges(can_manage_chat=False),
|
384 |
)
|
385 |
-
LOGGER.info(f"{m.from_user.id} demoted {user_id} in {m.chat.id}")
|
386 |
# ----- Remove admin from cache -----
|
387 |
try:
|
388 |
admin_list = ADMIN_CACHE[m.chat.id]
|
@@ -426,7 +420,7 @@ async def demote_usr(c: Gojo, m: Message):
|
|
426 |
async def get_invitelink(c: Gojo, m: Message):
|
427 |
# Bypass the bot devs, sudos and owner
|
428 |
|
429 |
-
DEV_LEVEL =
|
430 |
if m.from_user.id not in DEV_LEVEL:
|
431 |
user = await m.chat.get_member(m.from_user.id)
|
432 |
if not user.privileges.can_invite_users and user.status != CMS.OWNER:
|
@@ -438,7 +432,6 @@ async def get_invitelink(c: Gojo, m: Message):
|
|
438 |
text=f"Invite Link for Chat <b>{m.chat.id}</b>: {link}",
|
439 |
disable_web_page_preview=True,
|
440 |
)
|
441 |
-
LOGGER.info(f"{m.from_user.id} exported invite link in {m.chat.id}")
|
442 |
except ChatAdminRequired:
|
443 |
await m.reply_text(text="I'm not admin or I don't have rights.")
|
444 |
except 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, TEMP_ADMIN_CACHE_BLOCK,
|
19 |
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
|
|
|
23 |
|
24 |
|
25 |
@Gojo.on_message(command("adminlist"))
|
|
|
64 |
adminstr += "\n\n<b>Bots:</b>\n"
|
65 |
adminstr += "\n".join(f"- {i}" for i in mention_bots)
|
66 |
await m.reply_text(adminstr + "\n\n" + note)
|
67 |
+
|
68 |
except Exception as ef:
|
69 |
if str(ef) == str(m.chat.id):
|
70 |
await m.reply_text(text="Use /admincache to reload admins!")
|
|
|
92 |
except UserAdminInvalid:
|
93 |
failed += 1
|
94 |
except FloodWait as e:
|
95 |
+
await sleep(e.value)
|
96 |
+
try:
|
97 |
+
await c.ban_chat_member(m.chat.id, member.user.id)
|
98 |
+
except:
|
99 |
+
pass
|
100 |
if zombie == 0:
|
101 |
return await wait.edit_text("Group is clean!")
|
102 |
await wait.delete()
|
|
|
111 |
return await m.reply_text(
|
112 |
"This command is made to be used in groups only!",
|
113 |
)
|
114 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
115 |
if (
|
116 |
(m.chat.id in set(TEMP_ADMIN_CACHE_BLOCK.keys()))
|
117 |
and (m.from_user.id not in SUPPORT_STAFF)
|
|
|
123 |
await admin_cache_reload(m, "admincache")
|
124 |
TEMP_ADMIN_CACHE_BLOCK[m.chat.id] = "manualblock"
|
125 |
await m.reply_text(text="Reloaded all admins in this chat!")
|
|
|
126 |
except RPCError as ef:
|
127 |
await m.reply_text(
|
128 |
text=f"Some error occured, report it using `/bug` \n <b>Error:</b> <code>{ef}</code>"
|
|
|
206 |
except Exception as e:
|
207 |
LOGGER.error(e)
|
208 |
LOGGER.error(format_exc())
|
|
|
|
|
|
|
209 |
await m.reply_text(
|
210 |
(
|
211 |
"{promoter} promoted {promoted} in chat <b>{chat_title}</b> with full rights!"
|
|
|
308 |
except Exception as e:
|
309 |
LOGGER.error(e)
|
310 |
LOGGER.error(format_exc())
|
311 |
+
|
|
|
|
|
312 |
await m.reply_text(
|
313 |
("{promoter} promoted {promoted} in chat <b>{chat_title}</b>!").format(
|
314 |
promoter=(await mention_html(m.from_user.first_name, m.from_user.id)),
|
|
|
377 |
user_id=user_id,
|
378 |
privileges=ChatPrivileges(can_manage_chat=False),
|
379 |
)
|
|
|
380 |
# ----- Remove admin from cache -----
|
381 |
try:
|
382 |
admin_list = ADMIN_CACHE[m.chat.id]
|
|
|
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:
|
|
|
432 |
text=f"Invite Link for Chat <b>{m.chat.id}</b>: {link}",
|
433 |
disable_web_page_preview=True,
|
434 |
)
|
|
|
435 |
except ChatAdminRequired:
|
436 |
await m.reply_text(text="I'm not admin or I don't have rights.")
|
437 |
except ChatAdminInviteRequired:
|
Powers/plugins/antispam.py
CHANGED
@@ -5,16 +5,15 @@ from traceback import format_exc
|
|
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
|
16 |
from Powers.utils.parser import mention_html
|
17 |
-
from Powers.vars import Config
|
18 |
|
19 |
# Initialize
|
20 |
db = GBan()
|
@@ -38,7 +37,7 @@ async def gban(c: Gojo, m: Message):
|
|
38 |
else:
|
39 |
gban_reason = m.text.split(None, 2)[2]
|
40 |
|
41 |
-
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!")
|
@@ -61,7 +60,6 @@ async def gban(c: Gojo, m: Message):
|
|
61 |
f"Added {user_first_name} to GBan List. \n They will now be banned in all groups where I'm admin!"
|
62 |
)
|
63 |
)
|
64 |
-
LOGGER.info(f"{m.from_user.id} gbanned {user_id} from {m.chat.id}")
|
65 |
date = datetime.utcnow().strftime("%H:%M - %d-%m-%Y")
|
66 |
log_msg = f"#GBAN \n <b>Originated from:</b> {m.chat.id} \n <b>Admin:</b> {await mention_html(m.from_user.first_name, m.from_user.id)} \n <b>Gbanned User:</b> {await mention_html(user_first_name, user_id)} \n <b>Gbanned User ID:</b> {user_id} \\ n<b>Event Stamp:</b> {date}"
|
67 |
await c.send_message(MESSAGE_DUMP, log_msg)
|
@@ -71,6 +69,10 @@ async def gban(c: Gojo, m: Message):
|
|
71 |
user_id,
|
72 |
f"You have been added to my global ban list! \n <b>Reason:</b> <code>{gban_reason}</code> \n <b>Appeal Chat:</b> @{SUPPORT_GROUP}",
|
73 |
)
|
|
|
|
|
|
|
|
|
74 |
except UserIsBlocked:
|
75 |
LOGGER.error("Could not send PM Message, user blocked bot")
|
76 |
except PeerIdInvalid:
|
@@ -93,7 +95,7 @@ async def ungban(c: Gojo, m: Message):
|
|
93 |
|
94 |
user_id, user_first_name, _ = await extract_user(c, m)
|
95 |
|
96 |
-
SUPPORT_STAFF =
|
97 |
|
98 |
if user_id in SUPPORT_STAFF:
|
99 |
await m.reply_text(text="This user is part of my Support!, Can't ban our own!")
|
@@ -110,7 +112,6 @@ async def ungban(c: Gojo, m: Message):
|
|
110 |
db.remove_gban(user_id)
|
111 |
await m.reply_text(text=f"Removed {user_first_name} from Global Ban List.")
|
112 |
time = ((datetime.utcnow().strftime("%H:%M - %d-%m-%Y")),)
|
113 |
-
LOGGER.info(f"{m.from_user.id} ungbanned {user_id} from {m.chat.id}")
|
114 |
log_msg = f"""#UNGBAN
|
115 |
<b>Originated from:</b> {m.chat.id}
|
116 |
<b>Admin:</b> {(await mention_html(m.from_user.first_name, m.from_user.id))}
|
@@ -140,7 +141,6 @@ async def gban_count(_, m: Message):
|
|
140 |
await m.reply_text(
|
141 |
text=f"Number of people gbanned: <code>{(db.count_gbans())}</code>"
|
142 |
)
|
143 |
-
LOGGER.info(f"{m.from_user.id} counting gbans in {m.chat.id}")
|
144 |
return
|
145 |
|
146 |
|
@@ -170,7 +170,6 @@ async def gban_list(_, m: Message):
|
|
170 |
document=f, caption="Here are all the globally banned geys!\n\n"
|
171 |
)
|
172 |
|
173 |
-
LOGGER.info(f"{m.from_user.id} exported gbanlist in {m.chat.id}")
|
174 |
|
175 |
return
|
176 |
|
|
|
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
|
16 |
from Powers.utils.parser import mention_html
|
|
|
17 |
|
18 |
# Initialize
|
19 |
db = GBan()
|
|
|
37 |
else:
|
38 |
gban_reason = m.text.split(None, 2)[2]
|
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(text="This user is part of my Support!, Can't ban our own!")
|
|
|
60 |
f"Added {user_first_name} to GBan List. \n They will now be banned in all groups where I'm admin!"
|
61 |
)
|
62 |
)
|
|
|
63 |
date = datetime.utcnow().strftime("%H:%M - %d-%m-%Y")
|
64 |
log_msg = f"#GBAN \n <b>Originated from:</b> {m.chat.id} \n <b>Admin:</b> {await mention_html(m.from_user.first_name, m.from_user.id)} \n <b>Gbanned User:</b> {await mention_html(user_first_name, user_id)} \n <b>Gbanned User ID:</b> {user_id} \\ n<b>Event Stamp:</b> {date}"
|
65 |
await c.send_message(MESSAGE_DUMP, log_msg)
|
|
|
69 |
user_id,
|
70 |
f"You have been added to my global ban list! \n <b>Reason:</b> <code>{gban_reason}</code> \n <b>Appeal Chat:</b> @{SUPPORT_GROUP}",
|
71 |
)
|
72 |
+
try:
|
73 |
+
await c.ban_chat_member(m.chat.id, user_id)
|
74 |
+
except Exception as e:
|
75 |
+
await m.reply_text(f"Failed to ban this user\n{e}")
|
76 |
except UserIsBlocked:
|
77 |
LOGGER.error("Could not send PM Message, user blocked bot")
|
78 |
except PeerIdInvalid:
|
|
|
95 |
|
96 |
user_id, user_first_name, _ = await extract_user(c, m)
|
97 |
|
98 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
99 |
|
100 |
if user_id in SUPPORT_STAFF:
|
101 |
await m.reply_text(text="This user is part of my Support!, Can't ban our own!")
|
|
|
112 |
db.remove_gban(user_id)
|
113 |
await m.reply_text(text=f"Removed {user_first_name} from Global Ban List.")
|
114 |
time = ((datetime.utcnow().strftime("%H:%M - %d-%m-%Y")),)
|
|
|
115 |
log_msg = f"""#UNGBAN
|
116 |
<b>Originated from:</b> {m.chat.id}
|
117 |
<b>Admin:</b> {(await mention_html(m.from_user.first_name, m.from_user.id))}
|
|
|
141 |
await m.reply_text(
|
142 |
text=f"Number of people gbanned: <code>{(db.count_gbans())}</code>"
|
143 |
)
|
|
|
144 |
return
|
145 |
|
146 |
|
|
|
170 |
document=f, caption="Here are all the globally banned geys!\n\n"
|
171 |
)
|
172 |
|
|
|
173 |
|
174 |
return
|
175 |
|
Powers/plugins/approve.py
CHANGED
@@ -51,7 +51,6 @@ async def approve_user(c: Gojo, m: Message):
|
|
51 |
)
|
52 |
return
|
53 |
db.add_approve(user_id, user_first_name)
|
54 |
-
LOGGER.info(f"{user_id} approved by {m.from_user.id} in {m.chat.id}")
|
55 |
|
56 |
# Allow all permissions
|
57 |
try:
|
@@ -90,7 +89,6 @@ async def disapprove_user(c: Gojo, m: Message):
|
|
90 |
except UserNotParticipant:
|
91 |
if already_approved: # If user is approved and not in chat, unapprove them.
|
92 |
db.remove_approve(user_id)
|
93 |
-
LOGGER.info(f"{user_id} disapproved in {m.chat.id} as UserNotParticipant")
|
94 |
await m.reply_text("This user is not in this chat, unapproved them.")
|
95 |
return
|
96 |
except RPCError as ef:
|
@@ -110,7 +108,6 @@ async def disapprove_user(c: Gojo, m: Message):
|
|
110 |
return
|
111 |
|
112 |
db.remove_approve(user_id)
|
113 |
-
LOGGER.info(f"{user_id} disapproved by {m.from_user.id} in {m.chat.id}")
|
114 |
|
115 |
# Set permission same as of current user by fetching them from chat!
|
116 |
await m.chat.restrict_member(
|
@@ -147,7 +144,6 @@ async def check_approved(_, m: Message):
|
|
147 |
pass
|
148 |
msg += f"- `{user_id}`: {user_name}\n"
|
149 |
await m.reply_text(msg)
|
150 |
-
LOGGER.info(f"{m.from_user.id} checking approved users in {m.chat.id}")
|
151 |
return
|
152 |
|
153 |
|
@@ -160,7 +156,6 @@ async def check_approval(c: Gojo, m: Message):
|
|
160 |
except Exception:
|
161 |
return
|
162 |
check_approve = db.check_approve(user_id)
|
163 |
-
LOGGER.info(f"{m.from_user.id} checking approval of {user_id} in {m.chat.id}")
|
164 |
|
165 |
if not user_id:
|
166 |
await m.reply_text(
|
@@ -218,7 +213,6 @@ async def unapproveall_callback(_, q: CallbackQuery):
|
|
218 |
permissions=q.message.chat.permissions,
|
219 |
)
|
220 |
await q.message.delete()
|
221 |
-
LOGGER.info(f"{user_id} disapproved all users in {q.message.chat.id}")
|
222 |
await q.answer("Disapproved all users!", show_alert=True)
|
223 |
return
|
224 |
|
|
|
51 |
)
|
52 |
return
|
53 |
db.add_approve(user_id, user_first_name)
|
|
|
54 |
|
55 |
# Allow all permissions
|
56 |
try:
|
|
|
89 |
except UserNotParticipant:
|
90 |
if already_approved: # If user is approved and not in chat, unapprove them.
|
91 |
db.remove_approve(user_id)
|
|
|
92 |
await m.reply_text("This user is not in this chat, unapproved them.")
|
93 |
return
|
94 |
except RPCError as ef:
|
|
|
108 |
return
|
109 |
|
110 |
db.remove_approve(user_id)
|
|
|
111 |
|
112 |
# Set permission same as of current user by fetching them from chat!
|
113 |
await m.chat.restrict_member(
|
|
|
144 |
pass
|
145 |
msg += f"- `{user_id}`: {user_name}\n"
|
146 |
await m.reply_text(msg)
|
|
|
147 |
return
|
148 |
|
149 |
|
|
|
156 |
except Exception:
|
157 |
return
|
158 |
check_approve = db.check_approve(user_id)
|
|
|
159 |
|
160 |
if not user_id:
|
161 |
await m.reply_text(
|
|
|
213 |
permissions=q.message.chat.permissions,
|
214 |
)
|
215 |
await q.message.delete()
|
|
|
216 |
await q.answer("Disapproved all users!", show_alert=True)
|
217 |
return
|
218 |
|
Powers/plugins/auto_join.py
CHANGED
@@ -7,10 +7,9 @@ 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 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 |
|
@@ -96,7 +95,7 @@ async def join_request_handler(c: Gojo, j: ChatJoinRequest):
|
|
96 |
chat = j.chat.id
|
97 |
aj = AUTOJOIN()
|
98 |
join_type = aj.get_autojoin(chat)
|
99 |
-
SUPPORT_STAFF =
|
100 |
|
101 |
if not join_type:
|
102 |
return
|
|
|
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 |
|
|
|
95 |
chat = j.chat.id
|
96 |
aj = AUTOJOIN()
|
97 |
join_type = aj.get_autojoin(chat)
|
98 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
99 |
|
100 |
if not join_type:
|
101 |
return
|
Powers/plugins/bans.py
CHANGED
@@ -9,16 +9,15 @@ from pyrogram.types import (CallbackQuery, ChatPrivileges,
|
|
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
|
18 |
from Powers.utils.extras import BAN_GIFS, KICK_GIFS
|
19 |
from Powers.utils.parser import mention_html
|
20 |
from Powers.utils.string import extract_time
|
21 |
-
from Powers.vars import Config
|
22 |
|
23 |
|
24 |
@Gojo.on_message(command("tban") & restrict_filter)
|
@@ -39,15 +38,13 @@ async def tban_usr(c: Gojo, m: Message):
|
|
39 |
await m.reply_text("WTF?? Why would I ban myself?")
|
40 |
await m.stop_propagation()
|
41 |
|
42 |
-
SUPPORT_STAFF =
|
43 |
|
44 |
if user_id in SUPPORT_STAFF:
|
45 |
await m.reply_text(
|
46 |
text="This user is in my support staff, cannot restrict them."
|
47 |
)
|
48 |
-
|
49 |
-
f"{m.from_user.id} trying to ban {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
50 |
-
)
|
51 |
await m.stop_propagation()
|
52 |
|
53 |
r_id = m.reply_to_message.id if m.reply_to_message else m.id
|
@@ -86,7 +83,6 @@ async def tban_usr(c: Gojo, m: Message):
|
|
86 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
87 |
banned = await mention_html(user_first_name, user_id)
|
88 |
chat_title = m.chat.title
|
89 |
-
LOGGER.info(f"{m.from_user.id} tbanned {user_id} in {m.chat.id}")
|
90 |
await m.chat.ban_member(
|
91 |
user_id,
|
92 |
until_date=bantime)
|
@@ -161,7 +157,7 @@ async def stban_usr(c: Gojo, m: Message):
|
|
161 |
await m.reply_text(text="I can't ban nothing!")
|
162 |
await m.stop_propagation()
|
163 |
|
164 |
-
SUPPORT_STAFF =
|
165 |
|
166 |
try:
|
167 |
user_id, _, _ = await extract_user(c, m)
|
@@ -179,9 +175,7 @@ async def stban_usr(c: Gojo, m: Message):
|
|
179 |
await m.reply_text(
|
180 |
text="This user is in my support staff, cannot restrict them."
|
181 |
)
|
182 |
-
|
183 |
-
f"{m.from_user.id} trying to ban {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
184 |
-
)
|
185 |
await m.stop_propagation()
|
186 |
|
187 |
if m.reply_to_message and len(m.text.split()) >= 2:
|
@@ -215,7 +209,6 @@ async def stban_usr(c: Gojo, m: Message):
|
|
215 |
await m.stop_propagation()
|
216 |
|
217 |
try:
|
218 |
-
LOGGER.info(f"{m.from_user.id} stbanned {user_id} in {m.chat.id}")
|
219 |
await m.chat.ban_member(user_id, until_date=bantime)
|
220 |
await m.delete()
|
221 |
if m.reply_to_message:
|
@@ -269,13 +262,11 @@ async def dtban_usr(c: Gojo, m: Message):
|
|
269 |
await m.reply_text("Huh, why would I ban myself?")
|
270 |
await m.stop_propagation()
|
271 |
|
272 |
-
SUPPORT_STAFF =
|
273 |
|
274 |
if user_id in SUPPORT_STAFF:
|
275 |
await m.reply_text(text="I am not going to ban one of my support staff")
|
276 |
-
|
277 |
-
f"{m.from_user.id} trying to ban {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
278 |
-
)
|
279 |
await m.stop_propagation()
|
280 |
|
281 |
if m.reply_to_message and len(m.text.split()) >= 2:
|
@@ -312,7 +303,6 @@ async def dtban_usr(c: Gojo, m: Message):
|
|
312 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
313 |
banned = await mention_html(user_first_name, user_id)
|
314 |
chat_title = m.chat.title
|
315 |
-
LOGGER.info(f"{m.from_user.id} dtbanned {user_id} in {m.chat.id}")
|
316 |
await m.chat.ban_member(user_id, until_date=bantime)
|
317 |
await m.reply_to_message.delete()
|
318 |
txt = f"{admin} banned {banned} in <b>{chat_title}</b>!"
|
@@ -399,15 +389,13 @@ async def kick_usr(c: Gojo, m: Message):
|
|
399 |
await m.reply_text("Huh, why would I kick myself?")
|
400 |
await m.stop_propagation()
|
401 |
|
402 |
-
SUPPORT_STAFF =
|
403 |
|
404 |
if user_id in SUPPORT_STAFF:
|
405 |
await m.reply_text(
|
406 |
text="This user is in my support staff, cannot restrict them."
|
407 |
)
|
408 |
-
|
409 |
-
f"{m.from_user.id} trying to kick {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
410 |
-
)
|
411 |
await m.stop_propagation()
|
412 |
|
413 |
try:
|
@@ -423,7 +411,6 @@ async def kick_usr(c: Gojo, m: Message):
|
|
423 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
424 |
kicked = await mention_html(user_first_name, user_id)
|
425 |
chat_title = m.chat.title
|
426 |
-
LOGGER.info(f"{m.from_user.id} kicked {user_id} in {m.chat.id}")
|
427 |
await m.chat.ban_member(user_id)
|
428 |
txt = f"{admin} kicked {kicked} in <b>{chat_title}</b>!"
|
429 |
if reason:
|
@@ -490,15 +477,13 @@ async def skick_usr(c: Gojo, m: Message):
|
|
490 |
await m.reply_text("Nuh Hu, why would I kick myself?")
|
491 |
await m.stop_propagation()
|
492 |
|
493 |
-
SUPPORT_STAFF =
|
494 |
|
495 |
if user_id in SUPPORT_STAFF:
|
496 |
await m.reply_text(
|
497 |
text="This user is in my support staff, cannot restrict them."
|
498 |
)
|
499 |
-
|
500 |
-
f"{m.from_user.id} trying to skick {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
501 |
-
)
|
502 |
await m.stop_propagation()
|
503 |
|
504 |
try:
|
@@ -511,7 +496,6 @@ async def skick_usr(c: Gojo, m: Message):
|
|
511 |
await m.stop_propagation()
|
512 |
|
513 |
try:
|
514 |
-
LOGGER.info(f"{m.from_user.id} skicked {user_id} in {m.chat.id}")
|
515 |
await m.chat.ban_member(user_id)
|
516 |
await m.delete()
|
517 |
if m.reply_to_message:
|
@@ -564,15 +548,13 @@ async def dkick_usr(c: Gojo, m: Message):
|
|
564 |
await m.reply_text("Huh, why would I kick myself?")
|
565 |
await m.stop_propagation()
|
566 |
|
567 |
-
SUPPORT_STAFF =
|
568 |
|
569 |
if user_id in SUPPORT_STAFF:
|
570 |
await m.reply_text(
|
571 |
text="This user is in my support staff, cannot restrict them."
|
572 |
)
|
573 |
-
|
574 |
-
f"{m.from_user.id} trying to dkick {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
575 |
-
)
|
576 |
await m.stop_propagation()
|
577 |
|
578 |
try:
|
@@ -585,7 +567,6 @@ async def dkick_usr(c: Gojo, m: Message):
|
|
585 |
await m.stop_propagation()
|
586 |
|
587 |
try:
|
588 |
-
LOGGER.info(f"{m.from_user.id} dkicked {user_id} in {m.chat.id}")
|
589 |
await m.reply_to_message.delete()
|
590 |
await m.chat.ban_member(user_id)
|
591 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
@@ -715,15 +696,12 @@ async def sban_usr(c: Gojo, m: Message):
|
|
715 |
await m.reply_text("Huh, why would I ban myself?")
|
716 |
await m.stop_propagation()
|
717 |
|
718 |
-
SUPPORT_STAFF =
|
719 |
|
720 |
if user_id in SUPPORT_STAFF:
|
721 |
await m.reply_text(
|
722 |
text="This user is in my support staff, cannot restrict them."
|
723 |
)
|
724 |
-
LOGGER.info(
|
725 |
-
f"{m.from_user.id} trying to sban {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
726 |
-
)
|
727 |
await m.stop_propagation()
|
728 |
|
729 |
try:
|
@@ -736,7 +714,6 @@ async def sban_usr(c: Gojo, m: Message):
|
|
736 |
await m.stop_propagation()
|
737 |
|
738 |
try:
|
739 |
-
LOGGER.info(f"{m.from_user.id} sbanned {user_id} in {m.chat.id}")
|
740 |
await m.chat.ban_member(user_id)
|
741 |
await m.delete()
|
742 |
if m.reply_to_message:
|
@@ -796,15 +773,12 @@ async def dban_usr(c: Gojo, m: Message):
|
|
796 |
await m.reply_text("Huh, why would I ban myself?")
|
797 |
await m.stop_propagation()
|
798 |
|
799 |
-
SUPPORT_STAFF =
|
800 |
|
801 |
if user_id in SUPPORT_STAFF:
|
802 |
await m.reply_text(
|
803 |
text="This user is in my support staff, cannot restrict them."
|
804 |
)
|
805 |
-
LOGGER.info(
|
806 |
-
f"{m.from_user.id} trying to dban {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
807 |
-
)
|
808 |
await m.stop_propagation()
|
809 |
|
810 |
try:
|
@@ -821,7 +795,6 @@ async def dban_usr(c: Gojo, m: Message):
|
|
821 |
reason = m.text.split(None, 1)[1]
|
822 |
|
823 |
try:
|
824 |
-
LOGGER.info(f"{m.from_user.id} dbanned {user_id} in {m.chat.id}")
|
825 |
await m.reply_to_message.delete()
|
826 |
await m.chat.ban_member(user_id)
|
827 |
txt = f"{m.from_user.mention} banned {m.reply_to_message.from_user.mention} in <b>{m.chat.title}</b>!"
|
@@ -897,15 +870,12 @@ async def ban_usr(c: Gojo, m: Message):
|
|
897 |
await m.reply_text("Huh, why would I ban myself?")
|
898 |
await m.stop_propagation()
|
899 |
|
900 |
-
SUPPORT_STAFF =
|
901 |
|
902 |
if user_id in SUPPORT_STAFF:
|
903 |
await m.reply_text(
|
904 |
text="This user is in my support staff, cannot restrict them."
|
905 |
)
|
906 |
-
LOGGER.info(
|
907 |
-
f"{m.from_user.id} trying to ban {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
908 |
-
)
|
909 |
await m.stop_propagation()
|
910 |
|
911 |
try:
|
@@ -928,7 +898,6 @@ async def ban_usr(c: Gojo, m: Message):
|
|
928 |
reason = m.text.split(None, 2)[2]
|
929 |
|
930 |
try:
|
931 |
-
LOGGER.info(f"{m.from_user.id} banned {user_id} in {m.chat.id}")
|
932 |
await m.chat.ban_member(user_id)
|
933 |
banned = await mention_html(user_first_name, user_id)
|
934 |
txt = f"{m.from_user.mention} banned {banned} in <b>{m.chat.title}</b>!"
|
@@ -1024,7 +993,6 @@ async def kickme(c: Gojo, m: Message):
|
|
1024 |
if len(m.text.split()) >= 2:
|
1025 |
reason = m.text.split(None, 1)[1]
|
1026 |
try:
|
1027 |
-
LOGGER.info(f"{m.from_user.id} kickme used by {m.from_user.id} in {m.chat.id}")
|
1028 |
mem = await c.get_chat_member(m.chat.id,m.from_user.id)
|
1029 |
if mem.status in [enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER]:
|
1030 |
try:
|
|
|
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
|
18 |
from Powers.utils.extras import BAN_GIFS, KICK_GIFS
|
19 |
from Powers.utils.parser import mention_html
|
20 |
from Powers.utils.string import extract_time
|
|
|
21 |
|
22 |
|
23 |
@Gojo.on_message(command("tban") & restrict_filter)
|
|
|
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(
|
45 |
text="This user is in my support staff, cannot restrict them."
|
46 |
)
|
47 |
+
|
|
|
|
|
48 |
await m.stop_propagation()
|
49 |
|
50 |
r_id = m.reply_to_message.id if m.reply_to_message else m.id
|
|
|
83 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
84 |
banned = await mention_html(user_first_name, user_id)
|
85 |
chat_title = m.chat.title
|
|
|
86 |
await m.chat.ban_member(
|
87 |
user_id,
|
88 |
until_date=bantime)
|
|
|
157 |
await m.reply_text(text="I can't ban nothing!")
|
158 |
await m.stop_propagation()
|
159 |
|
160 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
161 |
|
162 |
try:
|
163 |
user_id, _, _ = await extract_user(c, m)
|
|
|
175 |
await m.reply_text(
|
176 |
text="This user is in my support staff, cannot restrict them."
|
177 |
)
|
178 |
+
|
|
|
|
|
179 |
await m.stop_propagation()
|
180 |
|
181 |
if m.reply_to_message and len(m.text.split()) >= 2:
|
|
|
209 |
await m.stop_propagation()
|
210 |
|
211 |
try:
|
|
|
212 |
await m.chat.ban_member(user_id, until_date=bantime)
|
213 |
await m.delete()
|
214 |
if m.reply_to_message:
|
|
|
262 |
await m.reply_text("Huh, why would I ban myself?")
|
263 |
await m.stop_propagation()
|
264 |
|
265 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
266 |
|
267 |
if user_id in SUPPORT_STAFF:
|
268 |
await m.reply_text(text="I am not going to ban one of my support staff")
|
269 |
+
|
|
|
|
|
270 |
await m.stop_propagation()
|
271 |
|
272 |
if m.reply_to_message and len(m.text.split()) >= 2:
|
|
|
303 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
304 |
banned = await mention_html(user_first_name, user_id)
|
305 |
chat_title = m.chat.title
|
|
|
306 |
await m.chat.ban_member(user_id, until_date=bantime)
|
307 |
await m.reply_to_message.delete()
|
308 |
txt = f"{admin} banned {banned} in <b>{chat_title}</b>!"
|
|
|
389 |
await m.reply_text("Huh, why would I kick myself?")
|
390 |
await m.stop_propagation()
|
391 |
|
392 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
393 |
|
394 |
if user_id in SUPPORT_STAFF:
|
395 |
await m.reply_text(
|
396 |
text="This user is in my support staff, cannot restrict them."
|
397 |
)
|
398 |
+
|
|
|
|
|
399 |
await m.stop_propagation()
|
400 |
|
401 |
try:
|
|
|
411 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
412 |
kicked = await mention_html(user_first_name, user_id)
|
413 |
chat_title = m.chat.title
|
|
|
414 |
await m.chat.ban_member(user_id)
|
415 |
txt = f"{admin} kicked {kicked} in <b>{chat_title}</b>!"
|
416 |
if reason:
|
|
|
477 |
await m.reply_text("Nuh Hu, why would I kick myself?")
|
478 |
await m.stop_propagation()
|
479 |
|
480 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
481 |
|
482 |
if user_id in SUPPORT_STAFF:
|
483 |
await m.reply_text(
|
484 |
text="This user is in my support staff, cannot restrict them."
|
485 |
)
|
486 |
+
|
|
|
|
|
487 |
await m.stop_propagation()
|
488 |
|
489 |
try:
|
|
|
496 |
await m.stop_propagation()
|
497 |
|
498 |
try:
|
|
|
499 |
await m.chat.ban_member(user_id)
|
500 |
await m.delete()
|
501 |
if m.reply_to_message:
|
|
|
548 |
await m.reply_text("Huh, why would I kick myself?")
|
549 |
await m.stop_propagation()
|
550 |
|
551 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
552 |
|
553 |
if user_id in SUPPORT_STAFF:
|
554 |
await m.reply_text(
|
555 |
text="This user is in my support staff, cannot restrict them."
|
556 |
)
|
557 |
+
|
|
|
|
|
558 |
await m.stop_propagation()
|
559 |
|
560 |
try:
|
|
|
567 |
await m.stop_propagation()
|
568 |
|
569 |
try:
|
|
|
570 |
await m.reply_to_message.delete()
|
571 |
await m.chat.ban_member(user_id)
|
572 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
|
|
696 |
await m.reply_text("Huh, why would I ban myself?")
|
697 |
await m.stop_propagation()
|
698 |
|
699 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
700 |
|
701 |
if user_id in SUPPORT_STAFF:
|
702 |
await m.reply_text(
|
703 |
text="This user is in my support staff, cannot restrict them."
|
704 |
)
|
|
|
|
|
|
|
705 |
await m.stop_propagation()
|
706 |
|
707 |
try:
|
|
|
714 |
await m.stop_propagation()
|
715 |
|
716 |
try:
|
|
|
717 |
await m.chat.ban_member(user_id)
|
718 |
await m.delete()
|
719 |
if m.reply_to_message:
|
|
|
773 |
await m.reply_text("Huh, why would I ban myself?")
|
774 |
await m.stop_propagation()
|
775 |
|
776 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
777 |
|
778 |
if user_id in SUPPORT_STAFF:
|
779 |
await m.reply_text(
|
780 |
text="This user is in my support staff, cannot restrict them."
|
781 |
)
|
|
|
|
|
|
|
782 |
await m.stop_propagation()
|
783 |
|
784 |
try:
|
|
|
795 |
reason = m.text.split(None, 1)[1]
|
796 |
|
797 |
try:
|
|
|
798 |
await m.reply_to_message.delete()
|
799 |
await m.chat.ban_member(user_id)
|
800 |
txt = f"{m.from_user.mention} banned {m.reply_to_message.from_user.mention} in <b>{m.chat.title}</b>!"
|
|
|
870 |
await m.reply_text("Huh, why would I ban myself?")
|
871 |
await m.stop_propagation()
|
872 |
|
873 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
874 |
|
875 |
if user_id in SUPPORT_STAFF:
|
876 |
await m.reply_text(
|
877 |
text="This user is in my support staff, cannot restrict them."
|
878 |
)
|
|
|
|
|
|
|
879 |
await m.stop_propagation()
|
880 |
|
881 |
try:
|
|
|
898 |
reason = m.text.split(None, 2)[2]
|
899 |
|
900 |
try:
|
|
|
901 |
await m.chat.ban_member(user_id)
|
902 |
banned = await mention_html(user_first_name, user_id)
|
903 |
txt = f"{m.from_user.mention} banned {banned} in <b>{m.chat.title}</b>!"
|
|
|
993 |
if len(m.text.split()) >= 2:
|
994 |
reason = m.text.split(None, 1)[1]
|
995 |
try:
|
|
|
996 |
mem = await c.get_chat_member(m.chat.id,m.from_user.id)
|
997 |
if mem.status in [enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER]:
|
998 |
try:
|
Powers/plugins/birthday.py
CHANGED
@@ -125,7 +125,7 @@ async def who_is_next(c: Gojo, m: Message):
|
|
125 |
if m.chat.type == ChatType.PRIVATE:
|
126 |
await m.reply_text("Use it in group")
|
127 |
return
|
128 |
-
curr = datetime.now(
|
129 |
xx = await m.reply_text("📆")
|
130 |
users = []
|
131 |
if blist:
|
@@ -173,7 +173,7 @@ async def cant_recall_it(c: Gojo, m: Message):
|
|
173 |
await m.reply_text(f"Got an error\n{e}")
|
174 |
return
|
175 |
|
176 |
-
curr = datetime.now(
|
177 |
u_dob = give_date(result["dob"])
|
178 |
formatted = str(u_dob.strftime('%d' + '%B %Y'))[2:-5]
|
179 |
day = int(result["dob"].split('/')[0])
|
@@ -182,7 +182,7 @@ async def cant_recall_it(c: Gojo, m: Message):
|
|
182 |
if (u_dob.day,u_dob.month) < (curr.day,curr.month):
|
183 |
next_b = date(curr.year + 1, u_dob.month, u_dob.day)
|
184 |
days_left = (next_b - curr).days
|
185 |
-
txt = f"{men} 's birthday is passed 🫤\nDays left until next one {days_left}"
|
186 |
txt += f"\nBirthday on: {bday_on}"
|
187 |
txt += f"\n\nDate of birth: {result['dob']}"
|
188 |
elif (u_dob.day,u_dob.month) == (curr.day,curr.month):
|
@@ -190,7 +190,7 @@ async def cant_recall_it(c: Gojo, m: Message):
|
|
190 |
else:
|
191 |
u_dobm = date(curr.year, u_dob.month, u_dob.day)
|
192 |
days_left = (u_dobm - curr).days
|
193 |
-
txt = f"User's birthday is coming🥳\nDays left
|
194 |
txt += f"\nBirthday on: {bday_on}"
|
195 |
txt += f"\n\nDate of birth: {result['dob']}"
|
196 |
txt+= "\n\n**NOTE**:\nDOB may be wrong if user haven't entered his/her birth year"
|
@@ -218,7 +218,7 @@ async def chat_birthday_settings(c: Gojo, m: Message):
|
|
218 |
await m.reply_text("Do you want to wish members for their birthday in the group?",reply_markup=kb)
|
219 |
return
|
220 |
|
221 |
-
@Gojo.on_callback_query(filters.regex("^switchh_"))
|
222 |
async def switch_on_off(c:Gojo, q: CallbackQuery):
|
223 |
user = (await q.message.chat.get_member(q.from_user.id)).status
|
224 |
await q.message.chat.get_member(q.from_user.id)
|
@@ -227,11 +227,11 @@ async def switch_on_off(c:Gojo, q: CallbackQuery):
|
|
227 |
return
|
228 |
data = q.data.split("_")[1]
|
229 |
chats = q.message.chat.id
|
230 |
-
|
231 |
if data == "yes":
|
232 |
-
bday_cinfo.delete_one(
|
233 |
elif data == "no":
|
234 |
-
bday_cinfo.insert_one(
|
235 |
await q.edit_message_text(f"Done! I will {'wish' if data == 'yes' else 'not wish'}",reply_markup=IKM([[IKB("Close", "f_close")]]))
|
236 |
return
|
237 |
|
|
|
125 |
if m.chat.type == ChatType.PRIVATE:
|
126 |
await m.reply_text("Use it in group")
|
127 |
return
|
128 |
+
curr = datetime.now().date()
|
129 |
xx = await m.reply_text("📆")
|
130 |
users = []
|
131 |
if blist:
|
|
|
173 |
await m.reply_text(f"Got an error\n{e}")
|
174 |
return
|
175 |
|
176 |
+
curr = datetime.now().date()
|
177 |
u_dob = give_date(result["dob"])
|
178 |
formatted = str(u_dob.strftime('%d' + '%B %Y'))[2:-5]
|
179 |
day = int(result["dob"].split('/')[0])
|
|
|
182 |
if (u_dob.day,u_dob.month) < (curr.day,curr.month):
|
183 |
next_b = date(curr.year + 1, u_dob.month, u_dob.day)
|
184 |
days_left = (next_b - curr).days
|
185 |
+
txt = f"{men} 's birthday is passed 🫤\nDays left until next one {abs(days_left)}"
|
186 |
txt += f"\nBirthday on: {bday_on}"
|
187 |
txt += f"\n\nDate of birth: {result['dob']}"
|
188 |
elif (u_dob.day,u_dob.month) == (curr.day,curr.month):
|
|
|
190 |
else:
|
191 |
u_dobm = date(curr.year, u_dob.month, u_dob.day)
|
192 |
days_left = (u_dobm - curr).days
|
193 |
+
txt = f"User's birthday is coming🥳\nDays left: {abs(days_left)}"
|
194 |
txt += f"\nBirthday on: {bday_on}"
|
195 |
txt += f"\n\nDate of birth: {result['dob']}"
|
196 |
txt+= "\n\n**NOTE**:\nDOB may be wrong if user haven't entered his/her birth year"
|
|
|
218 |
await m.reply_text("Do you want to wish members for their birthday in the group?",reply_markup=kb)
|
219 |
return
|
220 |
|
221 |
+
@Gojo.on_callback_query(filters.regex(r"^switchh_(yes|no)$"))
|
222 |
async def switch_on_off(c:Gojo, q: CallbackQuery):
|
223 |
user = (await q.message.chat.get_member(q.from_user.id)).status
|
224 |
await q.message.chat.get_member(q.from_user.id)
|
|
|
227 |
return
|
228 |
data = q.data.split("_")[1]
|
229 |
chats = q.message.chat.id
|
230 |
+
query = {"chat_id":chats}
|
231 |
if data == "yes":
|
232 |
+
bday_cinfo.delete_one(query)
|
233 |
elif data == "no":
|
234 |
+
bday_cinfo.insert_one(query)
|
235 |
await q.edit_message_text(f"Done! I will {'wish' if data == 'yes' else 'not wish'}",reply_markup=IKM([[IKB("Close", "f_close")]]))
|
236 |
return
|
237 |
|
Powers/plugins/blacklist.py
CHANGED
@@ -15,8 +15,6 @@ from Powers.utils.kbhelpers import ikb
|
|
15 |
async def view_blacklist(_, m: Message):
|
16 |
db = Blacklist(m.chat.id)
|
17 |
|
18 |
-
LOGGER.info(f"{m.from_user.id} checking blacklists in {m.chat.id}")
|
19 |
-
|
20 |
chat_title = m.chat.title
|
21 |
blacklists_chat = f"Current Blacklisted words in <b>{chat_title}</b>:\n\n"
|
22 |
all_blacklisted = db.get_blacklists()
|
@@ -58,7 +56,6 @@ async def add_blacklist(_, m: Message):
|
|
58 |
", ".join([f"<code>{i}</code>" for i in bl_words])
|
59 |
+ " already added in blacklist, skipped them!"
|
60 |
)
|
61 |
-
LOGGER.info(f"{m.from_user.id} added new blacklists ({bl_words}) in {m.chat.id}")
|
62 |
trigger = ", ".join(f"<code>{i}</code>" for i in bl_words)
|
63 |
await m.reply_text(
|
64 |
text=f"Added <code>{trigger}</code> in blacklist words!"
|
@@ -116,7 +113,6 @@ async def rm_blacklist(_, m: Message):
|
|
116 |
"Could not find " + ", ".join(f"<code>{i}</code>" for i in non_found_words)
|
117 |
) + " in blcklisted words, skipped them."
|
118 |
|
119 |
-
LOGGER.info(f"{m.from_user.id} removed blacklists ({bl_words}) in {m.chat.id}")
|
120 |
bl_words = ", ".join(f"<code>{i}</code>" for i in bl_words)
|
121 |
await m.reply_text(
|
122 |
text=f"Removed <b>{bl_words}</b> from blacklist words!"
|
@@ -145,13 +141,9 @@ async def set_bl_action(_, m: Message):
|
|
145 |
|
146 |
return
|
147 |
db.set_action(action)
|
148 |
-
LOGGER.info(
|
149 |
-
f"{m.from_user.id} set blacklist action to '{action}' in {m.chat.id}",
|
150 |
-
)
|
151 |
await m.reply_text(text=f"Set action for blacklist for this to <b>{action}</b>")
|
152 |
elif len(m.text.split()) == 1:
|
153 |
action = db.get_action()
|
154 |
-
LOGGER.info(f"{m.from_user.id} checking blacklist action in {m.chat.id}")
|
155 |
await m.reply_text(
|
156 |
text=f"""The current action for blacklists in this chat is <i><b>{action}</b></i>
|
157 |
All blacklist modes delete the message containing blacklist word."""
|
@@ -201,7 +193,6 @@ async def rm_allbl_callback(_, q: CallbackQuery):
|
|
201 |
return
|
202 |
db.rm_all_blacklist()
|
203 |
await q.message.delete()
|
204 |
-
LOGGER.info(f"{user_id} removed all blacklists in {q.message.chat.id}")
|
205 |
await q.answer("Cleared all Blacklists!", show_alert=True)
|
206 |
return
|
207 |
|
|
|
15 |
async def view_blacklist(_, m: Message):
|
16 |
db = Blacklist(m.chat.id)
|
17 |
|
|
|
|
|
18 |
chat_title = m.chat.title
|
19 |
blacklists_chat = f"Current Blacklisted words in <b>{chat_title}</b>:\n\n"
|
20 |
all_blacklisted = db.get_blacklists()
|
|
|
56 |
", ".join([f"<code>{i}</code>" for i in bl_words])
|
57 |
+ " already added in blacklist, skipped them!"
|
58 |
)
|
|
|
59 |
trigger = ", ".join(f"<code>{i}</code>" for i in bl_words)
|
60 |
await m.reply_text(
|
61 |
text=f"Added <code>{trigger}</code> in blacklist words!"
|
|
|
113 |
"Could not find " + ", ".join(f"<code>{i}</code>" for i in non_found_words)
|
114 |
) + " in blcklisted words, skipped them."
|
115 |
|
|
|
116 |
bl_words = ", ".join(f"<code>{i}</code>" for i in bl_words)
|
117 |
await m.reply_text(
|
118 |
text=f"Removed <b>{bl_words}</b> from blacklist words!"
|
|
|
141 |
|
142 |
return
|
143 |
db.set_action(action)
|
|
|
|
|
|
|
144 |
await m.reply_text(text=f"Set action for blacklist for this to <b>{action}</b>")
|
145 |
elif len(m.text.split()) == 1:
|
146 |
action = db.get_action()
|
|
|
147 |
await m.reply_text(
|
148 |
text=f"""The current action for blacklists in this chat is <i><b>{action}</b></i>
|
149 |
All blacklist modes delete the message containing blacklist word."""
|
|
|
193 |
return
|
194 |
db.rm_all_blacklist()
|
195 |
await q.message.delete()
|
|
|
196 |
await q.answer("Cleared all Blacklists!", show_alert=True)
|
197 |
return
|
198 |
|
Powers/plugins/captcha.py
CHANGED
@@ -8,10 +8,9 @@ from pyrogram.types import InlineKeyboardButton as IKB
|
|
8 |
from pyrogram.types import InlineKeyboardMarkup as ikm
|
9 |
from pyrogram.types import Message
|
10 |
|
11 |
-
from Powers import LOGGER
|
12 |
from Powers.bot_class import Gojo
|
13 |
from Powers.database.captcha_db import CAPTCHA, CAPTCHA_DATA
|
14 |
-
from Powers.supports import get_support_staff
|
15 |
from Powers.utils.captcha_helper import (genrator, get_image_captcha,
|
16 |
get_qr_captcha)
|
17 |
from Powers.utils.custom_filters import admin_filter, command
|
@@ -138,7 +137,7 @@ async def on_chat_members_updatess(c: Gojo, u: ChatMemberUpdated):
|
|
138 |
captcha = CAPTCHA()
|
139 |
cap_data = CAPTCHA_DATA()
|
140 |
|
141 |
-
SUPPORT_STAFF =
|
142 |
if user in SUPPORT_STAFF:
|
143 |
return
|
144 |
|
|
|
8 |
from pyrogram.types import InlineKeyboardMarkup as ikm
|
9 |
from pyrogram.types import Message
|
10 |
|
11 |
+
from Powers import DEV_USERS, LOGGER, SUDO_USERS, WHITELIST_USERS
|
12 |
from Powers.bot_class import Gojo
|
13 |
from Powers.database.captcha_db import CAPTCHA, CAPTCHA_DATA
|
|
|
14 |
from Powers.utils.captcha_helper import (genrator, get_image_captcha,
|
15 |
get_qr_captcha)
|
16 |
from Powers.utils.custom_filters import admin_filter, command
|
|
|
137 |
captcha = CAPTCHA()
|
138 |
cap_data = CAPTCHA_DATA()
|
139 |
|
140 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
141 |
if user in SUPPORT_STAFF:
|
142 |
return
|
143 |
|
Powers/plugins/chat_blacklist.py
CHANGED
@@ -18,7 +18,6 @@ async def blacklist_chat(c: Gojo, m: Message):
|
|
18 |
if len(m.text.split()) >= 2:
|
19 |
chat_ids = m.text.split()[1:]
|
20 |
replymsg = await m.reply_text(f"Adding {len(chat_ids)} chats to blacklist")
|
21 |
-
LOGGER.info(f"{m.from_user.id} blacklisted {chat_ids} groups for bot")
|
22 |
for chat in chat_ids:
|
23 |
try:
|
24 |
get_chat = await c.get_chat(chat)
|
@@ -51,7 +50,6 @@ async def unblacklist_chat(c: Gojo, m: Message):
|
|
51 |
if len(m.text.split()) >= 2:
|
52 |
chat_ids = m.text.split()[1:]
|
53 |
replymsg = await m.reply_text(f"Removing {len(chat_ids)} chats from blacklist")
|
54 |
-
LOGGER.info(f"{m.from_user.id} removed blacklisted {chat_ids} groups for bot")
|
55 |
bl_chats = db.list_all_chats()
|
56 |
for chat in chat_ids:
|
57 |
try:
|
@@ -89,7 +87,6 @@ async def unblacklist_chat(c: Gojo, m: Message):
|
|
89 |
)
|
90 |
async def list_blacklist_chats(_, m: Message):
|
91 |
bl_chats = db.list_all_chats()
|
92 |
-
LOGGER.info(f"{m.from_user.id} checking group blacklists in {m.chat.id}")
|
93 |
if bl_chats:
|
94 |
txt = (
|
95 |
(
|
|
|
18 |
if len(m.text.split()) >= 2:
|
19 |
chat_ids = m.text.split()[1:]
|
20 |
replymsg = await m.reply_text(f"Adding {len(chat_ids)} chats to blacklist")
|
|
|
21 |
for chat in chat_ids:
|
22 |
try:
|
23 |
get_chat = await c.get_chat(chat)
|
|
|
50 |
if len(m.text.split()) >= 2:
|
51 |
chat_ids = m.text.split()[1:]
|
52 |
replymsg = await m.reply_text(f"Removing {len(chat_ids)} chats from blacklist")
|
|
|
53 |
bl_chats = db.list_all_chats()
|
54 |
for chat in chat_ids:
|
55 |
try:
|
|
|
87 |
)
|
88 |
async def list_blacklist_chats(_, m: Message):
|
89 |
bl_chats = db.list_all_chats()
|
|
|
90 |
if bl_chats:
|
91 |
txt = (
|
92 |
(
|
Powers/plugins/clean_db.py
CHANGED
@@ -18,7 +18,6 @@ from Powers.database.pins_db import Pins
|
|
18 |
from Powers.database.reporting_db import Reporting
|
19 |
# from Powers.database.users_db import Users
|
20 |
from Powers.database.warns_db import Warns, WarnSettings
|
21 |
-
from Powers.vars import Config
|
22 |
|
23 |
|
24 |
async def clean_my_db(c: Gojo, is_cmd=False, id=None):
|
|
|
18 |
from Powers.database.reporting_db import Reporting
|
19 |
# from Powers.database.users_db import Users
|
20 |
from Powers.database.warns_db import Warns, WarnSettings
|
|
|
21 |
|
22 |
|
23 |
async def clean_my_db(c: Gojo, is_cmd=False, id=None):
|
Powers/plugins/dev.py
CHANGED
@@ -16,15 +16,15 @@ from pyrogram.types import InlineKeyboardButton as IKB
|
|
16 |
from pyrogram.types import InlineKeyboardMarkup as IKM
|
17 |
from pyrogram.types import Message
|
18 |
|
19 |
-
from Powers import (BOT_TOKEN, LOG_DATETIME, LOGFILE, LOGGER,
|
20 |
-
OWNER_ID, UPTIME
|
|
|
21 |
from Powers.bot_class import Gojo
|
22 |
from Powers.database import MongoDB
|
23 |
from Powers.database.chats_db import Chats
|
24 |
from Powers.database.support_db import SUPPORTS
|
25 |
from Powers.database.users_db import Users
|
26 |
from Powers.plugins.scheduled_jobs import clean_my_db
|
27 |
-
from Powers.supports import get_support_staff
|
28 |
from Powers.utils.clean_file import remove_markdown_and_html
|
29 |
from Powers.utils.custom_filters import command
|
30 |
from Powers.utils.extract_user import extract_user
|
@@ -80,6 +80,12 @@ async def add_support(c: Gojo, m:Message):
|
|
80 |
return
|
81 |
else:
|
82 |
support.insert_support_user(userr,to)
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
await m.reply_text(f"This user is now a {to} user")
|
84 |
return
|
85 |
can_do = can_change_type(curr_user,to)
|
@@ -196,6 +202,9 @@ async def rm_support(c: Gojo, m: Message):
|
|
196 |
can_user = can_change_type(curr_user,to_user)
|
197 |
if m.from_user.id == int(OWNER_ID) or can_user:
|
198 |
support.delete_support_user(curr)
|
|
|
|
|
|
|
199 |
await m.reply_text("Done! User now no longer belongs to the support staff")
|
200 |
else:
|
201 |
await m.reply_text("Sorry you can't do that...")
|
@@ -203,7 +212,6 @@ async def rm_support(c: Gojo, m: Message):
|
|
203 |
|
204 |
@Gojo.on_message(command("ping", sudo_cmd=True))
|
205 |
async def ping(_, m: Message):
|
206 |
-
LOGGER.info(f"{m.from_user.id} used ping cmd in {m.chat.id}")
|
207 |
start = time()
|
208 |
replymsg = await m.reply_text(text="Pinging...", quote=True)
|
209 |
delta_ping = time() - start
|
@@ -386,6 +394,10 @@ async def evaluate_code(c: Gojo, m: Message):
|
|
386 |
MESSAGE_DUMP,
|
387 |
f"@{m.from_user.username} TREID TO FETCH ENV OF BOT \n userid = {m.from_user.id}",
|
388 |
)
|
|
|
|
|
|
|
|
|
389 |
for j in HARMFUL:
|
390 |
if j in evaluation.split() or j in cmd:
|
391 |
if m.from_user.id != OWNER_ID:
|
@@ -393,6 +405,9 @@ async def evaluate_code(c: Gojo, m: Message):
|
|
393 |
await c.send_message(
|
394 |
MESSAGE_DUMP,
|
395 |
f"@{m.from_user.username} TREID TO FETCH ENV OF BOT \n userid = {m.from_user.id}")
|
|
|
|
|
|
|
396 |
for i in evaluation.split():
|
397 |
for j in i.split("="):
|
398 |
if j and j[0] in HARMFUL:
|
@@ -402,10 +417,12 @@ async def evaluate_code(c: Gojo, m: Message):
|
|
402 |
MESSAGE_DUMP,
|
403 |
f"@{m.from_user.username} TREID TO FETCH ENV OF BOT \n userid = {m.from_user.id}"
|
404 |
)
|
405 |
-
|
|
|
|
|
406 |
|
407 |
try:
|
408 |
-
final_output = f"**EVAL**: ```python\n{cmd}```\n\n<b>OUTPUT</b>:\n```
|
409 |
await sm.edit(final_output)
|
410 |
except MessageTooLong:
|
411 |
final_output = f"<b>EVAL</b>: <code>{cmd}</code>\n\n<b>OUTPUT</b>:\n<code>{evaluation}</code> \n"
|
|
|
16 |
from pyrogram.types import InlineKeyboardMarkup as IKM
|
17 |
from pyrogram.types import Message
|
18 |
|
19 |
+
from Powers import (BOT_TOKEN, DEV_USERS, LOG_DATETIME, LOGFILE, LOGGER,
|
20 |
+
MESSAGE_DUMP, OWNER_ID, SUDO_USERS, UPTIME,
|
21 |
+
WHITELIST_USERS)
|
22 |
from Powers.bot_class import Gojo
|
23 |
from Powers.database import MongoDB
|
24 |
from Powers.database.chats_db import Chats
|
25 |
from Powers.database.support_db import SUPPORTS
|
26 |
from Powers.database.users_db import Users
|
27 |
from Powers.plugins.scheduled_jobs import clean_my_db
|
|
|
28 |
from Powers.utils.clean_file import remove_markdown_and_html
|
29 |
from Powers.utils.custom_filters import command
|
30 |
from Powers.utils.extract_user import extract_user
|
|
|
80 |
return
|
81 |
else:
|
82 |
support.insert_support_user(userr,to)
|
83 |
+
if to == "dev":
|
84 |
+
DEV_USERS.add(userr)
|
85 |
+
elif to == "sudo":
|
86 |
+
SUDO_USERS.add(userr)
|
87 |
+
else:
|
88 |
+
WHITELIST_USERS.add(userr)
|
89 |
await m.reply_text(f"This user is now a {to} user")
|
90 |
return
|
91 |
can_do = can_change_type(curr_user,to)
|
|
|
202 |
can_user = can_change_type(curr_user,to_user)
|
203 |
if m.from_user.id == int(OWNER_ID) or can_user:
|
204 |
support.delete_support_user(curr)
|
205 |
+
DEV_USERS.discard(curr)
|
206 |
+
SUDO_USERS.discard(curr)
|
207 |
+
WHITELIST_USERS.discard(curr)
|
208 |
await m.reply_text("Done! User now no longer belongs to the support staff")
|
209 |
else:
|
210 |
await m.reply_text("Sorry you can't do that...")
|
|
|
212 |
|
213 |
@Gojo.on_message(command("ping", sudo_cmd=True))
|
214 |
async def ping(_, m: Message):
|
|
|
215 |
start = time()
|
216 |
replymsg = await m.reply_text(text="Pinging...", quote=True)
|
217 |
delta_ping = time() - start
|
|
|
394 |
MESSAGE_DUMP,
|
395 |
f"@{m.from_user.username} TREID TO FETCH ENV OF BOT \n userid = {m.from_user.id}",
|
396 |
)
|
397 |
+
final_output = f"**EVAL**: ```python\n{cmd}```\n\n<b>OUTPUT</b>:\n```powershell\n{evaluation}```</code> \n"
|
398 |
+
await sm.edit(final_output)
|
399 |
+
return
|
400 |
+
|
401 |
for j in HARMFUL:
|
402 |
if j in evaluation.split() or j in cmd:
|
403 |
if m.from_user.id != OWNER_ID:
|
|
|
405 |
await c.send_message(
|
406 |
MESSAGE_DUMP,
|
407 |
f"@{m.from_user.username} TREID TO FETCH ENV OF BOT \n userid = {m.from_user.id}")
|
408 |
+
final_output = f"**EVAL**: ```python\n{cmd}```\n\n<b>OUTPUT</b>:\n```powershell\n{evaluation}```</code> \n"
|
409 |
+
await sm.edit(final_output)
|
410 |
+
return
|
411 |
for i in evaluation.split():
|
412 |
for j in i.split("="):
|
413 |
if j and j[0] in HARMFUL:
|
|
|
417 |
MESSAGE_DUMP,
|
418 |
f"@{m.from_user.username} TREID TO FETCH ENV OF BOT \n userid = {m.from_user.id}"
|
419 |
)
|
420 |
+
final_output = f"**EVAL**: ```python\n{cmd}```\n\n<b>OUTPUT</b>:\n```powershell\n{evaluation}```</code> \n"
|
421 |
+
await sm.edit(final_output)
|
422 |
+
return
|
423 |
|
424 |
try:
|
425 |
+
final_output = f"**EVAL**: ```python\n{cmd}```\n\n<b>OUTPUT</b>:\n```powershell\n{evaluation}```</code> \n"
|
426 |
await sm.edit(final_output)
|
427 |
except MessageTooLong:
|
428 |
final_output = f"<b>EVAL</b>: <code>{cmd}</code>\n\n<b>OUTPUT</b>:\n<code>{evaluation}</code> \n"
|
Powers/plugins/disable.py
CHANGED
@@ -24,7 +24,6 @@ async def disableit(_, m: Message):
|
|
24 |
|
25 |
db = Disabling(m.chat.id)
|
26 |
disable_list = db.get_disabled()
|
27 |
-
LOGGER.info(f"{m.from_user.id} used disabled cmd in {m.chat.id}")
|
28 |
|
29 |
if str(m.text.split(None, 1)[1]) in disable_list:
|
30 |
return await m.reply_text("It's already disabled!")
|
@@ -48,8 +47,6 @@ async def set_dsbl_action(_, m: Message):
|
|
48 |
cur = True
|
49 |
args = m.text.split(" ", 1)
|
50 |
|
51 |
-
LOGGER.info(f"{m.from_user.id} disabledel used in {m.chat.id}")
|
52 |
-
|
53 |
if len(args) >= 2:
|
54 |
if args[1].lower() == "on":
|
55 |
db.set_action("del")
|
@@ -73,7 +70,6 @@ async def enableit(_, m: Message):
|
|
73 |
if str(m.text.split(None, 1)[1]) not in disable_list:
|
74 |
return await m.reply_text("It's not disabled!")
|
75 |
db.remove_disabled((str(m.text.split(None, 1)[1])).lower())
|
76 |
-
LOGGER.info(f"{m.from_user.id} enabled something in {m.chat.id}")
|
77 |
return await m.reply_text(f"Enabled {m.text.split(None, 1)[1]}!")
|
78 |
|
79 |
|
@@ -86,7 +82,6 @@ async def disabling(_, m: Message):
|
|
86 |
)
|
87 |
tes = "List of commnds that can be disabled:\n"
|
88 |
tes += "\n".join(f" • <code>{escape(i)}</code>" for i in disable_cmd_keys)
|
89 |
-
LOGGER.info(f"{m.from_user.id} checked disableable {m.chat.id}")
|
90 |
return await m.reply_text(tes)
|
91 |
|
92 |
|
@@ -99,7 +94,6 @@ async def disabled(_, m: Message):
|
|
99 |
return
|
100 |
tex = "Disabled commands:\n"
|
101 |
tex += "\n".join(f" • <code>{escape(i)}</code>" for i in disable_list)
|
102 |
-
LOGGER.info(f"{m.from_user.id} checked disabled {m.chat.id}")
|
103 |
return await m.reply_text(tex)
|
104 |
|
105 |
|
@@ -145,7 +139,6 @@ async def enablealll(_, q: CallbackQuery):
|
|
145 |
return
|
146 |
db = Disabling(q.message.chat.id)
|
147 |
db.rm_all_disabled()
|
148 |
-
LOGGER.info(f"{user_id} enabled all in {q.message.chat.id}")
|
149 |
await q.message.edit_text("Enabled all!", show_alert=True)
|
150 |
return
|
151 |
|
|
|
24 |
|
25 |
db = Disabling(m.chat.id)
|
26 |
disable_list = db.get_disabled()
|
|
|
27 |
|
28 |
if str(m.text.split(None, 1)[1]) in disable_list:
|
29 |
return await m.reply_text("It's already disabled!")
|
|
|
47 |
cur = True
|
48 |
args = m.text.split(" ", 1)
|
49 |
|
|
|
|
|
50 |
if len(args) >= 2:
|
51 |
if args[1].lower() == "on":
|
52 |
db.set_action("del")
|
|
|
70 |
if str(m.text.split(None, 1)[1]) not in disable_list:
|
71 |
return await m.reply_text("It's not disabled!")
|
72 |
db.remove_disabled((str(m.text.split(None, 1)[1])).lower())
|
|
|
73 |
return await m.reply_text(f"Enabled {m.text.split(None, 1)[1]}!")
|
74 |
|
75 |
|
|
|
82 |
)
|
83 |
tes = "List of commnds that can be disabled:\n"
|
84 |
tes += "\n".join(f" • <code>{escape(i)}</code>" for i in disable_cmd_keys)
|
|
|
85 |
return await m.reply_text(tes)
|
86 |
|
87 |
|
|
|
94 |
return
|
95 |
tex = "Disabled commands:\n"
|
96 |
tex += "\n".join(f" • <code>{escape(i)}</code>" for i in disable_list)
|
|
|
97 |
return await m.reply_text(tex)
|
98 |
|
99 |
|
|
|
139 |
return
|
140 |
db = Disabling(q.message.chat.id)
|
141 |
db.rm_all_disabled()
|
|
|
142 |
await q.message.edit_text("Enabled all!", show_alert=True)
|
143 |
return
|
144 |
|
Powers/plugins/filters.py
CHANGED
@@ -25,8 +25,6 @@ db = Filters()
|
|
25 |
|
26 |
@Gojo.on_message(command("filters") & filters.group & ~filters.bot)
|
27 |
async def view_filters(_, m: Message):
|
28 |
-
LOGGER.info(f"{m.from_user.id} checking filters in {m.chat.id}")
|
29 |
-
|
30 |
filters_chat = f"Filters in <b>{m.chat.title}</b>:\n"
|
31 |
all_filters = db.get_all_filters(m.chat.id)
|
32 |
actual_filters = [j for i in all_filters for j in i.split("|")]
|
@@ -66,9 +64,9 @@ async def add_filter(_, m: Message):
|
|
66 |
extracted = await split_quotes(args[1])
|
67 |
keyword = extracted[0].lower()
|
68 |
|
69 |
-
for k in keyword.split("|"):
|
70 |
-
|
71 |
-
|
72 |
|
73 |
if not keyword:
|
74 |
return await m.reply_text(
|
@@ -98,7 +96,6 @@ async def add_filter(_, m: Message):
|
|
98 |
)
|
99 |
|
100 |
add = db.save_filter(m.chat.id, keyword, teks, msgtype, file_id)
|
101 |
-
LOGGER.info(f"{m.from_user.id} added new filter ({keyword}) in {m.chat.id}")
|
102 |
if add:
|
103 |
await m.reply_text(
|
104 |
f"Saved filter for '<code>{', '.join(keyword.split('|'))}</code>' in <b>{m.chat.title}</b>!",
|
@@ -122,7 +119,6 @@ async def stop_filter(_, m: Message):
|
|
122 |
for keyword in act_filters:
|
123 |
if keyword == m.text.split(None, 1)[1].lower():
|
124 |
db.rm_filter(m.chat.id, m.text.split(None, 1)[1].lower())
|
125 |
-
LOGGER.info(f"{m.from_user.id} removed filter ({keyword}) in {m.chat.id}")
|
126 |
await m.reply_text(
|
127 |
f"Okay, I'll stop replying to that filter and it's aliases in <b>{m.chat.title}</b>.",
|
128 |
)
|
@@ -171,7 +167,6 @@ async def rm_allfilters_callback(_, q: CallbackQuery):
|
|
171 |
return
|
172 |
db.rm_all_filters(q.message.chat.id)
|
173 |
await q.message.edit_text(f"Cleared all filters for {q.message.chat.title}")
|
174 |
-
LOGGER.info(f"{user_id} removed all filter from {q.message.chat.id}")
|
175 |
await q.answer("Cleared all Filters!", show_alert=True)
|
176 |
return
|
177 |
|
|
|
25 |
|
26 |
@Gojo.on_message(command("filters") & filters.group & ~filters.bot)
|
27 |
async def view_filters(_, m: Message):
|
|
|
|
|
28 |
filters_chat = f"Filters in <b>{m.chat.title}</b>:\n"
|
29 |
all_filters = db.get_all_filters(m.chat.id)
|
30 |
actual_filters = [j for i in all_filters for j in i.split("|")]
|
|
|
64 |
extracted = await split_quotes(args[1])
|
65 |
keyword = extracted[0].lower()
|
66 |
|
67 |
+
# for k in keyword.split("|"):
|
68 |
+
# if k in actual_filters:
|
69 |
+
# return await m.reply_text(f"Filter <code>{k}</code> already exists!")
|
70 |
|
71 |
if not keyword:
|
72 |
return await m.reply_text(
|
|
|
96 |
)
|
97 |
|
98 |
add = db.save_filter(m.chat.id, keyword, teks, msgtype, file_id)
|
|
|
99 |
if add:
|
100 |
await m.reply_text(
|
101 |
f"Saved filter for '<code>{', '.join(keyword.split('|'))}</code>' in <b>{m.chat.title}</b>!",
|
|
|
119 |
for keyword in act_filters:
|
120 |
if keyword == m.text.split(None, 1)[1].lower():
|
121 |
db.rm_filter(m.chat.id, m.text.split(None, 1)[1].lower())
|
|
|
122 |
await m.reply_text(
|
123 |
f"Okay, I'll stop replying to that filter and it's aliases in <b>{m.chat.title}</b>.",
|
124 |
)
|
|
|
167 |
return
|
168 |
db.rm_all_filters(q.message.chat.id)
|
169 |
await q.message.edit_text(f"Cleared all filters for {q.message.chat.title}")
|
|
|
170 |
await q.answer("Cleared all Filters!", show_alert=True)
|
171 |
return
|
172 |
|
Powers/plugins/flood.py
CHANGED
@@ -11,13 +11,11 @@ from pyrogram.types import (CallbackQuery, ChatPermissions,
|
|
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 |
-
from Powers.vars import Config
|
21 |
|
22 |
on_key = ["on", "start", "disable"]
|
23 |
off_key = ["off", "end", "enable", "stop"]
|
@@ -230,7 +228,7 @@ async def flood_set(c: Gojo, m: Message):
|
|
230 |
|
231 |
@Gojo.on_callback_query(filters.regex("^f_"))
|
232 |
async def callbacks(c: Gojo, q: CallbackQuery):
|
233 |
-
SUPPORT_STAFF =
|
234 |
data = q.data
|
235 |
if data == "f_close":
|
236 |
await q.answer("Closed")
|
@@ -352,7 +350,7 @@ async def reverse_callbacks(c: Gojo, q: CallbackQuery):
|
|
352 |
data = q.data.split("_")
|
353 |
action = data[1]
|
354 |
user_id = int(q.data.split("=")[1])
|
355 |
-
SUPPORT_STAFF =
|
356 |
if not q.from_user:
|
357 |
return q.answer("Looks like you are not an user 👀")
|
358 |
if action == "ban":
|
@@ -572,13 +570,13 @@ async def flood_watcher(c: Gojo, m: Message):
|
|
572 |
|
573 |
elif action == "kick":
|
574 |
try:
|
575 |
-
await m.chat.ban_member(u_id)
|
576 |
txt = "Don't dare to spam here if I am around! Nothing can escape my 6 eyes\nAction: kicked\nReason: Spaming"
|
577 |
await m.reply_animation(
|
578 |
animation=str(choice(KICK_GIFS)),
|
579 |
caption=txt,
|
580 |
)
|
581 |
-
await m.chat.unban_member(
|
582 |
dic[c_id][u_id][1].clear()
|
583 |
dic[c_id][u_id][0].clear()
|
584 |
return
|
|
|
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 |
|
20 |
on_key = ["on", "start", "disable"]
|
21 |
off_key = ["off", "end", "enable", "stop"]
|
|
|
228 |
|
229 |
@Gojo.on_callback_query(filters.regex("^f_"))
|
230 |
async def callbacks(c: Gojo, q: CallbackQuery):
|
231 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
232 |
data = q.data
|
233 |
if data == "f_close":
|
234 |
await q.answer("Closed")
|
|
|
350 |
data = q.data.split("_")
|
351 |
action = data[1]
|
352 |
user_id = int(q.data.split("=")[1])
|
353 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
354 |
if not q.from_user:
|
355 |
return q.answer("Looks like you are not an user 👀")
|
356 |
if action == "ban":
|
|
|
570 |
|
571 |
elif action == "kick":
|
572 |
try:
|
573 |
+
await m.chat.ban_member(u_id, datetime.now()+timedelta(seconds=10))
|
574 |
txt = "Don't dare to spam here if I am around! Nothing can escape my 6 eyes\nAction: kicked\nReason: Spaming"
|
575 |
await m.reply_animation(
|
576 |
animation=str(choice(KICK_GIFS)),
|
577 |
caption=txt,
|
578 |
)
|
579 |
+
await m.chat.unban_member(m.from_user.id)
|
580 |
dic[c_id][u_id][1].clear()
|
581 |
dic[c_id][u_id][0].clear()
|
582 |
return
|
Powers/plugins/formatting.py
CHANGED
@@ -35,7 +35,6 @@ async def markdownhelp(_, m: Message):
|
|
35 |
quote=True,
|
36 |
reply_markup=(await gen_formatting_kb(m)),
|
37 |
)
|
38 |
-
LOGGER.info(f"{m.from_user.id} used cmd '{m.command}' in {m.chat.id}")
|
39 |
return
|
40 |
|
41 |
|
|
|
35 |
quote=True,
|
36 |
reply_markup=(await gen_formatting_kb(m)),
|
37 |
)
|
|
|
38 |
return
|
39 |
|
40 |
|
Powers/plugins/fun.py
CHANGED
@@ -5,15 +5,13 @@ from pyrogram import enums
|
|
5 |
from pyrogram.errors import MessageTooLong
|
6 |
from pyrogram.types import Message
|
7 |
|
8 |
-
from Powers import
|
9 |
from Powers.bot_class import Gojo
|
10 |
-
from Powers.supports import get_support_staff
|
11 |
from Powers.utils import extras
|
12 |
from Powers.utils.custom_filters import command
|
13 |
from Powers.utils.extras import NOWYES as NO
|
14 |
from Powers.utils.extras import YESWNO as YES
|
15 |
|
16 |
-
DEV_USERS = get_support_staff("dev")
|
17 |
|
18 |
@Gojo.on_message(command("shout"))
|
19 |
async def fun_shout(_, m: Message):
|
@@ -33,7 +31,6 @@ async def fun_shout(_, m: Message):
|
|
33 |
result = "".join(result)
|
34 |
msg = "```\n" + result + "```"
|
35 |
await m.reply_text(msg, parse_mode=enums.ParseMode.MARKDOWN)
|
36 |
-
LOGGER.info(f"{m.from_user.id} shouted in {m.chat.id}")
|
37 |
return
|
38 |
except MessageTooLong as e:
|
39 |
await m.reply_text(f"Error: {e}")
|
@@ -43,7 +40,6 @@ async def fun_shout(_, m: Message):
|
|
43 |
@Gojo.on_message(command("runs"))
|
44 |
async def fun_run(_, m: Message):
|
45 |
await m.reply_text(choice(extras.RUN_STRINGS))
|
46 |
-
LOGGER.info(f"{m.from_user.id} runed in {m.chat.id}")
|
47 |
return
|
48 |
|
49 |
|
@@ -79,7 +75,6 @@ async def fun_slap(c: Gojo, m: Message):
|
|
79 |
|
80 |
reply = temp.format(user1=user1, user2=user2, item=item, hits=hit, throws=throw)
|
81 |
await reply_text(reply)
|
82 |
-
LOGGER.info(f"{m.from_user.id} slaped in {m.chat.id}")
|
83 |
return
|
84 |
|
85 |
|
@@ -87,7 +82,6 @@ async def fun_slap(c: Gojo, m: Message):
|
|
87 |
async def fun_roll(_, m: Message):
|
88 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
89 |
await reply_text(choice(range(1, 7)))
|
90 |
-
LOGGER.info(f"{m.from_user.id} roll in {m.chat.id}")
|
91 |
return
|
92 |
|
93 |
|
@@ -95,7 +89,6 @@ async def fun_roll(_, m: Message):
|
|
95 |
async def fun_toss(_, m: Message):
|
96 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
97 |
await reply_text(choice(extras.TOSS))
|
98 |
-
LOGGER.info(f"{m.from_user.id} tossed in {m.chat.id}")
|
99 |
return
|
100 |
|
101 |
|
@@ -108,13 +101,9 @@ async def insult(c: Gojo, m: Message):
|
|
108 |
user_first_name = m.reply_to_message.from_user.first_name
|
109 |
if user_id in DEV_USERS:
|
110 |
await m.reply_text("Sorry! I can't insult my devs....")
|
111 |
-
return LOGGER.info(
|
112 |
-
f"{m.from_user.id} tried to insult {user_first_name} in {m.chat.id}"
|
113 |
-
)
|
114 |
else:
|
115 |
Insult_omp = choice(extras.INSULT_STRINGS)
|
116 |
await m.reply_to_message.reply_text(Insult_omp)
|
117 |
-
LOGGER.info(f"{m.from_user.id} insulted {user_first_name} in {m.chat.id}")
|
118 |
|
119 |
|
120 |
@Gojo.on_message(command("yes"))
|
@@ -122,7 +111,6 @@ async def yesw(c: Gojo, m: Message):
|
|
122 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
123 |
rtext = YES[0]
|
124 |
await reply_text(rtext)
|
125 |
-
LOGGER.info(f"{m.from_user.id} said YES or may be NO in {m.chat.id}")
|
126 |
return
|
127 |
|
128 |
|
@@ -131,7 +119,6 @@ async def now(c: Gojo, m: Message):
|
|
131 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
132 |
rtext = NO[0]
|
133 |
await reply_text(rtext)
|
134 |
-
LOGGER.info(f"{m.from_user.id} said NO or may be YES in {m.chat.id}")
|
135 |
return
|
136 |
|
137 |
|
@@ -139,7 +126,6 @@ async def now(c: Gojo, m: Message):
|
|
139 |
async def fun_shrug(_, m: Message):
|
140 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
141 |
await reply_text(r"¯\_(ツ)_/¯")
|
142 |
-
LOGGER.info(f"{m.from_user.id} shruged in {m.chat.id}")
|
143 |
return
|
144 |
|
145 |
|
@@ -149,7 +135,6 @@ async def fun_bluetext(_, m: Message):
|
|
149 |
await reply_text(
|
150 |
"|| /BLUE /TEXT\n/MUST /CLICK\n/I /AM /A /STUPID /ANIMAL /THAT /IS /ATTRACTED /TO /COLORS ||",
|
151 |
)
|
152 |
-
LOGGER.info(f"{m.from_user.id} bluetexted in {m.chat.id}")
|
153 |
return
|
154 |
|
155 |
|
@@ -157,7 +142,6 @@ async def fun_bluetext(_, m: Message):
|
|
157 |
async def fun_decide(_, m: Message):
|
158 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
159 |
await reply_text(choice(extras.DECIDE))
|
160 |
-
LOGGER.info(f"{m.from_user.id} decided in {m.chat.id}")
|
161 |
return
|
162 |
|
163 |
|
@@ -165,7 +149,6 @@ async def fun_decide(_, m: Message):
|
|
165 |
async def fun_table(_, m: Message):
|
166 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
167 |
await reply_text(choice(extras.REACTIONS))
|
168 |
-
LOGGER.info(f"{m.from_user.id} reacted in {m.chat.id}")
|
169 |
return
|
170 |
|
171 |
|
@@ -199,7 +182,6 @@ async def weebify(_, m: Message):
|
|
199 |
text=f"""<b>Weebified String:</b>
|
200 |
<code>{string}</code>"""
|
201 |
)
|
202 |
-
LOGGER.info(f"{m.from_user.id} weebified '{args}' in {m.chat.id}")
|
203 |
return
|
204 |
|
205 |
|
|
|
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
|
13 |
from Powers.utils.extras import YESWNO as YES
|
14 |
|
|
|
15 |
|
16 |
@Gojo.on_message(command("shout"))
|
17 |
async def fun_shout(_, m: Message):
|
|
|
31 |
result = "".join(result)
|
32 |
msg = "```\n" + result + "```"
|
33 |
await m.reply_text(msg, parse_mode=enums.ParseMode.MARKDOWN)
|
|
|
34 |
return
|
35 |
except MessageTooLong as e:
|
36 |
await m.reply_text(f"Error: {e}")
|
|
|
40 |
@Gojo.on_message(command("runs"))
|
41 |
async def fun_run(_, m: Message):
|
42 |
await m.reply_text(choice(extras.RUN_STRINGS))
|
|
|
43 |
return
|
44 |
|
45 |
|
|
|
75 |
|
76 |
reply = temp.format(user1=user1, user2=user2, item=item, hits=hit, throws=throw)
|
77 |
await reply_text(reply)
|
|
|
78 |
return
|
79 |
|
80 |
|
|
|
82 |
async def fun_roll(_, m: Message):
|
83 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
84 |
await reply_text(choice(range(1, 7)))
|
|
|
85 |
return
|
86 |
|
87 |
|
|
|
89 |
async def fun_toss(_, m: Message):
|
90 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
91 |
await reply_text(choice(extras.TOSS))
|
|
|
92 |
return
|
93 |
|
94 |
|
|
|
101 |
user_first_name = m.reply_to_message.from_user.first_name
|
102 |
if user_id in DEV_USERS:
|
103 |
await m.reply_text("Sorry! I can't insult my devs....")
|
|
|
|
|
|
|
104 |
else:
|
105 |
Insult_omp = choice(extras.INSULT_STRINGS)
|
106 |
await m.reply_to_message.reply_text(Insult_omp)
|
|
|
107 |
|
108 |
|
109 |
@Gojo.on_message(command("yes"))
|
|
|
111 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
112 |
rtext = YES[0]
|
113 |
await reply_text(rtext)
|
|
|
114 |
return
|
115 |
|
116 |
|
|
|
119 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
120 |
rtext = NO[0]
|
121 |
await reply_text(rtext)
|
|
|
122 |
return
|
123 |
|
124 |
|
|
|
126 |
async def fun_shrug(_, m: Message):
|
127 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
128 |
await reply_text(r"¯\_(ツ)_/¯")
|
|
|
129 |
return
|
130 |
|
131 |
|
|
|
135 |
await reply_text(
|
136 |
"|| /BLUE /TEXT\n/MUST /CLICK\n/I /AM /A /STUPID /ANIMAL /THAT /IS /ATTRACTED /TO /COLORS ||",
|
137 |
)
|
|
|
138 |
return
|
139 |
|
140 |
|
|
|
142 |
async def fun_decide(_, m: Message):
|
143 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
144 |
await reply_text(choice(extras.DECIDE))
|
|
|
145 |
return
|
146 |
|
147 |
|
|
|
149 |
async def fun_table(_, m: Message):
|
150 |
reply_text = m.reply_to_message.reply_text if m.reply_to_message else m.reply_text
|
151 |
await reply_text(choice(extras.REACTIONS))
|
|
|
152 |
return
|
153 |
|
154 |
|
|
|
182 |
text=f"""<b>Weebified String:</b>
|
183 |
<code>{string}</code>"""
|
184 |
)
|
|
|
185 |
return
|
186 |
|
187 |
|
Powers/plugins/greetings.py
CHANGED
@@ -7,11 +7,10 @@ from pyrogram.enums import ChatMemberStatus as CMS
|
|
7 |
from pyrogram.errors import ChannelPrivate, ChatAdminRequired, RPCError
|
8 |
from pyrogram.types import ChatMemberUpdated, Message
|
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, command
|
17 |
from Powers.utils.kbhelpers import ikb
|
@@ -19,13 +18,10 @@ from Powers.utils.msg_types import Types, get_wlcm_type
|
|
19 |
from Powers.utils.parser import escape_markdown, mention_html
|
20 |
from Powers.utils.string import (build_keyboard, escape_invalid_curly_brackets,
|
21 |
parse_button)
|
22 |
-
from Powers.vars import Config
|
23 |
|
24 |
# Initialize
|
25 |
gdb = GBan()
|
26 |
|
27 |
-
DEV_USERS = get_support_staff("dev")
|
28 |
-
|
29 |
ChatType = enums.ChatType
|
30 |
|
31 |
|
@@ -243,11 +239,7 @@ async def cleannnnn(_, m: Message):
|
|
243 |
@Gojo.on_chat_member_updated(filters.group, group=69)
|
244 |
async def member_has_joined(c: Gojo, member: ChatMemberUpdated):
|
245 |
|
246 |
-
if
|
247 |
-
member.new_chat_member
|
248 |
-
and member.new_chat_member.status not in {CMS.BANNED, CMS.LEFT, CMS.RESTRICTED}
|
249 |
-
and not member.old_chat_member
|
250 |
-
):
|
251 |
pass
|
252 |
else:
|
253 |
return
|
@@ -263,7 +255,7 @@ async def member_has_joined(c: Gojo, member: ChatMemberUpdated):
|
|
263 |
await c.send_animation(
|
264 |
chat_id=member.chat.id,
|
265 |
animation="./extras/william.gif",
|
266 |
-
caption="😳 My **DEV** has also joined the chat!",
|
267 |
)
|
268 |
return
|
269 |
if banned_users:
|
@@ -345,11 +337,7 @@ async def member_has_joined(c: Gojo, member: ChatMemberUpdated):
|
|
345 |
@Gojo.on_chat_member_updated(filters.group, group=99)
|
346 |
async def member_has_left(c: Gojo, member: ChatMemberUpdated):
|
347 |
|
348 |
-
if
|
349 |
-
not member.new_chat_member
|
350 |
-
and member.old_chat_member.status not in {CMS.BANNED, CMS.RESTRICTED}
|
351 |
-
and member.old_chat_member
|
352 |
-
):
|
353 |
pass
|
354 |
else:
|
355 |
return
|
@@ -395,7 +383,7 @@ async def member_has_left(c: Gojo, member: ChatMemberUpdated):
|
|
395 |
if user.id in DEV_USERS:
|
396 |
await c.send_message(
|
397 |
member.chat.id,
|
398 |
-
"Will miss you master :(",
|
399 |
)
|
400 |
return
|
401 |
if not teks:
|
@@ -419,6 +407,8 @@ async def member_has_left(c: Gojo, member: ChatMemberUpdated):
|
|
419 |
if ooo:
|
420 |
db.set_cleangoodbye_id(int(ooo.id))
|
421 |
return
|
|
|
|
|
422 |
except RPCError as e:
|
423 |
LOGGER.error(e)
|
424 |
LOGGER.error(format_exc(e))
|
@@ -551,8 +541,6 @@ async def goodbye(c: Gojo, m: Message):
|
|
551 |
reply_markup=button,
|
552 |
)
|
553 |
return
|
554 |
-
return
|
555 |
-
|
556 |
|
557 |
__PLUGIN__ = "greetings"
|
558 |
__alt_name__ = ["welcome", "goodbye", "cleanservice"]
|
|
|
7 |
from pyrogram.errors import ChannelPrivate, ChatAdminRequired, RPCError
|
8 |
from pyrogram.types import ChatMemberUpdated, Message
|
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, command
|
16 |
from Powers.utils.kbhelpers import ikb
|
|
|
18 |
from Powers.utils.parser import escape_markdown, mention_html
|
19 |
from Powers.utils.string import (build_keyboard, escape_invalid_curly_brackets,
|
20 |
parse_button)
|
|
|
21 |
|
22 |
# Initialize
|
23 |
gdb = GBan()
|
24 |
|
|
|
|
|
25 |
ChatType = enums.ChatType
|
26 |
|
27 |
|
|
|
239 |
@Gojo.on_chat_member_updated(filters.group, group=69)
|
240 |
async def member_has_joined(c: Gojo, member: ChatMemberUpdated):
|
241 |
|
242 |
+
if member.new_chat_member.status not in {CMS.BANNED, CMS.LEFT, CMS.RESTRICTED}:
|
|
|
|
|
|
|
|
|
243 |
pass
|
244 |
else:
|
245 |
return
|
|
|
255 |
await c.send_animation(
|
256 |
chat_id=member.chat.id,
|
257 |
animation="./extras/william.gif",
|
258 |
+
caption=f"😳 My **DEV** {user.mention} has also joined the chat!",
|
259 |
)
|
260 |
return
|
261 |
if banned_users:
|
|
|
337 |
@Gojo.on_chat_member_updated(filters.group, group=99)
|
338 |
async def member_has_left(c: Gojo, member: ChatMemberUpdated):
|
339 |
|
340 |
+
if member.old_chat_member.status == CMS.LEFT:
|
|
|
|
|
|
|
|
|
341 |
pass
|
342 |
else:
|
343 |
return
|
|
|
383 |
if user.id in DEV_USERS:
|
384 |
await c.send_message(
|
385 |
member.chat.id,
|
386 |
+
f"Will miss you my master {user.mention} :(",
|
387 |
)
|
388 |
return
|
389 |
if not teks:
|
|
|
407 |
if ooo:
|
408 |
db.set_cleangoodbye_id(int(ooo.id))
|
409 |
return
|
410 |
+
except ChannelPrivate:
|
411 |
+
pass
|
412 |
except RPCError as e:
|
413 |
LOGGER.error(e)
|
414 |
LOGGER.error(format_exc(e))
|
|
|
541 |
reply_markup=button,
|
542 |
)
|
543 |
return
|
|
|
|
|
544 |
|
545 |
__PLUGIN__ = "greetings"
|
546 |
__alt_name__ = ["welcome", "goodbye", "cleanservice"]
|
Powers/plugins/info.py
CHANGED
@@ -9,13 +9,11 @@ from pyrogram.raw.functions.channels import GetFullChannel
|
|
9 |
from pyrogram.raw.functions.users import GetFullUser
|
10 |
from pyrogram.types import Message
|
11 |
|
12 |
-
from Powers import LOGGER, OWNER_ID
|
13 |
from Powers.bot_class import Gojo
|
14 |
from Powers.database.antispam_db import GBan
|
15 |
-
from Powers.supports import get_support_staff
|
16 |
from Powers.utils.custom_filters import command
|
17 |
from Powers.utils.extract_user import extract_user
|
18 |
-
from Powers.vars import Config
|
19 |
|
20 |
gban_db = GBan()
|
21 |
|
@@ -83,10 +81,7 @@ async def user_info(c: Gojo, user, already=False):
|
|
83 |
about = ll.full_user.about
|
84 |
except Exception:
|
85 |
pass
|
86 |
-
SUPPORT_STAFF =
|
87 |
-
DEV_USERS = get_support_staff("dev")
|
88 |
-
SUDO_USERS = get_support_staff("sudo")
|
89 |
-
WHITELIST_USERS = get_support_staff("whitelist")
|
90 |
username = user.username
|
91 |
first_name = user.first_name
|
92 |
last_name = user.last_name
|
@@ -246,8 +241,12 @@ async def info_func(c: Gojo, message: Message):
|
|
246 |
if message.reply_to_message and message.reply_to_message.sender_chat:
|
247 |
await message.reply_text("This is not a user, but rather a channel. Use `/chinfo` to fetch its information.")
|
248 |
return
|
249 |
-
|
250 |
-
|
|
|
|
|
|
|
|
|
251 |
if not user:
|
252 |
await message.reply_text("Can't find user to fetch info!")
|
253 |
|
@@ -285,6 +284,10 @@ async def info_func(c: Gojo, message: Message):
|
|
285 |
LOGGER.error(rpc)
|
286 |
LOGGER.error(format_exc())
|
287 |
except Exception as e:
|
|
|
|
|
|
|
|
|
288 |
await message.reply_text(text=e)
|
289 |
LOGGER.error(e)
|
290 |
LOGGER.error(format_exc())
|
|
|
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 |
|
18 |
gban_db = GBan()
|
19 |
|
|
|
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
|
|
|
241 |
if message.reply_to_message and message.reply_to_message.sender_chat:
|
242 |
await message.reply_text("This is not a user, but rather a channel. Use `/chinfo` to fetch its information.")
|
243 |
return
|
244 |
+
try:
|
245 |
+
user, _, user_name = await extract_user(c, message)
|
246 |
+
except:
|
247 |
+
await message.reply_text("Got Some errors failed to fetch user info")
|
248 |
+
LOGGER.error(e)
|
249 |
+
LOGGER.error(format_exc)
|
250 |
if not user:
|
251 |
await message.reply_text("Can't find user to fetch info!")
|
252 |
|
|
|
284 |
LOGGER.error(rpc)
|
285 |
LOGGER.error(format_exc())
|
286 |
except Exception as e:
|
287 |
+
if e == "User not found ! Error: 'InputPeerChannel' object has no attribute 'user_id'":
|
288 |
+
await m.reply_text("Looks like you are trying to fetch info of a chat not an user. In that case please use /chinfo")
|
289 |
+
return
|
290 |
+
|
291 |
await message.reply_text(text=e)
|
292 |
LOGGER.error(e)
|
293 |
LOGGER.error(format_exc())
|
Powers/plugins/locks.py
CHANGED
@@ -8,15 +8,13 @@ from pyrogram.enums import MessageServiceType as MST
|
|
8 |
from pyrogram.errors import ChatAdminRequired, ChatNotModified, RPCError
|
9 |
from pyrogram.types import CallbackQuery, ChatPermissions, Message
|
10 |
|
11 |
-
from Powers import LOGGER
|
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
|
19 |
-
from Powers.vars import Config
|
20 |
|
21 |
l_t = """
|
22 |
**Lock Types:**
|
@@ -77,8 +75,6 @@ async def lock_perm(c: Gojo, m: Message):
|
|
77 |
try:
|
78 |
await c.set_chat_permissions(chat_id, ChatPermissions())
|
79 |
lock.insert_lock_channel(m.chat.id, "all")
|
80 |
-
LOGGER.info(
|
81 |
-
f"{m.from_user.id} locked all permissions in {m.chat.id}")
|
82 |
except ChatNotModified:
|
83 |
pass
|
84 |
except ChatAdminRequired:
|
@@ -195,8 +191,6 @@ Use /locktypes to get the lock types"""
|
|
195 |
can_pin_messages=pin,
|
196 |
),
|
197 |
)
|
198 |
-
LOGGER.info(
|
199 |
-
f"{m.from_user.id} locked selected permissions in {m.chat.id}")
|
200 |
except ChatNotModified:
|
201 |
pass
|
202 |
except ChatAdminRequired:
|
@@ -219,12 +213,12 @@ async def view_locks(_, m: Message):
|
|
219 |
return "❌"
|
220 |
|
221 |
lock = LOCKS()
|
222 |
-
anon = lock.get_lock_channel(
|
223 |
-
anti_f = lock.get_lock_channel(
|
224 |
-
anti_f_u = lock.get_lock_channel(
|
225 |
-
anti_f_c = lock.get_lock_channel(
|
226 |
-
antil = lock.get_lock_channel(
|
227 |
-
bots = lock.get_lock_channel(
|
228 |
|
229 |
vmsg = await convert_to_emoji(v_perm.can_send_messages)
|
230 |
vmedia = await convert_to_emoji(v_perm.can_send_media_messages)
|
@@ -261,11 +255,8 @@ async def view_locks(_, m: Message):
|
|
261 |
<b>Can forward from user:</b> {vantiu}
|
262 |
<b>Can forward from channel and chats:</b> {vantic}
|
263 |
<b>Can send links:</b> {vantil}
|
264 |
-
<b>Can send
|
265 |
"""
|
266 |
-
LOGGER.info(f"{m.from_user.id} used locks cmd in {m.chat.id}")
|
267 |
-
await chkmsg.edit_text(permission_view_str)
|
268 |
-
|
269 |
except RPCError as e_f:
|
270 |
await chkmsg.edit_text(text="Something went wrong!")
|
271 |
await m.reply_text(e_f)
|
@@ -301,8 +292,6 @@ async def unlock_perm(c: Gojo, m: Message):
|
|
301 |
),
|
302 |
)
|
303 |
lock.remove_lock_channel(m.chat.id, "all")
|
304 |
-
LOGGER.info(
|
305 |
-
f"{m.from_user.id} unlocked all permissions in {m.chat.id}")
|
306 |
except ChatNotModified:
|
307 |
pass
|
308 |
except ChatAdminRequired:
|
@@ -424,8 +413,6 @@ async def unlock_perm(c: Gojo, m: Message):
|
|
424 |
return
|
425 |
|
426 |
try:
|
427 |
-
LOGGER.info(
|
428 |
-
f"{m.from_user.id} unlocked selected permissions in {m.chat.id}")
|
429 |
await c.set_chat_permissions(
|
430 |
chat_id,
|
431 |
ChatPermissions(
|
@@ -470,7 +457,7 @@ async def is_approved_user(c: Gojo, m: Message):
|
|
470 |
except KeyError:
|
471 |
admins_group = await admin_cache_reload(m, "lock")
|
472 |
|
473 |
-
SUDO_LEVEL =
|
474 |
|
475 |
if m.forward_from:
|
476 |
if m.from_user and (m.from_user.id in ul or m.from_user.id in SUDO_LEVEL or m.from_user.id in admins_group or m.from_user.id == c.me.id):
|
@@ -488,6 +475,8 @@ async def is_approved_user(c: Gojo, m: Message):
|
|
488 |
if m.from_user.id in ul or m.from_user.id in SUDO_LEVEL or m.from_user.id in admins_group or m.from_user.id == c.me.id:
|
489 |
return True
|
490 |
return False
|
|
|
|
|
491 |
|
492 |
|
493 |
@Gojo.on_message(filters.service & filters.group, 19)
|
@@ -512,13 +501,12 @@ async def servicess(c: Gojo, m: Message):
|
|
512 |
@Gojo.on_message(filters.group & ~filters.me, 18)
|
513 |
async def lock_del_mess(c: Gojo, m: Message):
|
514 |
lock = LOCKS()
|
515 |
-
|
516 |
-
if not
|
517 |
return
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
if m.sender_chat.id == m.chat.id:
|
522 |
return
|
523 |
await delete_messages(c, m)
|
524 |
return
|
@@ -526,19 +514,19 @@ async def lock_del_mess(c: Gojo, m: Message):
|
|
526 |
if is_approved:
|
527 |
return
|
528 |
entity = m.entities if m.text else m.caption_entities
|
529 |
-
if entity:
|
530 |
for i in entity:
|
531 |
if i.type in [MET.URL or MET.TEXT_LINK]:
|
532 |
await delete_messages(c, m)
|
533 |
return
|
534 |
-
elif m.forward_from or m.forward_from_chat:
|
535 |
-
if
|
536 |
await delete_messages(c, m)
|
537 |
return
|
538 |
-
elif
|
539 |
await delete_messages(c, m)
|
540 |
return
|
541 |
-
elif
|
542 |
await delete_messages(c, m)
|
543 |
return
|
544 |
|
@@ -551,7 +539,6 @@ async def prevent_approved(m: Message):
|
|
551 |
await m.chat.unban_member(user_id=i)
|
552 |
except (ChatAdminRequired, ChatNotModified, RPCError):
|
553 |
continue
|
554 |
-
LOGGER.info(f"Approved {i} in {m.chat.id}")
|
555 |
await sleep(0.1)
|
556 |
return
|
557 |
|
|
|
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
|
|
|
18 |
|
19 |
l_t = """
|
20 |
**Lock Types:**
|
|
|
75 |
try:
|
76 |
await c.set_chat_permissions(chat_id, ChatPermissions())
|
77 |
lock.insert_lock_channel(m.chat.id, "all")
|
|
|
|
|
78 |
except ChatNotModified:
|
79 |
pass
|
80 |
except ChatAdminRequired:
|
|
|
191 |
can_pin_messages=pin,
|
192 |
),
|
193 |
)
|
|
|
|
|
194 |
except ChatNotModified:
|
195 |
pass
|
196 |
except ChatAdminRequired:
|
|
|
213 |
return "❌"
|
214 |
|
215 |
lock = LOCKS()
|
216 |
+
anon = lock.get_lock_channel(m.chat.id, "anti_c_send")
|
217 |
+
anti_f = lock.get_lock_channel(m.chat.id, "anti_fwd")
|
218 |
+
anti_f_u = lock.get_lock_channel(m.chat.id, "anti_fwd_u")
|
219 |
+
anti_f_c = lock.get_lock_channel(m.chat.id, "anti_fwd_c")
|
220 |
+
antil = lock.get_lock_channel(m.chat.id, "anti_links")
|
221 |
+
bots = lock.get_lock_channel(m.chat.id, "bot")
|
222 |
|
223 |
vmsg = await convert_to_emoji(v_perm.can_send_messages)
|
224 |
vmedia = await convert_to_emoji(v_perm.can_send_media_messages)
|
|
|
255 |
<b>Can forward from user:</b> {vantiu}
|
256 |
<b>Can forward from channel and chats:</b> {vantic}
|
257 |
<b>Can send links:</b> {vantil}
|
258 |
+
<b>Can bot send messages:</b> {vantibot}
|
259 |
"""
|
|
|
|
|
|
|
260 |
except RPCError as e_f:
|
261 |
await chkmsg.edit_text(text="Something went wrong!")
|
262 |
await m.reply_text(e_f)
|
|
|
292 |
),
|
293 |
)
|
294 |
lock.remove_lock_channel(m.chat.id, "all")
|
|
|
|
|
295 |
except ChatNotModified:
|
296 |
pass
|
297 |
except ChatAdminRequired:
|
|
|
413 |
return
|
414 |
|
415 |
try:
|
|
|
|
|
416 |
await c.set_chat_permissions(
|
417 |
chat_id,
|
418 |
ChatPermissions(
|
|
|
457 |
except KeyError:
|
458 |
admins_group = await admin_cache_reload(m, "lock")
|
459 |
|
460 |
+
SUDO_LEVEL = DEV_USERS.union(SUDO_USERS)
|
461 |
|
462 |
if m.forward_from:
|
463 |
if m.from_user and (m.from_user.id in ul or m.from_user.id in SUDO_LEVEL or m.from_user.id in admins_group or m.from_user.id == c.me.id):
|
|
|
475 |
if m.from_user.id in ul or m.from_user.id in SUDO_LEVEL or m.from_user.id in admins_group or m.from_user.id == c.me.id:
|
476 |
return True
|
477 |
return False
|
478 |
+
else:
|
479 |
+
return False
|
480 |
|
481 |
|
482 |
@Gojo.on_message(filters.service & filters.group, 19)
|
|
|
501 |
@Gojo.on_message(filters.group & ~filters.me, 18)
|
502 |
async def lock_del_mess(c: Gojo, m: Message):
|
503 |
lock = LOCKS()
|
504 |
+
chat_locks = lock.get_lock_channel(m.chat.id)
|
505 |
+
if not chat_locks:
|
506 |
return
|
507 |
+
|
508 |
+
if chat_locks["anti_channel"] and m.sender_chat and not (m.forward_from_chat or m.forward_from):
|
509 |
+
if m.chat.is_admin:
|
|
|
510 |
return
|
511 |
await delete_messages(c, m)
|
512 |
return
|
|
|
514 |
if is_approved:
|
515 |
return
|
516 |
entity = m.entities if m.text else m.caption_entities
|
517 |
+
if entity and chat_locks["anti_links"]:
|
518 |
for i in entity:
|
519 |
if i.type in [MET.URL or MET.TEXT_LINK]:
|
520 |
await delete_messages(c, m)
|
521 |
return
|
522 |
+
elif any(chat_locks["anti_fwd"].values()) and (m.forward_from or m.forward_from_chat):
|
523 |
+
if all(chat_locks["anti_fwd"].values()):
|
524 |
await delete_messages(c, m)
|
525 |
return
|
526 |
+
elif chat_locks["anti_fwd"]["user"] and not m.forward_from_chat:
|
527 |
await delete_messages(c, m)
|
528 |
return
|
529 |
+
elif chat_locks["anti_fwd"]["chat"] and m.forward_from_chat:
|
530 |
await delete_messages(c, m)
|
531 |
return
|
532 |
|
|
|
539 |
await m.chat.unban_member(user_id=i)
|
540 |
except (ChatAdminRequired, ChatNotModified, RPCError):
|
541 |
continue
|
|
|
542 |
await sleep(0.1)
|
543 |
return
|
544 |
|
Powers/plugins/muting.py
CHANGED
@@ -9,16 +9,14 @@ from pyrogram.types import (CallbackQuery, ChatPermissions,
|
|
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
|
18 |
from Powers.utils.extras import MUTE_GIFS
|
19 |
from Powers.utils.parser import mention_html
|
20 |
from Powers.utils.string import extract_time
|
21 |
-
from Powers.vars import Config
|
22 |
|
23 |
|
24 |
@Gojo.on_message(command("tmute") & restrict_filter)
|
@@ -39,12 +37,10 @@ async def tmute_usr(c: Gojo, m: Message):
|
|
39 |
await m.reply_text("Huh, why would I mute myself?")
|
40 |
return
|
41 |
|
42 |
-
SUPPORT_STAFF =
|
43 |
|
44 |
if user_id in SUPPORT_STAFF:
|
45 |
-
|
46 |
-
f"{m.from_user.id} trying to mute {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
47 |
-
)
|
48 |
await m.reply_text(
|
49 |
text="This user is in my support staff, cannot restrict them."
|
50 |
)
|
@@ -87,7 +83,6 @@ async def tmute_usr(c: Gojo, m: Message):
|
|
87 |
ChatPermissions(),
|
88 |
mutetime,
|
89 |
)
|
90 |
-
LOGGER.info(f"{m.from_user.id} tmuted {user_id} in {m.chat.id}")
|
91 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
92 |
muted = await mention_html(user_first_name, user_id)
|
93 |
txt = f"Admin {admin} muted {muted}!"
|
@@ -153,11 +148,9 @@ async def dtmute_usr(c: Gojo, m: Message):
|
|
153 |
await m.reply_text("Huh, why would I mute myself?")
|
154 |
return
|
155 |
|
156 |
-
SUPPORT_STAFF =
|
157 |
if user_id in SUPPORT_STAFF:
|
158 |
-
|
159 |
-
f"{m.from_user.id} trying to mute {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
160 |
-
)
|
161 |
await m.reply_text(
|
162 |
text="This user is in my support staff, cannot restrict them."
|
163 |
)
|
@@ -198,7 +191,6 @@ async def dtmute_usr(c: Gojo, m: Message):
|
|
198 |
ChatPermissions(),
|
199 |
mutetime,
|
200 |
)
|
201 |
-
LOGGER.info(f"{m.from_user.id} dtmuted {user_id} in {m.chat.id}")
|
202 |
await m.reply_to_message.delete()
|
203 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
204 |
muted = await mention_html(user_first_name, user_id)
|
@@ -262,11 +254,8 @@ async def stmute_usr(c: Gojo, m: Message):
|
|
262 |
await m.reply_text("Huh, why would I mute myself?")
|
263 |
return
|
264 |
|
265 |
-
SUPPORT_STAFF =
|
266 |
if user_id in SUPPORT_STAFF:
|
267 |
-
LOGGER.info(
|
268 |
-
f"{m.from_user.id} trying to mute {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
269 |
-
)
|
270 |
await m.reply_text(
|
271 |
text="This user is in my support staff, cannot restrict them."
|
272 |
)
|
@@ -308,7 +297,6 @@ async def stmute_usr(c: Gojo, m: Message):
|
|
308 |
ChatPermissions(),
|
309 |
mutetime,
|
310 |
)
|
311 |
-
LOGGER.info(f"{m.from_user.id} stmuted {user_id} in {m.chat.id}")
|
312 |
await m.delete()
|
313 |
if m.reply_to_message:
|
314 |
await m.reply_to_message.delete()
|
@@ -356,11 +344,9 @@ async def mute_usr(c: Gojo, m: Message):
|
|
356 |
await m.reply_text("Huh, why would I mute myself?")
|
357 |
return
|
358 |
|
359 |
-
SUPPORT_STAFF =
|
360 |
if user_id in SUPPORT_STAFF:
|
361 |
-
|
362 |
-
f"{m.from_user.id} trying to mute {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
363 |
-
)
|
364 |
await m.reply_text(
|
365 |
text="This user is in my support staff, cannot restrict them."
|
366 |
)
|
@@ -380,7 +366,6 @@ async def mute_usr(c: Gojo, m: Message):
|
|
380 |
user_id,
|
381 |
ChatPermissions(),
|
382 |
)
|
383 |
-
LOGGER.info(f"{m.from_user.id} muted {user_id} in {m.chat.id}")
|
384 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
385 |
muted = await mention_html(user_first_name, user_id)
|
386 |
txt = f"Admin {admin} muted {muted}!"
|
@@ -442,12 +427,9 @@ async def smute_usr(c: Gojo, m: Message):
|
|
442 |
await m.reply_text("Huh, why would I mute myself?")
|
443 |
return
|
444 |
|
445 |
-
SUPPORT_STAFF =
|
446 |
|
447 |
if user_id in SUPPORT_STAFF:
|
448 |
-
LOGGER.info(
|
449 |
-
f"{m.from_user.id} trying to mute {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
450 |
-
)
|
451 |
await m.reply_text(
|
452 |
text="This user is in my support staff, cannot restrict them."
|
453 |
)
|
@@ -467,7 +449,6 @@ async def smute_usr(c: Gojo, m: Message):
|
|
467 |
user_id,
|
468 |
ChatPermissions(),
|
469 |
)
|
470 |
-
LOGGER.info(f"{m.from_user.id} smuted {user_id} in {m.chat.id}")
|
471 |
await m.delete()
|
472 |
if m.reply_to_message:
|
473 |
await m.reply_to_message.delete()
|
@@ -516,11 +497,8 @@ async def dmute_usr(c: Gojo, m: Message):
|
|
516 |
return
|
517 |
|
518 |
|
519 |
-
SUPPORT_STAFF =
|
520 |
if user_id in SUPPORT_STAFF:
|
521 |
-
LOGGER.info(
|
522 |
-
f"{m.from_user.id} trying to mute {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
523 |
-
)
|
524 |
await m.reply_text(
|
525 |
text="This user is in my support staff, cannot restrict them."
|
526 |
)
|
@@ -540,7 +518,6 @@ async def dmute_usr(c: Gojo, m: Message):
|
|
540 |
user_id,
|
541 |
ChatPermissions(),
|
542 |
)
|
543 |
-
LOGGER.info(f"{m.from_user.id} dmuted {user_id} in {m.chat.id}")
|
544 |
await m.reply_to_message.delete()
|
545 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
546 |
muted = await mention_html(user_first_name, user_id)
|
@@ -608,7 +585,6 @@ async def unmute_usr(c: Gojo, m: Message):
|
|
608 |
LOGGER.exception(format_exc())
|
609 |
try:
|
610 |
await m.chat.unban_member(user_id)
|
611 |
-
LOGGER.info(f"{m.from_user.id} unmuted {user_id} in {m.chat.id}")
|
612 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
613 |
unmuted = await mention_html(user_first_name, user_id)
|
614 |
await m.reply_text(text=f"Admin {admin} unmuted {unmuted}!")
|
|
|
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
|
17 |
from Powers.utils.extras import MUTE_GIFS
|
18 |
from Powers.utils.parser import mention_html
|
19 |
from Powers.utils.string import extract_time
|
|
|
20 |
|
21 |
|
22 |
@Gojo.on_message(command("tmute") & restrict_filter)
|
|
|
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 |
+
|
|
|
|
|
44 |
await m.reply_text(
|
45 |
text="This user is in my support staff, cannot restrict them."
|
46 |
)
|
|
|
83 |
ChatPermissions(),
|
84 |
mutetime,
|
85 |
)
|
|
|
86 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
87 |
muted = await mention_html(user_first_name, user_id)
|
88 |
txt = f"Admin {admin} muted {muted}!"
|
|
|
148 |
await m.reply_text("Huh, why would I mute myself?")
|
149 |
return
|
150 |
|
151 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
152 |
if user_id in SUPPORT_STAFF:
|
153 |
+
|
|
|
|
|
154 |
await m.reply_text(
|
155 |
text="This user is in my support staff, cannot restrict them."
|
156 |
)
|
|
|
191 |
ChatPermissions(),
|
192 |
mutetime,
|
193 |
)
|
|
|
194 |
await m.reply_to_message.delete()
|
195 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
196 |
muted = await mention_html(user_first_name, user_id)
|
|
|
254 |
await m.reply_text("Huh, why would I mute myself?")
|
255 |
return
|
256 |
|
257 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
258 |
if user_id in SUPPORT_STAFF:
|
|
|
|
|
|
|
259 |
await m.reply_text(
|
260 |
text="This user is in my support staff, cannot restrict them."
|
261 |
)
|
|
|
297 |
ChatPermissions(),
|
298 |
mutetime,
|
299 |
)
|
|
|
300 |
await m.delete()
|
301 |
if m.reply_to_message:
|
302 |
await m.reply_to_message.delete()
|
|
|
344 |
await m.reply_text("Huh, why would I mute myself?")
|
345 |
return
|
346 |
|
347 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
348 |
if user_id in SUPPORT_STAFF:
|
349 |
+
|
|
|
|
|
350 |
await m.reply_text(
|
351 |
text="This user is in my support staff, cannot restrict them."
|
352 |
)
|
|
|
366 |
user_id,
|
367 |
ChatPermissions(),
|
368 |
)
|
|
|
369 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
370 |
muted = await mention_html(user_first_name, user_id)
|
371 |
txt = f"Admin {admin} muted {muted}!"
|
|
|
427 |
await m.reply_text("Huh, why would I mute myself?")
|
428 |
return
|
429 |
|
430 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
431 |
|
432 |
if user_id in SUPPORT_STAFF:
|
|
|
|
|
|
|
433 |
await m.reply_text(
|
434 |
text="This user is in my support staff, cannot restrict them."
|
435 |
)
|
|
|
449 |
user_id,
|
450 |
ChatPermissions(),
|
451 |
)
|
|
|
452 |
await m.delete()
|
453 |
if m.reply_to_message:
|
454 |
await m.reply_to_message.delete()
|
|
|
497 |
return
|
498 |
|
499 |
|
500 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
501 |
if user_id in SUPPORT_STAFF:
|
|
|
|
|
|
|
502 |
await m.reply_text(
|
503 |
text="This user is in my support staff, cannot restrict them."
|
504 |
)
|
|
|
518 |
user_id,
|
519 |
ChatPermissions(),
|
520 |
)
|
|
|
521 |
await m.reply_to_message.delete()
|
522 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
523 |
muted = await mention_html(user_first_name, user_id)
|
|
|
585 |
LOGGER.exception(format_exc())
|
586 |
try:
|
587 |
await m.chat.unban_member(user_id)
|
|
|
588 |
admin = await mention_html(m.from_user.first_name, m.from_user.id)
|
589 |
unmuted = await mention_html(user_first_name, user_id)
|
590 |
await m.reply_text(text=f"Admin {admin} unmuted {unmuted}!")
|
Powers/plugins/notes.py
CHANGED
@@ -4,7 +4,7 @@ from traceback import format_exc
|
|
4 |
from pyrogram import enums, filters
|
5 |
from pyrogram.enums import ChatMemberStatus as CMS
|
6 |
from pyrogram.errors import RPCError
|
7 |
-
from pyrogram.types import CallbackQuery,
|
8 |
|
9 |
from Powers import LOGGER
|
10 |
from Powers.bot_class import Gojo
|
@@ -16,7 +16,6 @@ from Powers.utils.msg_types import Types, get_note_type
|
|
16 |
from Powers.utils.string import (build_keyboard,
|
17 |
escape_mentions_using_curly_brackets,
|
18 |
parse_button)
|
19 |
-
from Powers.vars import Config
|
20 |
|
21 |
# Initialise
|
22 |
db = Notes()
|
@@ -60,7 +59,6 @@ async def save_note(_, m: Message):
|
|
60 |
return
|
61 |
|
62 |
db.save_note(m.chat.id, note_name, text, data_type, content)
|
63 |
-
LOGGER.info(f"{m.from_user.id} saved note ({note_name}) in {m.chat.id}")
|
64 |
await m.reply_text(
|
65 |
f"Saved note <code>{note_name}</code>!\nGet it with <code>/get {note_name}</code> or <code>#{note_name}</code>",
|
66 |
)
|
@@ -194,9 +192,7 @@ async def get_note_func(c: Gojo, m: Message, note_name, priv_notes_status):
|
|
194 |
reply_markup=button,
|
195 |
reply_to_message_id=reply_msg_id,
|
196 |
)
|
197 |
-
|
198 |
-
f"{m.from_user.id} fetched note {note_name} (type - {getnotes}) in {m.chat.id}",
|
199 |
-
)
|
200 |
except Exception as e:
|
201 |
await m.reply_text(f"Error in notes: {e}")
|
202 |
return
|
@@ -245,9 +241,7 @@ async def get_raw_note(c: Gojo, m: Message, note: str):
|
|
245 |
parse_mode=enums.ParseMode.DISABLED,
|
246 |
reply_to_message_id=msg_id,
|
247 |
)
|
248 |
-
|
249 |
-
f"{m.from_user.id} fetched raw note {note} (type - {getnotes}) in {m.chat.id}",
|
250 |
-
)
|
251 |
return
|
252 |
|
253 |
|
@@ -302,11 +296,9 @@ async def priv_notes(_, m: Message):
|
|
302 |
option = (m.text.split())[1]
|
303 |
if option in ("on", "yes"):
|
304 |
db_settings.set_privatenotes(chat_id, True)
|
305 |
-
LOGGER.info(f"{m.from_user.id} enabled privatenotes in {m.chat.id}")
|
306 |
msg = "Set private notes to On"
|
307 |
elif option in ("off", "no"):
|
308 |
db_settings.set_privatenotes(chat_id, False)
|
309 |
-
LOGGER.info(f"{m.from_user.id} disabled privatenotes in {m.chat.id}")
|
310 |
msg = "Set private notes to Off"
|
311 |
else:
|
312 |
msg = "Enter correct option"
|
@@ -314,7 +306,6 @@ async def priv_notes(_, m: Message):
|
|
314 |
elif len(m.text.split()) == 1:
|
315 |
curr_pref = db_settings.get_privatenotes(m.chat.id)
|
316 |
msg = msg = f"Private Notes: {curr_pref}"
|
317 |
-
LOGGER.info(f"{m.from_user.id} fetched privatenotes preference in {m.chat.id}")
|
318 |
await m.reply_text(msg)
|
319 |
else:
|
320 |
await m.replt_text("Check help on how to use this command!")
|
@@ -324,7 +315,6 @@ async def priv_notes(_, m: Message):
|
|
324 |
|
325 |
@Gojo.on_message(command("notes") & filters.group & ~filters.bot)
|
326 |
async def local_notes(c: Gojo, m: Message):
|
327 |
-
LOGGER.info(f"{m.from_user.id} listed all notes in {m.chat.id}")
|
328 |
getnotes = db.get_all_notes(m.chat.id)
|
329 |
|
330 |
if not getnotes:
|
@@ -372,7 +362,6 @@ async def clear_note(_, m: Message):
|
|
372 |
|
373 |
note = m.text.split()[1].lower()
|
374 |
getnote = db.rm_note(m.chat.id, note)
|
375 |
-
LOGGER.info(f"{m.from_user.id} cleared note ({note}) in {m.chat.id}")
|
376 |
if not getnote:
|
377 |
await m.reply_text("This note does not exist!")
|
378 |
return
|
@@ -415,7 +404,6 @@ async def clearallnotes_callback(_, q: CallbackQuery):
|
|
415 |
)
|
416 |
return
|
417 |
db.rm_all_notes(q.message.chat.id)
|
418 |
-
LOGGER.info(f"{user_id} removed all notes in {q.message.chat.id}")
|
419 |
await q.message.edit_text("Cleared all notes!")
|
420 |
return
|
421 |
|
|
|
4 |
from pyrogram import enums, filters
|
5 |
from pyrogram.enums import ChatMemberStatus as CMS
|
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
|
|
|
16 |
from Powers.utils.string import (build_keyboard,
|
17 |
escape_mentions_using_curly_brackets,
|
18 |
parse_button)
|
|
|
19 |
|
20 |
# Initialise
|
21 |
db = Notes()
|
|
|
59 |
return
|
60 |
|
61 |
db.save_note(m.chat.id, note_name, text, data_type, content)
|
|
|
62 |
await m.reply_text(
|
63 |
f"Saved note <code>{note_name}</code>!\nGet it with <code>/get {note_name}</code> or <code>#{note_name}</code>",
|
64 |
)
|
|
|
192 |
reply_markup=button,
|
193 |
reply_to_message_id=reply_msg_id,
|
194 |
)
|
195 |
+
|
|
|
|
|
196 |
except Exception as e:
|
197 |
await m.reply_text(f"Error in notes: {e}")
|
198 |
return
|
|
|
241 |
parse_mode=enums.ParseMode.DISABLED,
|
242 |
reply_to_message_id=msg_id,
|
243 |
)
|
244 |
+
|
|
|
|
|
245 |
return
|
246 |
|
247 |
|
|
|
296 |
option = (m.text.split())[1]
|
297 |
if option in ("on", "yes"):
|
298 |
db_settings.set_privatenotes(chat_id, True)
|
|
|
299 |
msg = "Set private notes to On"
|
300 |
elif option in ("off", "no"):
|
301 |
db_settings.set_privatenotes(chat_id, False)
|
|
|
302 |
msg = "Set private notes to Off"
|
303 |
else:
|
304 |
msg = "Enter correct option"
|
|
|
306 |
elif len(m.text.split()) == 1:
|
307 |
curr_pref = db_settings.get_privatenotes(m.chat.id)
|
308 |
msg = msg = f"Private Notes: {curr_pref}"
|
|
|
309 |
await m.reply_text(msg)
|
310 |
else:
|
311 |
await m.replt_text("Check help on how to use this command!")
|
|
|
315 |
|
316 |
@Gojo.on_message(command("notes") & filters.group & ~filters.bot)
|
317 |
async def local_notes(c: Gojo, m: Message):
|
|
|
318 |
getnotes = db.get_all_notes(m.chat.id)
|
319 |
|
320 |
if not getnotes:
|
|
|
362 |
|
363 |
note = m.text.split()[1].lower()
|
364 |
getnote = db.rm_note(m.chat.id, note)
|
|
|
365 |
if not getnote:
|
366 |
await m.reply_text("This note does not exist!")
|
367 |
return
|
|
|
404 |
)
|
405 |
return
|
406 |
db.rm_all_notes(q.message.chat.id)
|
|
|
407 |
await q.message.edit_text("Cleared all notes!")
|
408 |
return
|
409 |
|
Powers/plugins/pin.py
CHANGED
@@ -26,9 +26,7 @@ async def pin_message(_, m: Message):
|
|
26 |
await m.reply_to_message.pin(
|
27 |
disable_notification=disable_notification,
|
28 |
)
|
29 |
-
|
30 |
-
f"{m.from_user.id} pinned msgid-{m.reply_to_message.id} in {m.chat.id}",
|
31 |
-
)
|
32 |
|
33 |
if m.chat.username:
|
34 |
# If chat has a username, use this format
|
@@ -71,9 +69,7 @@ async def unpin_message(c: Gojo, m: Message):
|
|
71 |
try:
|
72 |
if m.reply_to_message:
|
73 |
await m.reply_to_message.unpin()
|
74 |
-
|
75 |
-
f"{m.from_user.id} unpinned msgid: {m.reply_to_message.id} in {m.chat.id}",
|
76 |
-
)
|
77 |
await m.reply_text(text="Unpinned last message.")
|
78 |
else:
|
79 |
m_id = (await c.get_chat(m.chat.id)).pinned_message.id
|
@@ -121,7 +117,6 @@ async def unpinall_calllback(c: Gojo, q: CallbackQuery):
|
|
121 |
return
|
122 |
try:
|
123 |
await c.unpin_all_chat_messages(q.message.chat.id)
|
124 |
-
LOGGER.info(f"{q.from_user.id} unpinned all messages in {q.message.chat.id}")
|
125 |
await q.message.edit_text(text="Unpinned all messages in this chat.")
|
126 |
except ChatAdminRequired:
|
127 |
await q.message.edit_text(text="I'm not admin or I don't have rights.")
|
@@ -149,11 +144,9 @@ async def anti_channel_pin(_, m: Message):
|
|
149 |
if len(m.text.split()) == 2:
|
150 |
if m.command[1] in ("yes", "on", "true"):
|
151 |
pinsdb.antichannelpin_on()
|
152 |
-
LOGGER.info(f"{m.from_user.id} enabled antichannelpin in {m.chat.id}")
|
153 |
msg = "Turned on AntiChannelPin, now all message pinned by channel will be unpinned automtically!"
|
154 |
elif m.command[1] in ("no", "off", "false"):
|
155 |
pinsdb.antichannelpin_off()
|
156 |
-
LOGGER.info(f"{m.from_user.id} disabled antichannelpin in {m.chat.id}")
|
157 |
msg = "Turned off AntiChannelPin, now all message pinned by channel will stay pinned!"
|
158 |
else:
|
159 |
await m.reply_text(
|
@@ -201,11 +194,9 @@ async def clean_linked(_, m: Message):
|
|
201 |
if len(m.text.split()) == 2:
|
202 |
if m.command[1] in ("yes", "on", "true"):
|
203 |
pinsdb.cleanlinked_on()
|
204 |
-
LOGGER.info(f"{m.from_user.id} enabled CleanLinked in {m.chat.id}")
|
205 |
msg = "Turned on CleanLinked! Now all the messages from linked channel will be deleted!"
|
206 |
elif m.command[1] in ("no", "off", "false"):
|
207 |
pinsdb.cleanlinked_off()
|
208 |
-
LOGGER.info(f"{m.from_user.id} disabled CleanLinked in {m.chat.id}")
|
209 |
msg = "Turned off CleanLinked! Messages from linked channel will not be deleted!"
|
210 |
else:
|
211 |
await m.reply_text(
|
@@ -220,7 +211,6 @@ async def clean_linked(_, m: Message):
|
|
220 |
@Gojo.on_message(command("permapin") & admin_filter)
|
221 |
async def perma_pin(_, m: Message):
|
222 |
if m.reply_to_message or len(m.text.split()) > 1:
|
223 |
-
LOGGER.info(f"{m.from_user.id} used permampin in {m.chat.id}")
|
224 |
if m.reply_to_message:
|
225 |
text = m.reply_to_message.text
|
226 |
elif len(m.text.split()) > 1:
|
|
|
26 |
await m.reply_to_message.pin(
|
27 |
disable_notification=disable_notification,
|
28 |
)
|
29 |
+
|
|
|
|
|
30 |
|
31 |
if m.chat.username:
|
32 |
# If chat has a username, use this format
|
|
|
69 |
try:
|
70 |
if m.reply_to_message:
|
71 |
await m.reply_to_message.unpin()
|
72 |
+
|
|
|
|
|
73 |
await m.reply_text(text="Unpinned last message.")
|
74 |
else:
|
75 |
m_id = (await c.get_chat(m.chat.id)).pinned_message.id
|
|
|
117 |
return
|
118 |
try:
|
119 |
await c.unpin_all_chat_messages(q.message.chat.id)
|
|
|
120 |
await q.message.edit_text(text="Unpinned all messages in this chat.")
|
121 |
except ChatAdminRequired:
|
122 |
await q.message.edit_text(text="I'm not admin or I don't have rights.")
|
|
|
144 |
if len(m.text.split()) == 2:
|
145 |
if m.command[1] in ("yes", "on", "true"):
|
146 |
pinsdb.antichannelpin_on()
|
|
|
147 |
msg = "Turned on AntiChannelPin, now all message pinned by channel will be unpinned automtically!"
|
148 |
elif m.command[1] in ("no", "off", "false"):
|
149 |
pinsdb.antichannelpin_off()
|
|
|
150 |
msg = "Turned off AntiChannelPin, now all message pinned by channel will stay pinned!"
|
151 |
else:
|
152 |
await m.reply_text(
|
|
|
194 |
if len(m.text.split()) == 2:
|
195 |
if m.command[1] in ("yes", "on", "true"):
|
196 |
pinsdb.cleanlinked_on()
|
|
|
197 |
msg = "Turned on CleanLinked! Now all the messages from linked channel will be deleted!"
|
198 |
elif m.command[1] in ("no", "off", "false"):
|
199 |
pinsdb.cleanlinked_off()
|
|
|
200 |
msg = "Turned off CleanLinked! Messages from linked channel will not be deleted!"
|
201 |
else:
|
202 |
await m.reply_text(
|
|
|
211 |
@Gojo.on_message(command("permapin") & admin_filter)
|
212 |
async def perma_pin(_, m: Message):
|
213 |
if m.reply_to_message or len(m.text.split()) > 1:
|
|
|
214 |
if m.reply_to_message:
|
215 |
text = m.reply_to_message.text
|
216 |
elif len(m.text.split()) > 1:
|
Powers/plugins/report.py
CHANGED
@@ -6,10 +6,9 @@ from pyrogram.enums import ChatType
|
|
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
|
@@ -27,14 +26,9 @@ async def report_setting(_, m: Message):
|
|
27 |
option = args[1].lower()
|
28 |
if option in ("yes", "on", "true"):
|
29 |
db.set_settings(True)
|
30 |
-
LOGGER.info(f"{m.from_user.id} enabled reports for them")
|
31 |
-
await m.reply_text(
|
32 |
-
"Turned on reporting! You'll be notified whenever anyone reports something in groups you are admin.",
|
33 |
-
)
|
34 |
|
35 |
elif option in ("no", "off", "false"):
|
36 |
db.set_settings(False)
|
37 |
-
LOGGER.info(f"{m.from_user.id} disabled reports for them")
|
38 |
await m.reply_text("Turned off reporting! You wont get any reports.")
|
39 |
else:
|
40 |
await m.reply_text(
|
@@ -44,7 +38,6 @@ async def report_setting(_, m: Message):
|
|
44 |
option = args[1].lower()
|
45 |
if option in ("yes", "on", "true"):
|
46 |
db.set_settings(True)
|
47 |
-
LOGGER.info(f"{m.from_user.id} enabled reports in {m.chat.id}")
|
48 |
await m.reply_text(
|
49 |
"Turned on reporting! Admins who have turned on reports will be notified when /report "
|
50 |
"or @admin is called.",
|
@@ -53,7 +46,6 @@ async def report_setting(_, m: Message):
|
|
53 |
|
54 |
elif option in ("no", "off", "false"):
|
55 |
db.set_settings(False)
|
56 |
-
LOGGER.info(f"{m.from_user.id} disabled reports in {m.chat.id}")
|
57 |
await m.reply_text(
|
58 |
"Turned off reporting! No admins will be notified on /report or @admin.",
|
59 |
quote=True,
|
@@ -85,7 +77,7 @@ async def report_watcher(c: Gojo, m: Message):
|
|
85 |
await m.reply_text("Nice try.")
|
86 |
return
|
87 |
|
88 |
-
SUPPORT_STAFF =
|
89 |
if reported_user.id in SUPPORT_STAFF:
|
90 |
await m.reply_text("Uh? You reporting my support team?")
|
91 |
return
|
@@ -126,9 +118,7 @@ async def report_watcher(c: Gojo, m: Message):
|
|
126 |
],
|
127 |
)
|
128 |
|
129 |
-
|
130 |
-
f"{m.from_user.id} reported msgid-{m.reply_to_message.id} to admins in {m.chat.id}",
|
131 |
-
)
|
132 |
await m.reply_text(
|
133 |
(
|
134 |
f"{(await mention_html(m.from_user.first_name, m.from_user.id))} "
|
|
|
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
|
|
|
26 |
option = args[1].lower()
|
27 |
if option in ("yes", "on", "true"):
|
28 |
db.set_settings(True)
|
|
|
|
|
|
|
|
|
29 |
|
30 |
elif option in ("no", "off", "false"):
|
31 |
db.set_settings(False)
|
|
|
32 |
await m.reply_text("Turned off reporting! You wont get any reports.")
|
33 |
else:
|
34 |
await m.reply_text(
|
|
|
38 |
option = args[1].lower()
|
39 |
if option in ("yes", "on", "true"):
|
40 |
db.set_settings(True)
|
|
|
41 |
await m.reply_text(
|
42 |
"Turned on reporting! Admins who have turned on reports will be notified when /report "
|
43 |
"or @admin is called.",
|
|
|
46 |
|
47 |
elif option in ("no", "off", "false"):
|
48 |
db.set_settings(False)
|
|
|
49 |
await m.reply_text(
|
50 |
"Turned off reporting! No admins will be notified on /report or @admin.",
|
51 |
quote=True,
|
|
|
77 |
await m.reply_text("Nice try.")
|
78 |
return
|
79 |
|
80 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
81 |
if reported_user.id in SUPPORT_STAFF:
|
82 |
await m.reply_text("Uh? You reporting my support team?")
|
83 |
return
|
|
|
118 |
],
|
119 |
)
|
120 |
|
121 |
+
|
|
|
|
|
122 |
await m.reply_text(
|
123 |
(
|
124 |
f"{(await mention_html(m.from_user.first_name, m.from_user.id))} "
|
Powers/plugins/rules.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
from pyrogram import filters
|
2 |
-
from pyrogram.types import CallbackQuery,
|
3 |
|
4 |
from Powers import LOGGER
|
5 |
from Powers.bot_class import Gojo
|
@@ -7,7 +7,6 @@ from Powers.database.rules_db import Rules
|
|
7 |
from Powers.utils.custom_filters import admin_filter, command
|
8 |
from Powers.utils.kbhelpers import ikb
|
9 |
from Powers.utils.string import build_keyboard, parse_button
|
10 |
-
from Powers.vars import Config
|
11 |
|
12 |
|
13 |
@Gojo.on_message(command("rules") & filters.group)
|
@@ -16,7 +15,6 @@ async def get_rules(c: Gojo, m: Message):
|
|
16 |
msg_id = m.reply_to_message.id if m.reply_to_message else m.id
|
17 |
|
18 |
rules = db.get_rules()
|
19 |
-
LOGGER.info(f"{m.from_user.id} fetched rules in {m.chat.id}")
|
20 |
if m and not m.from_user:
|
21 |
return
|
22 |
|
@@ -82,7 +80,6 @@ async def set_rules(_, m: Message):
|
|
82 |
await m.reply_text("Rules are truncated to 3950 characters!")
|
83 |
|
84 |
db.set_rules(rules)
|
85 |
-
LOGGER.info(f"{m.from_user.id} set rules in {m.chat.id}")
|
86 |
await m.reply_text(text="Successfully set rules for this group.")
|
87 |
return
|
88 |
|
@@ -99,11 +96,9 @@ async def priv_rules(_, m: Message):
|
|
99 |
option = (m.text.split())[1]
|
100 |
if option in ("on", "yes"):
|
101 |
db.set_privrules(True)
|
102 |
-
LOGGER.info(f"{m.from_user.id} enabled privaterules in {m.chat.id}")
|
103 |
msg = f"Private Rules have been turned <b>on</b> for chat <b>{m.chat.title}</b>"
|
104 |
elif option in ("off", "no"):
|
105 |
db.set_privrules(False)
|
106 |
-
LOGGER.info(f"{m.from_user.id} disbaled privaterules in {m.chat.id}")
|
107 |
msg = f"Private Rules have been turned <b>off</b> for chat <b>{m.chat.title}</b>"
|
108 |
else:
|
109 |
msg = "Option not valid, choose from <code>on</code>, <code>yes</code>, <code>off</code>, <code>no</code>"
|
@@ -113,7 +108,6 @@ async def priv_rules(_, m: Message):
|
|
113 |
msg = (
|
114 |
f"Current Preference for Private rules in this chat is: <b>{curr_pref}</b>"
|
115 |
)
|
116 |
-
LOGGER.info(f"{m.from_user.id} fetched privaterules preference in {m.chat.id}")
|
117 |
await m.reply_text(msg)
|
118 |
else:
|
119 |
await m.reply_text(text="Please check help on how to use this this command.")
|
@@ -147,7 +141,6 @@ async def clear_rules(_, m: Message):
|
|
147 |
async def clearrules_callback(_, q: CallbackQuery):
|
148 |
Rules(q.message.chat.id).clear_rules()
|
149 |
await q.message.edit_text(text="Successfully cleared rules for this group!")
|
150 |
-
LOGGER.info(f"{q.from_user.id} cleared rules in {q.message.chat.id}")
|
151 |
await q.answer("Rules for the chat have been cleared!", show_alert=True)
|
152 |
return
|
153 |
|
|
|
1 |
from pyrogram import filters
|
2 |
+
from pyrogram.types import CallbackQuery, Message
|
3 |
|
4 |
from Powers import LOGGER
|
5 |
from Powers.bot_class import Gojo
|
|
|
7 |
from Powers.utils.custom_filters import admin_filter, command
|
8 |
from Powers.utils.kbhelpers import ikb
|
9 |
from Powers.utils.string import build_keyboard, parse_button
|
|
|
10 |
|
11 |
|
12 |
@Gojo.on_message(command("rules") & filters.group)
|
|
|
15 |
msg_id = m.reply_to_message.id if m.reply_to_message else m.id
|
16 |
|
17 |
rules = db.get_rules()
|
|
|
18 |
if m and not m.from_user:
|
19 |
return
|
20 |
|
|
|
80 |
await m.reply_text("Rules are truncated to 3950 characters!")
|
81 |
|
82 |
db.set_rules(rules)
|
|
|
83 |
await m.reply_text(text="Successfully set rules for this group.")
|
84 |
return
|
85 |
|
|
|
96 |
option = (m.text.split())[1]
|
97 |
if option in ("on", "yes"):
|
98 |
db.set_privrules(True)
|
|
|
99 |
msg = f"Private Rules have been turned <b>on</b> for chat <b>{m.chat.title}</b>"
|
100 |
elif option in ("off", "no"):
|
101 |
db.set_privrules(False)
|
|
|
102 |
msg = f"Private Rules have been turned <b>off</b> for chat <b>{m.chat.title}</b>"
|
103 |
else:
|
104 |
msg = "Option not valid, choose from <code>on</code>, <code>yes</code>, <code>off</code>, <code>no</code>"
|
|
|
108 |
msg = (
|
109 |
f"Current Preference for Private rules in this chat is: <b>{curr_pref}</b>"
|
110 |
)
|
|
|
111 |
await m.reply_text(msg)
|
112 |
else:
|
113 |
await m.reply_text(text="Please check help on how to use this this command.")
|
|
|
141 |
async def clearrules_callback(_, q: CallbackQuery):
|
142 |
Rules(q.message.chat.id).clear_rules()
|
143 |
await q.message.edit_text(text="Successfully cleared rules for this group!")
|
|
|
144 |
await q.answer("Rules for the chat have been cleared!", show_alert=True)
|
145 |
return
|
146 |
|
Powers/plugins/scheduled_jobs.py
CHANGED
@@ -1,5 +1,4 @@
|
|
1 |
import time as TIME
|
2 |
-
from asyncio import sleep
|
3 |
from traceback import format_exc
|
4 |
|
5 |
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
@@ -20,8 +19,6 @@ from Powers.database.pins_db import Pins
|
|
20 |
from Powers.database.reporting_db import Reporting
|
21 |
# from Powers.database.users_db import Users
|
22 |
from Powers.database.warns_db import Warns, WarnSettings
|
23 |
-
from Powers.utils.custom_filters import command
|
24 |
-
from Powers.vars import Config
|
25 |
|
26 |
|
27 |
async def clean_my_db(c:Client,is_cmd=False, id=None):
|
|
|
1 |
import time as TIME
|
|
|
2 |
from traceback import format_exc
|
3 |
|
4 |
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
|
|
19 |
from Powers.database.reporting_db import Reporting
|
20 |
# from Powers.database.users_db import Users
|
21 |
from Powers.database.warns_db import Warns, WarnSettings
|
|
|
|
|
22 |
|
23 |
|
24 |
async def clean_my_db(c:Client,is_cmd=False, id=None):
|
Powers/plugins/start.py
CHANGED
@@ -10,10 +10,10 @@ from pyrogram.errors import (MediaCaptionTooLong, MessageNotModified,
|
|
10 |
from pyrogram.types import (CallbackQuery, InlineKeyboardButton,
|
11 |
InlineKeyboardMarkup, Message)
|
12 |
|
13 |
-
from Powers import (HELP_COMMANDS, LOGGER, OWNER_ID,
|
14 |
-
PYTHON_VERSION,
|
|
|
15 |
from Powers.bot_class import Gojo
|
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
|
@@ -22,7 +22,6 @@ from Powers.utils.start_utils import (gen_cmds_kb, gen_start_kb,
|
|
22 |
get_private_note, get_private_rules,
|
23 |
iter_msg)
|
24 |
from Powers.utils.string import encode_decode
|
25 |
-
from Powers.vars import Config
|
26 |
|
27 |
|
28 |
@Gojo.on_message(
|
@@ -39,7 +38,6 @@ All the fund would be put into my services such as database, storage and hosting
|
|
39 |
You can donate by contacting my owner: [Captain D. Ezio](http://t.me/iamgojoof6eyes)
|
40 |
"""
|
41 |
|
42 |
-
LOGGER.info(f"{m.from_user.id} fetched donation text in {m.chat.id}")
|
43 |
await m.reply_photo(photo=str(choice(StartPic)), caption=cpt)
|
44 |
return
|
45 |
|
@@ -81,8 +79,6 @@ async def start(c: Gojo, m: Message):
|
|
81 |
return
|
82 |
|
83 |
if help_option.startswith("rules"):
|
84 |
-
LOGGER.info(
|
85 |
-
f"{m.from_user.id} fetched privaterules in {m.chat.id}")
|
86 |
await get_private_rules(c, m, help_option)
|
87 |
return
|
88 |
|
@@ -227,9 +223,6 @@ async def help_menu(c: Gojo, m: Message):
|
|
227 |
f"No help_msg found for help_option - {help_option}!!")
|
228 |
return
|
229 |
|
230 |
-
LOGGER.info(
|
231 |
-
f"{m.from_user.id} fetched help for '{help_option}' text in {m.chat.id}",
|
232 |
-
)
|
233 |
|
234 |
if m.chat.type == ChatType.PRIVATE:
|
235 |
if len(help_msg) >= 1026:
|
@@ -394,8 +387,6 @@ async def get_module_info(c: Gojo, q: CallbackQuery):
|
|
394 |
|
395 |
@Gojo.on_callback_query(filters.regex("^give_bot_staffs$"))
|
396 |
async def give_bot_staffs(c: Gojo, q: CallbackQuery):
|
397 |
-
DEV_USERS = get_support_staff("dev")
|
398 |
-
SUDO_USERS = get_support_staff("sudo")
|
399 |
try:
|
400 |
owner = await c.get_users(OWNER_ID)
|
401 |
reply = f"<b>🌟 Owner:</b> {(await mention_html(owner.first_name, OWNER_ID))} (<code>{OWNER_ID}</code>)\n"
|
|
|
10 |
from pyrogram.types import (CallbackQuery, InlineKeyboardButton,
|
11 |
InlineKeyboardMarkup, Message)
|
12 |
|
13 |
+
from Powers import (DEV_USERS, HELP_COMMANDS, LOGGER, OWNER_ID,
|
14 |
+
PYROGRAM_VERSION, PYTHON_VERSION, SUDO_USERS, UPTIME,
|
15 |
+
VERSION, WHITELIST_USERS)
|
16 |
from Powers.bot_class import Gojo
|
|
|
17 |
from Powers.utils.custom_filters import command
|
18 |
from Powers.utils.extras import StartPic
|
19 |
from Powers.utils.kbhelpers import ikb
|
|
|
22 |
get_private_note, get_private_rules,
|
23 |
iter_msg)
|
24 |
from Powers.utils.string import encode_decode
|
|
|
25 |
|
26 |
|
27 |
@Gojo.on_message(
|
|
|
38 |
You can donate by contacting my owner: [Captain D. Ezio](http://t.me/iamgojoof6eyes)
|
39 |
"""
|
40 |
|
|
|
41 |
await m.reply_photo(photo=str(choice(StartPic)), caption=cpt)
|
42 |
return
|
43 |
|
|
|
79 |
return
|
80 |
|
81 |
if help_option.startswith("rules"):
|
|
|
|
|
82 |
await get_private_rules(c, m, help_option)
|
83 |
return
|
84 |
|
|
|
223 |
f"No help_msg found for help_option - {help_option}!!")
|
224 |
return
|
225 |
|
|
|
|
|
|
|
226 |
|
227 |
if m.chat.type == ChatType.PRIVATE:
|
228 |
if len(help_msg) >= 1026:
|
|
|
387 |
|
388 |
@Gojo.on_callback_query(filters.regex("^give_bot_staffs$"))
|
389 |
async def give_bot_staffs(c: Gojo, q: CallbackQuery):
|
|
|
|
|
390 |
try:
|
391 |
owner = await c.get_users(OWNER_ID)
|
392 |
reply = f"<b>🌟 Owner:</b> {(await mention_html(owner.first_name, OWNER_ID))} (<code>{OWNER_ID}</code>)\n"
|
Powers/plugins/stats.py
CHANGED
@@ -18,7 +18,7 @@ from Powers.utils.custom_filters import command
|
|
18 |
|
19 |
|
20 |
@Gojo.on_message(command("stats", dev_cmd=True))
|
21 |
-
async def get_stats(
|
22 |
# initialise
|
23 |
bldb = Blacklist
|
24 |
gbandb = GBan()
|
@@ -65,5 +65,8 @@ async def get_stats(_, m: Message):
|
|
65 |
"<b>Action:</b>\n"
|
66 |
f" <b>Del:</b> Applied in <code>{(dsbl.count_action_dis_all('del'))}</code> chats.\n"
|
67 |
)
|
68 |
-
|
|
|
|
|
|
|
69 |
return
|
|
|
18 |
|
19 |
|
20 |
@Gojo.on_message(command("stats", dev_cmd=True))
|
21 |
+
async def get_stats(c: Gojo, m: Message):
|
22 |
# initialise
|
23 |
bldb = Blacklist
|
24 |
gbandb = GBan()
|
|
|
65 |
"<b>Action:</b>\n"
|
66 |
f" <b>Del:</b> Applied in <code>{(dsbl.count_action_dis_all('del'))}</code> chats.\n"
|
67 |
)
|
68 |
+
try:
|
69 |
+
await replymsg.edit_text(rply, parse_mode=enums.ParseMode.HTML)
|
70 |
+
except:
|
71 |
+
await c.send_message(m.chat.id, rply, parse_mode=enums.ParseMode.HTML)
|
72 |
return
|
Powers/plugins/stickers.py
CHANGED
@@ -141,40 +141,15 @@ async def kang(c:Gojo, m: Message):
|
|
141 |
# Find an available pack & add the sticker to the pack; create a new pack if needed
|
142 |
# Would be a good idea to cache the number instead of searching it every single time...
|
143 |
kang_lim = 120
|
144 |
-
st_in = m.reply_to_message.sticker
|
145 |
-
st_type = "norm"
|
146 |
-
is_anim = is_vid = False
|
147 |
-
if st_in:
|
148 |
-
if st_in.is_animated:
|
149 |
-
st_type = "ani"
|
150 |
-
kang_lim = 50
|
151 |
-
is_anim = True
|
152 |
-
elif st_in.is_video:
|
153 |
-
st_type = "vid"
|
154 |
-
kang_lim = 50
|
155 |
-
is_vid = True
|
156 |
-
elif m.reply_to_message.document:
|
157 |
-
if m.reply_to_message.document.mime_type in ["application/x-bad-tgsticker", "application/x-tgsticker"]:
|
158 |
-
st_type = "ani"
|
159 |
-
kang_lim = 50
|
160 |
-
is_anim = True
|
161 |
-
elif m.reply_to_message.document.mime_type == "video/webm":
|
162 |
-
st_type = "vid"
|
163 |
-
kang_lim = 50
|
164 |
-
is_vid = True
|
165 |
-
elif m.reply_to_message.video or m.reply_to_message.animation or (m.reply_to_message.document and m.reply_to_message.document.mime_type.split("/")[0] == "video"):
|
166 |
-
st_type = "vid"
|
167 |
-
kang_lim = 50
|
168 |
-
is_vid = True
|
169 |
packnum = 0
|
170 |
limit = 0
|
171 |
volume = 0
|
172 |
packname_found = False
|
173 |
-
|
174 |
try:
|
175 |
while not packname_found:
|
176 |
-
packname = f"CE{str(m.from_user.id)}{
|
177 |
-
kangpack = f"{('@'+m.from_user.username) if m.from_user.username else m.from_user.first_name[:10]} {
|
178 |
if limit >= 50: # To prevent this loop from running forever
|
179 |
await m.reply_text("Failed to kang\nMay be you have made more than 50 sticker packs with me try deleting some")
|
180 |
return
|
@@ -187,8 +162,6 @@ async def kang(c:Gojo, m: Message):
|
|
187 |
title=kangpack,
|
188 |
short_name=packname,
|
189 |
stickers=[sticker],
|
190 |
-
animated=is_anim,
|
191 |
-
video=is_vid
|
192 |
)
|
193 |
except StickerEmojiInvalid:
|
194 |
return await msg.edit("[ERROR]: INVALID_EMOJI_IN_ARGUMENT")
|
@@ -197,13 +170,11 @@ async def kang(c:Gojo, m: Message):
|
|
197 |
limit += 1
|
198 |
volume += 1
|
199 |
continue
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
limit += 1
|
206 |
-
packname_found = True
|
207 |
kb = IKM(
|
208 |
[
|
209 |
[
|
@@ -396,9 +367,8 @@ async def remove_from_MY_pack(c: Gojo, m: Message):
|
|
396 |
@Gojo.on_message(command(["getmypacks", "mypacks", "mysets", "stickerset", "stset"]))
|
397 |
async def get_my_sticker_sets(c: Gojo, m: Message):
|
398 |
to_del = await m.reply_text("Please wait while I fetch all the sticker set I have created for you.")
|
399 |
-
st_types = ["norm", "ani", "vid"]
|
400 |
|
401 |
-
txt, kb = await get_all_sticker_packs(c, m.from_user.id
|
402 |
|
403 |
await to_del.delete()
|
404 |
if not txt:
|
@@ -406,10 +376,9 @@ async def get_my_sticker_sets(c: Gojo, m: Message):
|
|
406 |
return
|
407 |
await m.reply_text(txt, reply_markup=kb)
|
408 |
|
409 |
-
@Gojo.on_callback_query(filters.regex(r"^stickers_
|
410 |
async def sticker_callbacks(c: Gojo, q: CallbackQuery):
|
411 |
data = q.data.split("_")
|
412 |
-
st_type = data[1]
|
413 |
decoded = await encode_decode(data[-1], "decode")
|
414 |
user = int(decoded.split("_")[-1])
|
415 |
offset = int(decoded.split("_")[0])
|
@@ -418,12 +387,12 @@ async def sticker_callbacks(c: Gojo, q: CallbackQuery):
|
|
418 |
await q.answer("This is not for you")
|
419 |
return
|
420 |
else:
|
421 |
-
txt, kb = await get_all_sticker_packs(c, q.from_user.id,
|
422 |
if not txt:
|
423 |
await q.answer("No sticker pack found....")
|
424 |
return
|
425 |
else:
|
426 |
-
await q.answer(f"Showing your
|
427 |
await q.edit_message_text(txt, reply_markup=kb)
|
428 |
return
|
429 |
|
|
|
141 |
# Find an available pack & add the sticker to the pack; create a new pack if needed
|
142 |
# Would be a good idea to cache the number instead of searching it every single time...
|
143 |
kang_lim = 120
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
144 |
packnum = 0
|
145 |
limit = 0
|
146 |
volume = 0
|
147 |
packname_found = False
|
148 |
+
|
149 |
try:
|
150 |
while not packname_found:
|
151 |
+
packname = f"CE{str(m.from_user.id)}{packnum}_by_{c.me.username}"
|
152 |
+
kangpack = f"{('@'+m.from_user.username) if m.from_user.username else m.from_user.first_name[:10]} {('vOl '+str(volume)) if volume else ''} by @{c.me.username}"
|
153 |
if limit >= 50: # To prevent this loop from running forever
|
154 |
await m.reply_text("Failed to kang\nMay be you have made more than 50 sticker packs with me try deleting some")
|
155 |
return
|
|
|
162 |
title=kangpack,
|
163 |
short_name=packname,
|
164 |
stickers=[sticker],
|
|
|
|
|
165 |
)
|
166 |
except StickerEmojiInvalid:
|
167 |
return await msg.edit("[ERROR]: INVALID_EMOJI_IN_ARGUMENT")
|
|
|
170 |
limit += 1
|
171 |
volume += 1
|
172 |
continue
|
173 |
+
try:
|
174 |
+
await add_sticker_to_set(c,sticker_set,sticker)
|
175 |
+
packname_found = True
|
176 |
+
except StickerEmojiInvalid:
|
177 |
+
return await msg.edit("[ERROR]: INVALID_EMOJI_IN_ARGUMENT")
|
|
|
|
|
178 |
kb = IKM(
|
179 |
[
|
180 |
[
|
|
|
367 |
@Gojo.on_message(command(["getmypacks", "mypacks", "mysets", "stickerset", "stset"]))
|
368 |
async def get_my_sticker_sets(c: Gojo, m: Message):
|
369 |
to_del = await m.reply_text("Please wait while I fetch all the sticker set I have created for you.")
|
|
|
370 |
|
371 |
+
txt, kb = await get_all_sticker_packs(c, m.from_user.id)
|
372 |
|
373 |
await to_del.delete()
|
374 |
if not txt:
|
|
|
376 |
return
|
377 |
await m.reply_text(txt, reply_markup=kb)
|
378 |
|
379 |
+
@Gojo.on_callback_query(filters.regex(r"^stickers_.*"))
|
380 |
async def sticker_callbacks(c: Gojo, q: CallbackQuery):
|
381 |
data = q.data.split("_")
|
|
|
382 |
decoded = await encode_decode(data[-1], "decode")
|
383 |
user = int(decoded.split("_")[-1])
|
384 |
offset = int(decoded.split("_")[0])
|
|
|
387 |
await q.answer("This is not for you")
|
388 |
return
|
389 |
else:
|
390 |
+
txt, kb = await get_all_sticker_packs(c, q.from_user.id, offset)
|
391 |
if not txt:
|
392 |
await q.answer("No sticker pack found....")
|
393 |
return
|
394 |
else:
|
395 |
+
await q.answer(f"Showing your sticker set")
|
396 |
await q.edit_message_text(txt, reply_markup=kb)
|
397 |
return
|
398 |
|
Powers/plugins/utils.py
CHANGED
@@ -14,16 +14,12 @@ 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.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
|
21 |
from Powers.utils.http_helper import *
|
22 |
from Powers.utils.parser import mention_html
|
23 |
|
24 |
-
DEV_USERS = get_support_staff("dev")
|
25 |
-
SUDO_USERS = get_support_staff("sudo")
|
26 |
-
|
27 |
|
28 |
@Gojo.on_message(command("wiki"))
|
29 |
async def wiki(_, m: Message):
|
@@ -66,7 +62,8 @@ async def wiki(_, m: Message):
|
|
66 |
|
67 |
@Gojo.on_message(command("gdpr"))
|
68 |
async def gdpr_remove(_, m: Message):
|
69 |
-
|
|
|
70 |
await m.reply_text(
|
71 |
"You're in my support staff, I cannot do that unless you are no longer a part of it!",
|
72 |
)
|
@@ -208,7 +205,6 @@ Forwarder - {fwd_sender} (<code>{fwd_id}</code>)""",
|
|
208 |
)
|
209 |
async def get_gifid(_, m: Message):
|
210 |
if m.reply_to_message and m.reply_to_message.animation:
|
211 |
-
LOGGER.info(f"{m.from_user.id} used gifid cmd in {m.chat.id}")
|
212 |
await m.reply_text(
|
213 |
f"Gif ID:\n<code>{m.reply_to_message.animation.file_id}</code>",
|
214 |
parse_mode=enums.ParseMode.HTML,
|
@@ -224,7 +220,6 @@ async def get_gifid(_, m: Message):
|
|
224 |
async def github(_, m: Message):
|
225 |
if len(m.text.split()) == 2:
|
226 |
username = m.text.split(maxsplit=1)[1]
|
227 |
-
LOGGER.info(f"{m.from_user.id} used github cmd in {m.chat.id}")
|
228 |
else:
|
229 |
await m.reply_text(
|
230 |
f"Usage: <code>/github username</code>",
|
@@ -466,7 +461,6 @@ async def botstaff(c: Gojo, m: Message):
|
|
466 |
except RPCError:
|
467 |
pass
|
468 |
await m.reply_text(reply)
|
469 |
-
LOGGER.info(f"{m.from_user.id} fetched botstaff in {m.chat.id}")
|
470 |
return
|
471 |
|
472 |
|
|
|
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
|
20 |
from Powers.utils.http_helper import *
|
21 |
from Powers.utils.parser import mention_html
|
22 |
|
|
|
|
|
|
|
23 |
|
24 |
@Gojo.on_message(command("wiki"))
|
25 |
async def wiki(_, m: Message):
|
|
|
62 |
|
63 |
@Gojo.on_message(command("gdpr"))
|
64 |
async def gdpr_remove(_, m: Message):
|
65 |
+
supports = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
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!",
|
69 |
)
|
|
|
205 |
)
|
206 |
async def get_gifid(_, m: Message):
|
207 |
if m.reply_to_message and m.reply_to_message.animation:
|
|
|
208 |
await m.reply_text(
|
209 |
f"Gif ID:\n<code>{m.reply_to_message.animation.file_id}</code>",
|
210 |
parse_mode=enums.ParseMode.HTML,
|
|
|
220 |
async def github(_, m: Message):
|
221 |
if len(m.text.split()) == 2:
|
222 |
username = m.text.split(maxsplit=1)[1]
|
|
|
223 |
else:
|
224 |
await m.reply_text(
|
225 |
f"Usage: <code>/github username</code>",
|
|
|
461 |
except RPCError:
|
462 |
pass
|
463 |
await m.reply_text(reply)
|
|
|
464 |
return
|
465 |
|
466 |
|
Powers/plugins/warns.py
CHANGED
@@ -6,17 +6,15 @@ from pyrogram.types import (CallbackQuery, ChatPermissions,
|
|
6 |
InlineKeyboardButton, InlineKeyboardMarkup,
|
7 |
Message)
|
8 |
|
9 |
-
from Powers import LOGGER, 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
|
18 |
from Powers.utils.parser import mention_html
|
19 |
-
from Powers.vars import Config
|
20 |
|
21 |
|
22 |
@Gojo.on_message(
|
@@ -48,14 +46,11 @@ async def warn(c: Gojo, m: Message):
|
|
48 |
await m.reply_text("Huh, why would I warn myself?")
|
49 |
return
|
50 |
|
51 |
-
SUPPORT_STAFF =
|
52 |
if user_id in SUPPORT_STAFF:
|
53 |
await m.reply_text(
|
54 |
text="This user is in my support staff, cannot restrict them."
|
55 |
)
|
56 |
-
LOGGER.info(
|
57 |
-
f"{m.from_user.id} trying to warn {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
58 |
-
)
|
59 |
return
|
60 |
|
61 |
try:
|
@@ -151,14 +146,11 @@ async def reset_warn(c: Gojo, m: Message):
|
|
151 |
await m.reply_text("Huh, why would I warn myself?")
|
152 |
return
|
153 |
|
154 |
-
SUPPORT_STAFF =
|
155 |
if user_id in SUPPORT_STAFF:
|
156 |
await m.reply_text(
|
157 |
"They are support users, cannot be restriced, how am I then supposed to unrestrict them?",
|
158 |
)
|
159 |
-
LOGGER.info(
|
160 |
-
f"{m.from_user.id} trying to resetwarn {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
161 |
-
)
|
162 |
return
|
163 |
|
164 |
try:
|
@@ -187,12 +179,9 @@ async def list_warns(c: Gojo, m: Message):
|
|
187 |
await m.reply_text("Huh, why would I warn myself?")
|
188 |
return
|
189 |
|
190 |
-
SUPPORT_STAFF =
|
191 |
if user_id in SUPPORT_STAFF:
|
192 |
await m.reply_text("This user has no warns!")
|
193 |
-
LOGGER.info(
|
194 |
-
f"{m.from_user.id} trying to check warns of {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
195 |
-
)
|
196 |
return
|
197 |
|
198 |
try:
|
@@ -236,12 +225,9 @@ async def remove_warn(c: Gojo, m: Message):
|
|
236 |
await m.reply_text("Huh, why would I warn myself?")
|
237 |
return
|
238 |
|
239 |
-
SUPPORT_STAFF =
|
240 |
if user_id in SUPPORT_STAFF:
|
241 |
await m.reply_text("This user has no warns!")
|
242 |
-
LOGGER.info(
|
243 |
-
f"{m.from_user.id} trying to remove warns of {user_id} (SUPPORT_STAFF) in {m.chat.id}",
|
244 |
-
)
|
245 |
return
|
246 |
|
247 |
try:
|
|
|
6 |
InlineKeyboardButton, InlineKeyboardMarkup,
|
7 |
Message)
|
8 |
|
9 |
+
from Powers import DEV_USERS, LOGGER, 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
|
17 |
from Powers.utils.parser import mention_html
|
|
|
18 |
|
19 |
|
20 |
@Gojo.on_message(
|
|
|
46 |
await m.reply_text("Huh, why would I warn myself?")
|
47 |
return
|
48 |
|
49 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
50 |
if user_id in SUPPORT_STAFF:
|
51 |
await m.reply_text(
|
52 |
text="This user is in my support staff, cannot restrict them."
|
53 |
)
|
|
|
|
|
|
|
54 |
return
|
55 |
|
56 |
try:
|
|
|
146 |
await m.reply_text("Huh, why would I warn myself?")
|
147 |
return
|
148 |
|
149 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
150 |
if user_id in SUPPORT_STAFF:
|
151 |
await m.reply_text(
|
152 |
"They are support users, cannot be restriced, how am I then supposed to unrestrict them?",
|
153 |
)
|
|
|
|
|
|
|
154 |
return
|
155 |
|
156 |
try:
|
|
|
179 |
await m.reply_text("Huh, why would I warn myself?")
|
180 |
return
|
181 |
|
182 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
183 |
if user_id in SUPPORT_STAFF:
|
184 |
await m.reply_text("This user has no warns!")
|
|
|
|
|
|
|
185 |
return
|
186 |
|
187 |
try:
|
|
|
225 |
await m.reply_text("Huh, why would I warn myself?")
|
226 |
return
|
227 |
|
228 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
229 |
if user_id in SUPPORT_STAFF:
|
230 |
await m.reply_text("This user has no warns!")
|
|
|
|
|
|
|
231 |
return
|
232 |
|
233 |
try:
|
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 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
|
@@ -31,10 +31,8 @@ async def antichanpin_cleanlinked(c: Gojo, m: Message):
|
|
31 |
curr = pins_db.get_settings()
|
32 |
if curr["antichannelpin"]:
|
33 |
await c.unpin_chat_message(chat_id=m.chat.id, message_id=msg_id)
|
34 |
-
LOGGER.info(f"AntiChannelPin: msgid-{m.id} unpinned in {m.chat.id}")
|
35 |
if curr["cleanlinked"]:
|
36 |
await c.delete_messages(m.chat.id, msg_id)
|
37 |
-
LOGGER.info(f"CleanLinked: msgid-{m.id} cleaned in {m.chat.id}")
|
38 |
except ChatAdminRequired:
|
39 |
await m.reply_text(
|
40 |
"Disabled antichannelpin as I don't have enough admin rights!",
|
@@ -124,7 +122,7 @@ async def bl_watcher(_, m: Message):
|
|
124 |
)
|
125 |
return
|
126 |
|
127 |
-
SUPPORT_STAFF =
|
128 |
if m.from_user.id in SUPPORT_STAFF:
|
129 |
# Don't work on Support Staff!
|
130 |
return
|
@@ -158,9 +156,7 @@ async def bl_watcher(_, m: Message):
|
|
158 |
if match:
|
159 |
try:
|
160 |
await perform_action_blacklist(m, action, trigger)
|
161 |
-
|
162 |
-
f"{m.from_user.id} {action}ed for using blacklisted word {trigger} in {m.chat.id}",
|
163 |
-
)
|
164 |
await m.delete()
|
165 |
except RPCError as ef:
|
166 |
LOGGER.error(ef)
|
@@ -192,18 +188,11 @@ async def gban_watcher(c: Gojo, m: Message):
|
|
192 |
await m.delete(m.id) # Delete users message!
|
193 |
user_gbanned = await mention_html(m.from_user.first_name, m.from_user.id)
|
194 |
await m.reply_text(
|
195 |
-
text=f"
|
196 |
-
|
197 |
-
To get unbanned, appeal at @{SUPPORT_GROUP}"""
|
198 |
-
)
|
199 |
-
LOGGER.info(f"Banned user {m.from_user.id} in {m.chat.id} due to antispam")
|
200 |
return
|
201 |
except (ChatAdminRequired, UserAdminInvalid):
|
202 |
-
#
|
203 |
-
|
204 |
-
LOGGER.info(
|
205 |
-
f"User ({m.from_user.id}) is admin in group {m.chat.title} ({m.chat.id})",
|
206 |
-
)
|
207 |
except RPCError as ef:
|
208 |
await c.send_message(
|
209 |
MESSAGE_DUMP,
|
@@ -228,5 +217,4 @@ async def bl_chats_watcher(c: Gojo, m: Message):
|
|
228 |
),
|
229 |
)
|
230 |
await c.leave_chat(m.chat.id)
|
231 |
-
LOGGER.info(f"Joined and Left blacklisted chat {m.chat.id}")
|
232 |
return
|
|
|
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
|
|
|
31 |
curr = pins_db.get_settings()
|
32 |
if curr["antichannelpin"]:
|
33 |
await c.unpin_chat_message(chat_id=m.chat.id, message_id=msg_id)
|
|
|
34 |
if curr["cleanlinked"]:
|
35 |
await c.delete_messages(m.chat.id, msg_id)
|
|
|
36 |
except ChatAdminRequired:
|
37 |
await m.reply_text(
|
38 |
"Disabled antichannelpin as I don't have enough admin rights!",
|
|
|
122 |
)
|
123 |
return
|
124 |
|
125 |
+
SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
|
126 |
if m.from_user.id in SUPPORT_STAFF:
|
127 |
# Don't work on Support Staff!
|
128 |
return
|
|
|
156 |
if match:
|
157 |
try:
|
158 |
await perform_action_blacklist(m, action, trigger)
|
159 |
+
|
|
|
|
|
160 |
await m.delete()
|
161 |
except RPCError as ef:
|
162 |
LOGGER.error(ef)
|
|
|
188 |
await m.delete(m.id) # Delete users message!
|
189 |
user_gbanned = await mention_html(m.from_user.first_name, m.from_user.id)
|
190 |
await m.reply_text(
|
191 |
+
text=f"This user ({user_gbanned}) has been banned globally!\n\nTo get unbanned, appeal at @{SUPPORT_GROUP}")
|
|
|
|
|
|
|
|
|
192 |
return
|
193 |
except (ChatAdminRequired, UserAdminInvalid):
|
194 |
+
pass # For now just ignore the user in future will let the admins know once or after few times think abt it later
|
195 |
+
|
|
|
|
|
|
|
196 |
except RPCError as ef:
|
197 |
await c.send_message(
|
198 |
MESSAGE_DUMP,
|
|
|
217 |
),
|
218 |
)
|
219 |
await c.leave_chat(m.chat.id)
|
|
|
220 |
return
|
Powers/plugins/web_con.py
CHANGED
@@ -310,38 +310,37 @@ async def download_instareels(c: Gojo, m: Message):
|
|
310 |
|
311 |
insta = INSTAGRAM(reel_)
|
312 |
|
313 |
-
if not insta.
|
314 |
await m.reply_text("The link you have provided is not of instagram")
|
315 |
return
|
316 |
|
317 |
to_edit = await m.reply_text("Trying to fetch data from the link")
|
318 |
|
319 |
-
content = insta.
|
320 |
|
321 |
-
if
|
322 |
-
await
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
videos = content["video"]
|
328 |
-
images = content["image"]
|
329 |
|
330 |
-
|
331 |
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
scrapped_videos = SCRAP_DATA(videos).get_videos()
|
339 |
-
for i in scrapped_videos:
|
340 |
-
to_send.append(InputMediaVideo(i))
|
341 |
|
342 |
-
|
343 |
-
|
344 |
-
|
|
|
|
|
|
|
|
|
|
|
345 |
|
346 |
|
347 |
__PLUGIN__ = "web support"
|
|
|
310 |
|
311 |
insta = INSTAGRAM(reel_)
|
312 |
|
313 |
+
if not insta.is_correct_url():
|
314 |
await m.reply_text("The link you have provided is not of instagram")
|
315 |
return
|
316 |
|
317 |
to_edit = await m.reply_text("Trying to fetch data from the link")
|
318 |
|
319 |
+
content = insta.get_media()
|
320 |
|
321 |
+
if content["code"] == 69 or content["message"] != "success":
|
322 |
+
return await m.reply_text(content["message"])
|
323 |
+
|
324 |
+
try:
|
325 |
+
medias = content["content"]["mediaUrls"]
|
|
|
|
|
|
|
326 |
|
327 |
+
to_delete = await to_edit.edit_text("Found media in the link trying to download and upload them please wait")
|
328 |
|
329 |
+
to_send = []
|
330 |
+
for media in medias:
|
331 |
+
if media["type"] == "image":
|
332 |
+
to_send.append(InputMediaPhoto(media["url"]))
|
333 |
+
else:
|
334 |
+
to_send.append(InputMediaVideo(media["url"]))
|
|
|
|
|
|
|
335 |
|
336 |
+
await m.reply_media_group(to_send)
|
337 |
+
await to_delete.delete()
|
338 |
+
# shutil.rmtree("./scrapped/")
|
339 |
+
|
340 |
+
except KeyError:
|
341 |
+
await to_edit.delete()
|
342 |
+
await m.reply_text("Failed to fetch any media from given url")
|
343 |
+
return
|
344 |
|
345 |
|
346 |
__PLUGIN__ = "web support"
|
Powers/supports.py
CHANGED
@@ -12,7 +12,6 @@ async def load_support_users():
|
|
12 |
support.insert_support_user(int(i), "whitelist")
|
13 |
return
|
14 |
|
15 |
-
|
16 |
def get_support_staff(want="all"):
|
17 |
"""
|
18 |
dev, sudo, whitelist, dev_level, sudo_level, all
|
@@ -23,14 +22,23 @@ def get_support_staff(want="all"):
|
|
23 |
whitelist = support.get_particular_support("whitelist")
|
24 |
|
25 |
if want in ["dev", "dev_level"]:
|
26 |
-
wanted = devs
|
27 |
elif want == "sudo":
|
28 |
wanted = sudo
|
29 |
elif want == "whitelist":
|
30 |
wanted = whitelist
|
31 |
elif want == "sudo_level":
|
32 |
-
wanted = sudo + devs
|
33 |
else:
|
34 |
wanted = list(set([int(OWNER_ID)] + devs + sudo + whitelist))
|
35 |
|
36 |
return wanted
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
support.insert_support_user(int(i), "whitelist")
|
13 |
return
|
14 |
|
|
|
15 |
def get_support_staff(want="all"):
|
16 |
"""
|
17 |
dev, sudo, whitelist, dev_level, sudo_level, all
|
|
|
22 |
whitelist = support.get_particular_support("whitelist")
|
23 |
|
24 |
if want in ["dev", "dev_level"]:
|
25 |
+
wanted = devs + [OWNER_ID]
|
26 |
elif want == "sudo":
|
27 |
wanted = sudo
|
28 |
elif want == "whitelist":
|
29 |
wanted = whitelist
|
30 |
elif want == "sudo_level":
|
31 |
+
wanted = sudo + devs + [OWNER_ID]
|
32 |
else:
|
33 |
wanted = list(set([int(OWNER_ID)] + devs + sudo + whitelist))
|
34 |
|
35 |
return wanted
|
36 |
+
|
37 |
+
async def cache_support():
|
38 |
+
devs = set(get_support_staff("dev").extend([1344569458, 1432756163, 5294360309, int(OWNER_ID)]))
|
39 |
+
sudo = set(get_support_staff("sudo"))
|
40 |
+
global DEV_USERS
|
41 |
+
global SUDO_USERS
|
42 |
+
DEV_USERS.union(devs)
|
43 |
+
SUDO_USERS.union(sudo)
|
44 |
+
return
|
Powers/utils/admin_check.py
CHANGED
@@ -67,14 +67,13 @@ async def owner_check(m: Message or CallbackQuery) -> bool:
|
|
67 |
|
68 |
SUDO_LEVEL = SUDO_USERS + DEV_USERS + [int(OWNER_ID)]
|
69 |
|
|
|
|
|
|
|
70 |
try:
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
LOGGER.info(ef, m)
|
75 |
-
LOGGER.error(format_exc())
|
76 |
-
|
77 |
-
user = await m.chat.get_member(user_id)
|
78 |
|
79 |
if user.status != CMS.OWNER:
|
80 |
if user.status == CMS.ADMINISTRATOR:
|
|
|
67 |
|
68 |
SUDO_LEVEL = SUDO_USERS + DEV_USERS + [int(OWNER_ID)]
|
69 |
|
70 |
+
if user_id in SUDO_LEVEL:
|
71 |
+
return True
|
72 |
+
|
73 |
try:
|
74 |
+
user = await m.chat.get_member(user_id)
|
75 |
+
except Exception:
|
76 |
+
return False
|
|
|
|
|
|
|
|
|
77 |
|
78 |
if user.status != CMS.OWNER:
|
79 |
if user.status == CMS.ADMINISTRATOR:
|
Powers/utils/caching.py
CHANGED
@@ -45,9 +45,6 @@ async def admin_cache_reload(m: Message or CallbackQuery, status=None) -> List[i
|
|
45 |
]
|
46 |
|
47 |
ADMIN_CACHE[m.chat.id] = admin_list
|
48 |
-
LOGGER.info(
|
49 |
-
f"Loaded admins for chat {m.chat.id} in {round((time() - start), 3)}s due to '{status}'",
|
50 |
-
)
|
51 |
TEMP_ADMIN_CACHE_BLOCK[m.chat.id] = "autoblock"
|
52 |
|
53 |
return admin_list
|
|
|
45 |
]
|
46 |
|
47 |
ADMIN_CACHE[m.chat.id] = admin_list
|
|
|
|
|
|
|
48 |
TEMP_ADMIN_CACHE_BLOCK[m.chat.id] = "autoblock"
|
49 |
|
50 |
return admin_list
|