Captain Ezio commited on
Commit
982e098
·
1 Parent(s): b48df3a

Test completed

Browse files
Powers/database/captcha_db.py CHANGED
@@ -101,11 +101,18 @@ class CAPTCHA_DATA(MongoDB):
101
  return
102
  else:
103
  return
 
 
 
 
 
 
 
104
 
105
  def is_already_data(self, chat, user):
106
  curr = self.find_one({"chat_id": chat, "user_id": user})
107
  if curr:
108
- return curr["message_id"]
109
  else:
110
  return False
111
 
@@ -114,4 +121,5 @@ class CAPTCHA_DATA(MongoDB):
114
  if curr:
115
  with INSERTION_LOCK:
116
  self.delete_one({"chat_id": chat, "user_id": user})
117
- return
 
 
101
  return
102
  else:
103
  return
104
+
105
+ def get_message_id(self, chat, user):
106
+ curr = self.find_one({"chat_id": chat, "user_id": user})
107
+ if curr:
108
+ return curr["message_id"]
109
+ else:
110
+ return False
111
 
112
  def is_already_data(self, chat, user):
113
  curr = self.find_one({"chat_id": chat, "user_id": user})
114
  if curr:
115
+ return curr.get("message_id", False)
116
  else:
117
  return False
118
 
 
121
  if curr:
122
  with INSERTION_LOCK:
123
  self.delete_one({"chat_id": chat, "user_id": user})
124
+
125
+ return curr["message_id"]
Powers/plugins/auto_join.py CHANGED
@@ -48,7 +48,7 @@ async def accept_join_requests(c: Gojo, m: Message):
48
  is_al = a_j.load_autojoin(m.chat.id)
49
 
50
  if is_al:
51
- txt = "Now I will approve all the join request of the chat\nIf you want that I will just notify admins about the join request use command\n//joinreqmode [manual | auto]"
52
  await m.reply_text(txt)
53
  return
54
  else:
@@ -102,13 +102,16 @@ async def join_request_handler(c: Gojo, j: ChatJoinRequest):
102
  if join_type == "auto" or user in SUPPORT_STAFF:
103
  try:
104
  await c.approve_chat_join_request(chat,user)
 
 
105
  except Exception as ef:
106
  await c.send_message(chat,f"Some error occured while approving request, report it using `/bug`\n<b>Error:</b> <code>{ef}</code>")
107
  LOGGER.error(ef)
108
  LOGGER.error(format_exc())
 
109
  elif join_type == "manual":
110
  txt = "New join request is available\n**USER's INFO**\n"
111
- txt += f"Name: {userr.first_name} {userr.last_name if userr.last_name else ''}"
112
  txt += f"Mention: {userr.mention}"
113
  txt += f"Id: {user}"
114
  txt += f"Scam: {'True' if userr.is_scam else 'False'}"
@@ -127,23 +130,30 @@ async def join_request_handler(c: Gojo, j: ChatJoinRequest):
127
  async def accept_decline_request(c:Gojo, q: CallbackQuery):
128
  user_id = q.from_user.id
129
  chat = q.message.chat.id
130
- user_status = (await q.message.chat.get_member(user_id)).status
131
- if user_status not in {CMS.OWNER, CMS.ADMINISTRATOR}:
132
- await q.answer(
133
- "You're not even an admin, don't try this explosive shit!",
134
- show_alert=True,
135
- )
 
 
 
 
136
  return
137
-
138
  split = q.data.split("_")
139
  chat = q.message.chat.id
140
  user = int(split[-1])
141
  data = split[0]
142
-
 
 
 
143
  if data == "accept":
144
  try:
145
  await c.approve_chat_join_request(chat,user)
146
- await q.answer(f"APPROVED: {user}",True)
 
147
  except Exception as ef:
148
  await c.send_message(chat,f"Some error occured while approving request, report it using `/bug`\n<b>Error:</b> <code>{ef}</code>")
149
  LOGGER.error(ef)
@@ -153,6 +163,7 @@ async def accept_decline_request(c:Gojo, q: CallbackQuery):
153
  try:
154
  await c.decline_chat_join_request(chat,user)
155
  await q.answer(f"DECLINED: {user}")
 
156
  except Exception as ef:
157
  await c.send_message(chat,f"Some error occured while approving request, report it using `/bug`\n<b>Error:</b> <code>{ef}</code>")
158
  LOGGER.error(ef)
 
48
  is_al = a_j.load_autojoin(m.chat.id)
49
 
50
  if is_al:
51
+ txt = "Now I will approve all the join request of the chat\nIf you want that I will just notify admins about the join request use command\n/joinreqmode [manual | auto]"
52
  await m.reply_text(txt)
53
  return
54
  else:
 
102
  if join_type == "auto" or user in SUPPORT_STAFF:
103
  try:
104
  await c.approve_chat_join_request(chat,user)
105
+ await c.send_message(chat, f"Accepted join request of the {userr.mention}")
106
+ return
107
  except Exception as ef:
108
  await c.send_message(chat,f"Some error occured while approving request, report it using `/bug`\n<b>Error:</b> <code>{ef}</code>")
109
  LOGGER.error(ef)
110
  LOGGER.error(format_exc())
111
+ return
112
  elif join_type == "manual":
113
  txt = "New join request is available\n**USER's INFO**\n"
114
+ txt += f"Name: {userr.full_name}"
115
  txt += f"Mention: {userr.mention}"
116
  txt += f"Id: {user}"
117
  txt += f"Scam: {'True' if userr.is_scam else 'False'}"
 
130
  async def accept_decline_request(c:Gojo, q: CallbackQuery):
131
  user_id = q.from_user.id
132
  chat = q.message.chat.id
133
+ try:
134
+ user_status = (await q.message.chat.get_member(user_id)).status
135
+ if user_status not in {CMS.OWNER, CMS.ADMINISTRATOR}:
136
+ await q.answer(
137
+ "You're not even an admin, don't try this explosive shit!",
138
+ show_alert=True,
139
+ )
140
+ return
141
+ except:
142
+ await q.answer("Unknow error occured. You are not admin or owner")
143
  return
 
144
  split = q.data.split("_")
145
  chat = q.message.chat.id
146
  user = int(split[-1])
147
  data = split[0]
148
+ try:
149
+ userr = await c.get_users(user)
150
+ except:
151
+ userr = None
152
  if data == "accept":
153
  try:
154
  await c.approve_chat_join_request(chat,user)
155
+ await q.answer(f"Accepted join request of the {userr.mention if userr else user}",True)
156
+ await q.edit_message_text(f"Accepted join request of the {userr.mention if userr else user}")
157
  except Exception as ef:
158
  await c.send_message(chat,f"Some error occured while approving request, report it using `/bug`\n<b>Error:</b> <code>{ef}</code>")
159
  LOGGER.error(ef)
 
163
  try:
164
  await c.decline_chat_join_request(chat,user)
165
  await q.answer(f"DECLINED: {user}")
166
+ await q.edit_message_text()
167
  except Exception as ef:
168
  await c.send_message(chat,f"Some error occured while approving request, report it using `/bug`\n<b>Error:</b> <code>{ef}</code>")
169
  LOGGER.error(ef)
Powers/plugins/captcha.py CHANGED
@@ -1,23 +1,28 @@
1
- from random import shuffle
 
2
  from traceback import format_exc
 
3
 
4
  import pyrogram
5
  from pyrogram import filters
6
- from pyrogram.types import CallbackQuery, ChatMemberUpdated, ChatPermissions
 
 
7
  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 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
 
17
 
18
 
19
  @Gojo.on_message(command("captcha") & admin_filter & ~filters.private)
20
- async def start_captcha(c: Gojo, m: Message):
21
  captcha = CAPTCHA()
22
  split = m.command
23
  if len(split) == 1:
@@ -59,8 +64,9 @@ async def set_captcha_mode(c: Gojo, m: Message):
59
  else:
60
  type_ = split[1].lower()
61
  if type_ == "qr":
62
- captcha.update_type(m.chat.id, "qr")
63
- await m.reply_text("Captcha verification is now changed to qr code")
 
64
  return
65
  elif type_ == "image":
66
  captcha.update_type(m.chat.id, "image")
@@ -106,44 +112,73 @@ async def captcha_codes_check(c: Gojo, q: CallbackQuery):
106
  new_cap = ":".join(caps)
107
  await q.answer(f"Wrong\nTries left: {tries}", True)
108
  if not tries:
109
- new_cap = f"You have zero tries left now. I am going to kick you know coz you failed to solve captcha...see yaa {q.from_user.mention}"
110
  try:
111
  await q.message.chat.ban_member(user)
112
  except Exception as e:
113
- await q.message.reply_text("Failed to kick member")
114
  return
115
  await q.message.delete()
116
- await q.message.reply_text(new_cap)
117
- await c.unban_chat_member(chat, user)
118
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  else:
120
  await q.edit_message_caption(new_cap, reply_markup=q.message.reply_markup)
121
  return
122
 
123
 
124
- @Gojo.on_chat_member_updated(filters.group, group=3)
125
- async def on_chat_members_updatess(c: Gojo, u: ChatMemberUpdated):
126
- chat = u.chat.id
127
-
128
- if u.new_chat_member:
129
-
130
- user = u.new_chat_member.user.id
131
- userr = u.new_chat_member.user
132
-
133
- is_qr = CAPTCHA().is_captcha(chat)
134
- if not is_qr:
135
- return
136
 
 
 
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
 
144
- captcha_type = captcha.get_captcha(chat)
145
-
146
- is_already = cap_data.is_already_data(chat, user)
 
 
 
 
 
 
 
 
147
 
148
  mess = False
149
  try:
@@ -154,36 +189,40 @@ async def on_chat_members_updatess(c: Gojo, u: ChatMemberUpdated):
154
  mess = False
155
  is_already = False
156
 
157
- if is_already and not mess:
158
  cap_data.del_message_id(chat, is_already)
159
- return
160
 
161
  try:
162
- await c.restrict_chat_member(chat, user, ChatPermissions())
163
  except Exception as e:
164
  LOGGER.error(e)
165
  LOGGER.error(format_exc())
166
- return
167
 
168
  if not is_already:
 
169
  if captcha_type == "qr":
170
- pic = await get_qr_captcha(chat, user)
171
- cap = f"Please {userr.mention} scan this qr code with your phone to verify that you are human"
172
  ms = await c.send_photo(chat, pic, caption=cap)
173
- cap_data.store_message_id(chat, user, ms.id)
174
- return
 
175
  elif captcha_type == "image":
176
- img, code = await get_image_captcha(chat, user)
177
- cap = f"Please {userr.mention} please choose the correct code from the one given bellow\nYou have three tries if you get all three wrong u will be kicked from the chat.\nTries left: 3"
178
- cap_data.load_cap_data(chat, user, code)
179
  rand = [code]
180
  while len(rand) != 5:
181
  hehe = genrator()
 
 
182
  rand.append(hehe)
183
 
184
  shuffle(rand)
185
 
186
- ini = f"captcha_{chat}_{user}_"
187
 
188
  kb = ikm(
189
  [
@@ -205,7 +244,8 @@ async def on_chat_members_updatess(c: Gojo, u: ChatMemberUpdated):
205
  ]
206
  )
207
  await c.send_photo(chat, img, caption=cap, reply_markup=kb)
208
- return
 
209
  elif is_already and mess:
210
  kb = ikm(
211
  [
@@ -214,11 +254,11 @@ async def on_chat_members_updatess(c: Gojo, u: ChatMemberUpdated):
214
  ]
215
  ]
216
  )
217
- await c.send_message(f"{userr.mention} your verification is already pending", reply_markup=kb)
218
- return
219
  else:
220
- await c.unban_chat_member(chat, user)
221
- return
222
 
223
 
224
  __PLUGIN__ = "captcha"
 
1
+ import os
2
+ from random import choice, shuffle
3
  from traceback import format_exc
4
+ from typing import List
5
 
6
  import pyrogram
7
  from pyrogram import filters
8
+ from pyrogram.enums import ChatMemberStatus as CMS
9
+ from pyrogram.enums import ParseMode as PM
10
+ from pyrogram.types import CallbackQuery, ChatPermissions
11
  from pyrogram.types import InlineKeyboardButton as IKB
12
  from pyrogram.types import InlineKeyboardMarkup as ikm
13
+ from pyrogram.types import Message, User
14
 
15
+ from Powers import DEV_USERS, LOGGER, MESSAGE_DUMP, SUDO_USERS, WHITELIST_USERS
16
  from Powers.bot_class import Gojo
17
  from Powers.database.captcha_db import CAPTCHA, CAPTCHA_DATA
18
  from Powers.utils.captcha_helper import (genrator, get_image_captcha,
19
  get_qr_captcha)
20
+ from Powers.utils.custom_filters import admin_filter, captcha_filter, command
21
+ from Powers.utils.extras import BAN_GIFS
22
 
23
 
24
  @Gojo.on_message(command("captcha") & admin_filter & ~filters.private)
25
+ async def start_captcha(_, m: Message):
26
  captcha = CAPTCHA()
27
  split = m.command
28
  if len(split) == 1:
 
64
  else:
65
  type_ = split[1].lower()
66
  if type_ == "qr":
67
+ await m.reply_text("This feature is not implemented yet\nUse /captchamode image")
68
+ # captcha.update_type(m.chat.id, "qr")
69
+ # await m.reply_text("Captcha verification is now changed to qr code")
70
  return
71
  elif type_ == "image":
72
  captcha.update_type(m.chat.id, "image")
 
112
  new_cap = ":".join(caps)
113
  await q.answer(f"Wrong\nTries left: {tries}", True)
114
  if not tries:
115
+ txt = f"{q.from_user.mention} was not able to pass captcha verification thus banned from the group"
116
  try:
117
  await q.message.chat.ban_member(user)
118
  except Exception as e:
119
+ await q.message.reply_text("Failed to ban member")
120
  return
121
  await q.message.delete()
122
+ keyboard = ikm(
123
+ [
124
+ [
125
+ IKB(
126
+ "Unban",
127
+ callback_data=f"unban_={user}",
128
+ ),
129
+ ],
130
+ ],
131
+ )
132
+ anim = choice(BAN_GIFS)
133
+ try:
134
+ await c.send_animation(
135
+ chat_id=q.message.chat.id,
136
+ animation=str(anim),
137
+ caption=txt,
138
+ reply_markup=keyboard,
139
+ parse_mode=PM.HTML,
140
+ )
141
+ except Exception:
142
+
143
+ await c.send_animation(
144
+ chat_id=q.message.chat.id,
145
+ text=txt,
146
+ reply_markup=keyboard,
147
+ parse_mode=PM.HTML,
148
+ )
149
+ await c.send_message(MESSAGE_DUMP,f"#REMOVE from BAN_GFIS\n{anim}")
150
+ c_data.remove_cap_data(chat, user)
151
+ c_data.del_message_id(q.message.chat.id, user)
152
+ return
153
  else:
154
  await q.edit_message_caption(new_cap, reply_markup=q.message.reply_markup)
155
  return
156
 
157
 
158
+ @Gojo.on_message(filters.group & captcha_filter & filters.new_chat_members, group=3)
159
+ async def on_chat_members_updatess(c: Gojo, m: Message):
160
+ chat = m.chat.id
 
 
 
 
 
 
 
 
 
161
 
162
+ users: List[User] = m.new_chat_members
163
+ for user in users:
164
  captcha = CAPTCHA()
165
  cap_data = CAPTCHA_DATA()
166
+
167
+ if user.is_bot:
168
+ continue
169
  SUPPORT_STAFF = DEV_USERS.union(SUDO_USERS).union(WHITELIST_USERS)
 
 
170
 
171
+ try:
172
+ status = (await m.chat.get_member(user)).status
173
+ if status in [CMS.OWNER, CMS.ADMINISTRATOR]:
174
+ continue
175
+ except:
176
+ pass
177
+ if user.id in SUPPORT_STAFF:
178
+ continue
179
+ captcha_info = captcha.get_captcha(chat)
180
+ captcha_type = captcha_info["captcha_type"]
181
+ is_already = cap_data.is_already_data(chat, user.id)
182
 
183
  mess = False
184
  try:
 
189
  mess = False
190
  is_already = False
191
 
192
+ if is_already and mess.empty:
193
  cap_data.del_message_id(chat, is_already)
194
+ continue
195
 
196
  try:
197
+ await c.restrict_chat_member(chat, user.id, ChatPermissions())
198
  except Exception as e:
199
  LOGGER.error(e)
200
  LOGGER.error(format_exc())
201
+ continue
202
 
203
  if not is_already:
204
+ captcha_type = "image" # I am not going to apply qr captcha in this update
205
  if captcha_type == "qr":
206
+ pic = await get_qr_captcha(chat, user.id, c.me.username)
207
+ cap = f"Please {user.mention} scan this qr code with your phone to verify that you are human"
208
  ms = await c.send_photo(chat, pic, caption=cap)
209
+ os.remove(pic)
210
+ cap_data.store_message_id(chat, user.id, ms.id)
211
+ continue
212
  elif captcha_type == "image":
213
+ img, code = await get_image_captcha(chat, user.id)
214
+ cap = f"Please {user.mention} please choose the correct code from the one given bellow\nYou have three tries if you get all three wrong u will be banned from the chat.\nTries left: 3"
215
+ cap_data.load_cap_data(chat, user.id, code)
216
  rand = [code]
217
  while len(rand) != 5:
218
  hehe = genrator()
219
+ if hehe == code:
220
+ continue
221
  rand.append(hehe)
222
 
223
  shuffle(rand)
224
 
225
+ ini = f"captcha_{chat}_{user.id}_"
226
 
227
  kb = ikm(
228
  [
 
244
  ]
245
  )
246
  await c.send_photo(chat, img, caption=cap, reply_markup=kb)
247
+ os.remove(img)
248
+ continue
249
  elif is_already and mess:
250
  kb = ikm(
251
  [
 
254
  ]
255
  ]
256
  )
257
+ await c.send_message(f"{user.mention} your verification is already pending", reply_markup=kb)
258
+ continue
259
  else:
260
+ await c.unban_chat_member(chat, user.id)
261
+ continue
262
 
263
 
264
  __PLUGIN__ = "captcha"
Powers/plugins/flood.py CHANGED
@@ -212,12 +212,17 @@ async def flood_set(c: Gojo, m: Message):
212
  c_id = m.chat.id
213
  if split[1].lower() in on_key:
214
  if is_flood:
215
- return await m.reply_text(f"Flood is on for this chat\n**Action**:{saction}\n**Messages**:{slimit} within {swithin} sec")
216
- Flood.save_flood(m.chat.id, 5, 5, 'mute')
217
- await m.reply_text("Flood protection has been started for this group.")
 
 
218
  return
219
  if split[1].lower() in off_key:
220
  x = Flood.rm_flood(c_id)
 
 
 
221
  if x:
222
  await m.reply_text("Flood protection has been stopped for this chat")
223
  return
@@ -322,8 +327,8 @@ async def callbacks(c: Gojo, q: CallbackQuery):
322
  "Flood protection setting has been updated",
323
  reply_markup=close_kb
324
  )
325
- return
326
  await q.answer("skip")
 
327
  if not change == swithin:
328
  Flood.save_flood(c_id, slimit, change, saction)
329
  await q.answer("Updated", show_alert=True)
@@ -390,7 +395,7 @@ async def reverse_callbacks(c: Gojo, q: CallbackQuery):
390
  return
391
 
392
  dic = {}
393
- @Gojo.on_message(flood_filter & ~admin_filter, 18)
394
  async def flood_watcher(c: Gojo, m: Message):
395
  c_id = m.chat.id
396
 
@@ -573,13 +578,14 @@ async def flood_watcher(c: Gojo, m: Message):
573
 
574
  elif action == "kick":
575
  try:
576
- await m.chat.ban_member(u_id, datetime.now()+timedelta(seconds=1))
577
- txt = "Don't dare to spam here if I am around! Nothing can escape my 6 eyes\nAction: kicked\nReason: Spaming"
 
 
578
  await m.reply_animation(
579
  animation=str(choice(KICK_GIFS)),
580
- caption=txt,
581
  )
582
- await m.chat.unban_member(m.from_user.id)
583
  dic[c_id][u_id][1].clear()
584
  dic[c_id][u_id][0].clear()
585
  return
@@ -601,6 +607,12 @@ async def flood_watcher(c: Gojo, m: Message):
601
  dic[c_id][u_id][1].clear()
602
  dic[c_id][u_id][0].clear()
603
  return
 
 
 
 
 
 
604
  elif action == "mute":
605
  try:
606
  await m.chat.restrict_member(
 
212
  c_id = m.chat.id
213
  if split[1].lower() in on_key:
214
  if is_flood:
215
+ saction = is_flood[2]
216
+ slimit = is_flood[0]
217
+ swithin = is_flood[1]
218
+
219
+ await m.reply_text(f"Flood is on for this chat\n**Action**:{saction}\n**Messages**:{slimit} within {swithin} sec")
220
  return
221
  if split[1].lower() in off_key:
222
  x = Flood.rm_flood(c_id)
223
+ if not is_flood:
224
+ await m.reply_text("Flood protection is already off for this chat")
225
+ return
226
  if x:
227
  await m.reply_text("Flood protection has been stopped for this chat")
228
  return
 
327
  "Flood protection setting has been updated",
328
  reply_markup=close_kb
329
  )
 
330
  await q.answer("skip")
331
+ return
332
  if not change == swithin:
333
  Flood.save_flood(c_id, slimit, change, saction)
334
  await q.answer("Updated", show_alert=True)
 
395
  return
396
 
397
  dic = {}
398
+ @Gojo.on_message(flood_filter, 18)
399
  async def flood_watcher(c: Gojo, m: Message):
400
  c_id = m.chat.id
401
 
 
578
 
579
  elif action == "kick":
580
  try:
581
+ d = datetime.now()+timedelta(seconds=31) #will automatically unban user after 31 seconds kind of fail safe if unban members doesn't work properly
582
+ await m.chat.ban_member(u_id, until_date=d)
583
+ success = await c.unban_chat_member(m.chat.id, u_id)
584
+ txt = f"Don't dare to spam here if I am around! Nothing can escape my 6 eyes\nAction: {'kicked' if success else 'banned for 30 seconds'}\nReason: Spaming"
585
  await m.reply_animation(
586
  animation=str(choice(KICK_GIFS)),
587
+ caption=txt
588
  )
 
589
  dic[c_id][u_id][1].clear()
590
  dic[c_id][u_id][0].clear()
591
  return
 
607
  dic[c_id][u_id][1].clear()
608
  dic[c_id][u_id][0].clear()
609
  return
610
+ except Exception as e:
611
+ LOGGER.error(e)
612
+ LOGGER.error(format_exc())
613
+ dic[c_id][u_id][1].clear()
614
+ dic[c_id][u_id][0].clear()
615
+ return
616
  elif action == "mute":
617
  try:
618
  await m.chat.restrict_member(
Powers/plugins/greetings.py CHANGED
@@ -1,18 +1,19 @@
1
  from html import escape
2
  from secrets import choice
3
  from traceback import format_exc
 
4
 
5
  from pyrogram import emoji, enums, filters
6
- 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 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
17
  from Powers.utils.msg_types import Types, get_wlcm_type
18
  from Powers.utils.parser import escape_markdown, mention_html
@@ -25,17 +26,13 @@ gdb = GBan()
25
  ChatType = enums.ChatType
26
 
27
 
28
- async def escape_mentions_using_curly_brackets_wl(
29
- m: ChatMemberUpdated,
30
- n: bool,
31
  text: str,
32
  parse_words: list,
33
  ) -> str:
34
  teks = await escape_invalid_curly_brackets(text, parse_words)
35
- if n:
36
- user = m.new_chat_member.user if m.new_chat_member else m.from_user
37
- else:
38
- user = m.old_chat_member.user if m.old_chat_member else m.from_user
39
  if teks:
40
  teks = teks.format(
41
  first=escape(user.first_name),
@@ -235,113 +232,101 @@ async def cleannnnn(_, m: Message):
235
  except Exception:
236
  pass
237
 
238
-
239
- @Gojo.on_chat_member_updated(filters.group, group=69)
240
- async def member_has_joined(c: Gojo, member: ChatMemberUpdated):
241
-
242
- if member.old_chat_member.status not in {CMS.MEMBER, CMS.OWNER, CMS.ADMINISTRATOR}:
243
- pass
244
- else:
245
- return
246
-
247
- user = member.new_chat_member.user if member.new_chat_member else member.from_user
248
-
249
- db = Greetings(member.chat.id)
250
- banned_users = gdb.check_gban(user.id)
251
- try:
252
- if user.id == c.me.id:
253
- return
254
- if user.id in DEV_USERS:
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:
262
- await member.chat.ban_member(user.id)
263
- await c.send_message(
264
- member.chat.id,
265
- f"{user.mention} was globally banned so i banned!",
266
- )
267
- return
268
- if user.is_bot:
269
- return # ignore bots
270
- except ChatAdminRequired:
271
- return
272
- status = db.get_welcome_status()
273
- oo = db.get_welcome_text()
274
- UwU = db.get_welcome_media()
275
- mtype = db.get_welcome_msgtype()
276
- parse_words = [
277
- "first",
278
- "last",
279
- "fullname",
280
- "username",
281
- "mention",
282
- "id",
283
- "chatname",
284
- ]
285
- hmm = await escape_mentions_using_curly_brackets_wl(member, True, oo, parse_words)
286
- if status:
287
- tek, button = await parse_button(hmm)
288
- button = await build_keyboard(button)
289
- button = ikb(button) if button else None
290
-
291
- if "%%%" in tek:
292
- filter_reply = tek.split("%%%")
293
- teks = choice(filter_reply)
294
- else:
295
- teks = tek
296
-
297
- if not teks:
298
- teks = f"A wild {user.mention} appeared in {member.chat.title}! Everyone be aware."
299
-
300
- ifff = db.get_current_cleanwelcome_id()
301
- gg = db.get_current_cleanwelcome_settings()
302
- if ifff and gg:
303
- try:
304
- await c.delete_messages(member.chat.id, int(ifff))
305
- except RPCError:
306
- pass
307
- if not teks:
308
- teks = "Hey {first}, welcome to {chatname}"
309
  try:
310
- if not UwU:
311
- jj = await c.send_message(
312
- member.chat.id,
313
- text=teks,
314
- reply_markup=button,
315
- disable_web_page_preview=True,
 
316
  )
317
- elif UwU:
318
- jj = await (await send_cmd(c,mtype))(
319
- member.chat.id,
320
- UwU,
321
- caption=teks,
322
- reply_markup=button,
323
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
324
 
325
- if jj:
326
- db.set_cleanwlcm_id(int(jj.id))
327
- except ChannelPrivate:
328
- return
329
- except RPCError as e:
330
- LOGGER.error(e)
331
- LOGGER.error(format_exc(e))
332
- return
333
- else:
334
- return
335
-
336
-
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 not in [CMS.LEFT, CMS.BANNED, CMS.RESTRICTED]:
341
- pass
342
- else:
343
- return
344
- db = Greetings(member.chat.id)
345
  status = db.get_goodbye_status()
346
  oo = db.get_goodbye_text()
347
  UwU = db.get_goodbye_media()
@@ -356,9 +341,9 @@ async def member_has_left(c: Gojo, member: ChatMemberUpdated):
356
  "chatname",
357
  ]
358
 
359
- user = member.old_chat_member.user if member.old_chat_member else member.from_user
360
 
361
- hmm = await escape_mentions_using_curly_brackets_wl(member, False, oo, parse_words)
362
  if status:
363
  tek, button = await parse_button(hmm)
364
  button = await build_keyboard(button)
@@ -377,12 +362,12 @@ async def member_has_left(c: Gojo, member: ChatMemberUpdated):
377
  iii = db.get_current_cleangoodbye_settings()
378
  if ifff and iii:
379
  try:
380
- await c.delete_messages(member.chat.id, int(ifff))
381
  except RPCError:
382
  pass
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
@@ -391,14 +376,14 @@ async def member_has_left(c: Gojo, member: ChatMemberUpdated):
391
  try:
392
  if not UwU:
393
  ooo = await c.send_message(
394
- member.chat.id,
395
  text=teks,
396
  reply_markup=button,
397
  disable_web_page_preview=True,
398
  )
399
  elif UwU:
400
  ooo = await (await send_cmd(c,mtype))(
401
- member.chat.id,
402
  UwU,
403
  caption=teks,
404
  reply_markup=button,
 
1
  from html import escape
2
  from secrets import choice
3
  from traceback import format_exc
4
+ from typing import List
5
 
6
  from pyrogram import emoji, enums, filters
 
7
  from pyrogram.errors import ChannelPrivate, ChatAdminRequired, RPCError
8
+ from pyrogram.types import Message, User
9
 
10
  from Powers import DEV_USERS, LOGGER
11
  from Powers.bot_class import Gojo
12
  from Powers.database.antispam_db import GBan
13
  from Powers.database.greetings_db import Greetings
14
  from Powers.utils.cmd_senders import send_cmd
15
+ from Powers.utils.custom_filters import (admin_filter, bot_admin_filter,
16
+ captcha_filter, command)
17
  from Powers.utils.kbhelpers import ikb
18
  from Powers.utils.msg_types import Types, get_wlcm_type
19
  from Powers.utils.parser import escape_markdown, mention_html
 
26
  ChatType = enums.ChatType
27
 
28
 
29
+ async def escape_mentions_using_curly_brackets_wl(
30
+ user: User,
31
+ m: Message,
32
  text: str,
33
  parse_words: list,
34
  ) -> str:
35
  teks = await escape_invalid_curly_brackets(text, parse_words)
 
 
 
 
36
  if teks:
37
  teks = teks.format(
38
  first=escape(user.first_name),
 
232
  except Exception:
233
  pass
234
 
235
+ @Gojo.on_message(filters.group & filters.new_chat_members & ~captcha_filter, group=69)
236
+ async def member_has_joined(c: Gojo, m: Message):
237
+ users: List[User] = m.new_chat_members
238
+ db = Greetings(m.chat.id)
239
+ for user in users:
240
+ banned_users = gdb.check_gban(user.id)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241
  try:
242
+ if user.id == c.me.id:
243
+ continue
244
+ if user.id in DEV_USERS:
245
+ await c.send_animation(
246
+ chat_id=m.chat.id,
247
+ animation="./extras/william.gif",
248
+ caption=f"😳 My **DEV** {user.mention} has also joined the chat!",
249
  )
250
+ continue
251
+ if banned_users:
252
+ await m.chat.ban_member(user.id)
253
+ await c.send_message(
254
+ m.chat.id,
255
+ f"{user.mention} was globally banned so i banned!",
256
  )
257
+ continue
258
+ if user.is_bot:
259
+ continue # ignore bots
260
+ except ChatAdminRequired:
261
+ continue
262
+ status = db.get_welcome_status()
263
+ oo = db.get_welcome_text()
264
+ UwU = db.get_welcome_media()
265
+ mtype = db.get_welcome_msgtype()
266
+ parse_words = [
267
+ "first",
268
+ "last",
269
+ "fullname",
270
+ "username",
271
+ "mention",
272
+ "id",
273
+ "chatname",
274
+ ]
275
+ hmm = await escape_mentions_using_curly_brackets_wl(user, m, oo, parse_words)
276
+ if status:
277
+ tek, button = await parse_button(hmm)
278
+ button = await build_keyboard(button)
279
+ button = ikb(button) if button else None
280
+
281
+ if "%%%" in tek:
282
+ filter_reply = tek.split("%%%")
283
+ teks = choice(filter_reply)
284
+ else:
285
+ teks = tek
286
+
287
+ if not teks:
288
+ teks = f"A wild {user.mention} appeared in {m.chat.title}! Everyone be aware."
289
+
290
+ ifff = db.get_current_cleanwelcome_id()
291
+ gg = db.get_current_cleanwelcome_settings()
292
+ if ifff and gg:
293
+ try:
294
+ await c.delete_messages(m.chat.id, int(ifff))
295
+ except RPCError:
296
+ pass
297
+ if not teks:
298
+ teks = "Hey {first}, welcome to {chatname}"
299
+ try:
300
+ if not UwU:
301
+ jj = await c.send_message(
302
+ m.chat.id,
303
+ text=teks,
304
+ reply_markup=button,
305
+ disable_web_page_preview=True,
306
+ )
307
+ elif UwU:
308
+ jj = await (await send_cmd(c,mtype))(
309
+ m.chat.id,
310
+ UwU,
311
+ caption=teks,
312
+ reply_markup=button,
313
+ )
314
+
315
+ if jj:
316
+ db.set_cleanwlcm_id(int(jj.id))
317
+ except ChannelPrivate:
318
+ continue
319
+ except RPCError as e:
320
+ LOGGER.error(e)
321
+ LOGGER.error(format_exc(e))
322
+ continue
323
+ else:
324
+ continue
325
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
326
 
327
+ @Gojo.on_message(filters.group & filters.left_chat_member, group=99)
328
+ async def member_has_left(c: Gojo, m: Message):
329
+ db = Greetings(m.chat.id)
 
 
330
  status = db.get_goodbye_status()
331
  oo = db.get_goodbye_text()
332
  UwU = db.get_goodbye_media()
 
341
  "chatname",
342
  ]
343
 
344
+ user = m.left_chat_member if m.left_chat_member else m.from_user
345
 
346
+ hmm = await escape_mentions_using_curly_brackets_wl(user, m, oo, parse_words)
347
  if status:
348
  tek, button = await parse_button(hmm)
349
  button = await build_keyboard(button)
 
362
  iii = db.get_current_cleangoodbye_settings()
363
  if ifff and iii:
364
  try:
365
+ await c.delete_messages(m.chat.id, int(ifff))
366
  except RPCError:
367
  pass
368
  if user.id in DEV_USERS:
369
  await c.send_message(
370
+ m.chat.id,
371
  f"Will miss you my master {user.mention} :(",
372
  )
373
  return
 
376
  try:
377
  if not UwU:
378
  ooo = await c.send_message(
379
+ m.chat.id,
380
  text=teks,
381
  reply_markup=button,
382
  disable_web_page_preview=True,
383
  )
384
  elif UwU:
385
  ooo = await (await send_cmd(c,mtype))(
386
+ m.chat.id,
387
  UwU,
388
  caption=teks,
389
  reply_markup=button,
Powers/plugins/locks.py CHANGED
@@ -464,10 +464,9 @@ async def is_approved_user(c: Gojo, m: Message):
464
  return True
465
  return False
466
  elif m.forward_from_chat:
467
- x_chat = (await c.get_chat(m.forward_from_chat.id)).linked_chat
468
  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):
469
  return True
470
- elif x_chat and x_chat.id == m.chat.id:
471
  return True
472
  else:
473
  return False
 
464
  return True
465
  return False
466
  elif m.forward_from_chat:
 
467
  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):
468
  return True
469
+ elif m.automatic_forward:
470
  return True
471
  else:
472
  return False
Powers/plugins/scheduled_jobs.py CHANGED
@@ -38,14 +38,12 @@ async def send_wishish(JJK: Client):
38
  agee = ""
39
  if i["is_year"]:
40
  agee = curr.year - dob.year
41
- if str(agee).endswith("1"):
42
- agee = f"{agee}st"
43
- elif str(agee).endswith("2"):
44
- agee = f"{agee}nd"
45
- elif str(agee).endswith("3"):
46
- agee = f"{agee}rd"
47
  else:
48
- agee = f"{agee}th"
 
49
  U = await JJK.get_chat_member(chat_id=j,user_id=i["user_id"])
50
  wish = choice(birthday_wish)
51
  if U.status in [ChatMemberStatus.MEMBER,ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER]:
 
38
  agee = ""
39
  if i["is_year"]:
40
  agee = curr.year - dob.year
41
+ suffix = {1: 'st', 2: 'nd', 3: 'rd'}
42
+ if int(agee/10) == 1:
43
+ suf = "th"
 
 
 
44
  else:
45
+ suffix.get((agee%10), "th")
46
+ agee = f"{agee}{suf}"
47
  U = await JJK.get_chat_member(chat_id=j,user_id=i["user_id"])
48
  wish = choice(birthday_wish)
49
  if U.status in [ChatMemberStatus.MEMBER,ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER]:
Powers/plugins/start.py CHANGED
@@ -14,6 +14,7 @@ from Powers import (DEV_USERS, HELP_COMMANDS, LOGGER, OWNER_ID, PREFIX_HANDLER,
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
@@ -69,7 +70,8 @@ async def start(c: Gojo, m: Message):
69
 
70
  if m.chat.type == ChatType.PRIVATE:
71
  if len(m.text.strip().split()) > 1:
72
- help_option = (m.text.split(None, 1)[1]).lower()
 
73
 
74
  if help_option.startswith("note") and (
75
  help_option not in ("note", "notes")
@@ -83,9 +85,7 @@ async def start(c: Gojo, m: Message):
83
 
84
  help_msg, help_kb = await get_help_msg(c, m, help_option)
85
 
86
- if not help_msg:
87
- return
88
- elif help_msg:
89
  await m.reply_photo(
90
  photo=str(choice(StartPic)),
91
  caption=help_msg,
@@ -94,8 +94,8 @@ async def start(c: Gojo, m: Message):
94
  quote=True,
95
  )
96
  return
97
- if len(help_option.split("_", 1)) == 2:
98
- if help_option.split("_")[1] == "help":
99
  await m.reply_photo(
100
  photo=str(choice(StartPic)),
101
  caption=help_msg,
@@ -104,9 +104,9 @@ async def start(c: Gojo, m: Message):
104
  quote=True,
105
  )
106
  return
107
- elif help_option.split("_", 1)[0] == "qrcaptcha":
108
  decoded = encode_decode(
109
- help_option.split("_", 1)[1], "decode")
110
  decode = decoded.split(":")
111
  chat = decode[0]
112
  user = decode[1]
@@ -115,9 +115,25 @@ async def start(c: Gojo, m: Message):
115
  return
116
  try:
117
  await c.unban_chat_member(int(chat), int(user))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  try:
119
- os.remove(f"captcha_verification{chat}_{user}.png")
120
- except Exception:
121
  pass
122
  return
123
  except Exception:
 
14
  PYROGRAM_VERSION, PYTHON_VERSION, SUDO_USERS, UPTIME,
15
  VERSION, WHITELIST_USERS)
16
  from Powers.bot_class import Gojo
17
+ from Powers.database.captcha_db import CAPTCHA_DATA
18
  from Powers.utils.custom_filters import command
19
  from Powers.utils.extras import StartPic
20
  from Powers.utils.kbhelpers import ikb
 
70
 
71
  if m.chat.type == ChatType.PRIVATE:
72
  if len(m.text.strip().split()) > 1:
73
+ arg = m.text.split(None, 1)[1]
74
+ help_option = arg.lower()
75
 
76
  if help_option.startswith("note") and (
77
  help_option not in ("note", "notes")
 
85
 
86
  help_msg, help_kb = await get_help_msg(c, m, help_option)
87
 
88
+ if help_msg:
 
 
89
  await m.reply_photo(
90
  photo=str(choice(StartPic)),
91
  caption=help_msg,
 
94
  quote=True,
95
  )
96
  return
97
+ if len(arg.split("_", 1)) >= 2:
98
+ if arg.split("_")[1] == "help":
99
  await m.reply_photo(
100
  photo=str(choice(StartPic)),
101
  caption=help_msg,
 
104
  quote=True,
105
  )
106
  return
107
+ elif arg.split("_", 1)[0] == "qr":
108
  decoded = encode_decode(
109
+ arg.split("_", 1)[1], "decode")
110
  decode = decoded.split(":")
111
  chat = decode[0]
112
  user = decode[1]
 
115
  return
116
  try:
117
  await c.unban_chat_member(int(chat), int(user))
118
+ msg = CAPTCHA_DATA().del_message_id(chat, user)
119
+ try:
120
+ chat_ = await c.get_chat(chat)
121
+ kb = ikb(
122
+ [
123
+ [
124
+ "Link to chat",
125
+ f"{chat_.invite_link}",
126
+ "url"
127
+ ]
128
+ ]
129
+ )
130
+ except:
131
+ chat_ = False
132
+ kb = None
133
+ await m.reply_text("You can now talk in the chat", reply_markup=kb)
134
  try:
135
+ await c.delete_messages(chat, msg)
136
+ except:
137
  pass
138
  return
139
  except Exception:
Powers/plugins/stickers.py CHANGED
@@ -173,7 +173,6 @@ async def kang(c:Gojo, m: Message):
173
  volume += 1
174
  continue
175
  try:
176
- print(sticker_set)
177
  await add_sticker_to_set(c,sticker_set,sticker)
178
  packname_found = True
179
  except StickerEmojiInvalid:
@@ -326,7 +325,7 @@ async def get_sticker_from_file(c: Gojo, m: Message):
326
  upp = await repl.download()
327
  up = toimage(upp,is_direc=True)
328
  await x.delete()
329
- await m.reply_photo(up,caption=Caption)
330
  os.remove(up)
331
  return
332
  elif repl.photo:
 
173
  volume += 1
174
  continue
175
  try:
 
176
  await add_sticker_to_set(c,sticker_set,sticker)
177
  packname_found = True
178
  except StickerEmojiInvalid:
 
325
  upp = await repl.download()
326
  up = toimage(upp,is_direc=True)
327
  await x.delete()
328
+ await m.reply_document(up, caption=Caption)
329
  os.remove(up)
330
  return
331
  elif repl.photo:
Powers/utils/captcha_helper.py CHANGED
@@ -2,20 +2,17 @@ from random import choice, randint, randrange
2
 
3
  import qrcode
4
  from captcha.image import ImageCaptcha
5
- from pyrogram.types import InlineKeyboardButton as IKB
6
- from pyrogram.types import InlineKeyboardMarkup as IKM
7
 
8
  from Powers.database.captcha_db import CAPTCHA_DATA
9
  from Powers.utils.string import encode_decode
10
- from Powers.vars import Config
11
 
12
- initial = f"t.me/{Config.BOT_USERNAME}?start=qrcaptcha_"
13
  captchaa = CAPTCHA_DATA()
14
 
15
 
16
- async def get_qr_captcha(chat, user):
 
17
  encode = f"{chat}:{user}"
18
- encoded = encode_decode(encode)
19
  final = initial+encoded
20
  qr = qrcode.make(final)
21
  name = f"captcha_verification{chat}_{user}.png"
@@ -42,7 +39,7 @@ def genrator():
42
  str_ = ""
43
  while len(str_) != 4:
44
  OwO = choice(list_)
45
- str_ += OwO
46
  return str_
47
 
48
 
@@ -55,4 +52,4 @@ async def get_image_captcha(chat, user):
55
  cap = image.generate(str_)
56
  image.write(str_, name)
57
 
58
- return name, str_
 
2
 
3
  import qrcode
4
  from captcha.image import ImageCaptcha
 
 
5
 
6
  from Powers.database.captcha_db import CAPTCHA_DATA
7
  from Powers.utils.string import encode_decode
 
8
 
 
9
  captchaa = CAPTCHA_DATA()
10
 
11
 
12
+ async def get_qr_captcha(chat, user, username):
13
+ initial = f"t.me/{username}?start=qr_"
14
  encode = f"{chat}:{user}"
15
+ encoded = await encode_decode(encode)
16
  final = initial+encoded
17
  qr = qrcode.make(final)
18
  name = f"captcha_verification{chat}_{user}.png"
 
39
  str_ = ""
40
  while len(str_) != 4:
41
  OwO = choice(list_)
42
+ str_ += str(OwO)
43
  return str_
44
 
45
 
 
52
  cap = image.generate(str_)
53
  image.write(str_, name)
54
 
55
+ return name, str_
Powers/utils/custom_filters.py CHANGED
@@ -14,6 +14,7 @@ from Powers.bot_class import Gojo
14
  from Powers.database.afk_db import AFK
15
  from Powers.database.approve_db import Approve
16
  from Powers.database.autojoin_db import AUTOJOIN
 
17
  from Powers.database.disable_db import Disabling
18
  from Powers.database.flood_db import Floods
19
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
@@ -329,12 +330,19 @@ async def afk_check_filter(_, __, m: Message):
329
  return False
330
 
331
  afk = AFK()
332
- user = m.from_user.id
333
  chat = m.chat.id
 
 
 
 
 
 
 
 
334
 
335
  is_afk = afk.check_afk(chat, user)
336
 
337
- if not is_afk:
338
  return False
339
  else:
340
  return True
@@ -354,19 +362,36 @@ async def flood_check_filter(_, __, m: Message):
354
  u_id = m.from_user.id
355
  c_id = m.chat.id
356
  is_flood = Flood.is_chat(c_id)
357
-
 
 
 
 
 
 
 
358
  app_users = Approve(m.chat.id).list_approved()
359
  SUDO_LEVEL = DEV_USERS.union(SUDO_USERS)
360
 
361
- if not is_flood or u_id in SUDO_LEVEL:
362
  return False
363
 
 
 
 
364
  elif u_id in {i[0] for i in app_users}:
365
  return False
366
 
367
  else:
368
  return True
369
 
 
 
 
 
 
 
 
370
  flood_filter = create(flood_check_filter)
371
  afk_filter = create(afk_check_filter)
372
  auto_join_filter = create(auto_join_check_filter)
 
14
  from Powers.database.afk_db import AFK
15
  from Powers.database.approve_db import Approve
16
  from Powers.database.autojoin_db import AUTOJOIN
17
+ from Powers.database.captcha_db import CAPTCHA
18
  from Powers.database.disable_db import Disabling
19
  from Powers.database.flood_db import Floods
20
  from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload
 
330
  return False
331
 
332
  afk = AFK()
 
333
  chat = m.chat.id
334
+ is_repl_afk = None
335
+ if m.reply_to_message:
336
+ repl_user = m.reply_to_message.from_user
337
+ if repl_user:
338
+ repl_user = m.reply_to_message.from_user.id
339
+ is_repl_afk = afk.check_afk(chat, repl_user)
340
+
341
+ user = m.from_user.id
342
 
343
  is_afk = afk.check_afk(chat, user)
344
 
345
+ if not (is_afk or is_repl_afk):
346
  return False
347
  else:
348
  return True
 
362
  u_id = m.from_user.id
363
  c_id = m.chat.id
364
  is_flood = Flood.is_chat(c_id)
365
+ if not is_flood:
366
+ return False
367
+ try:
368
+ admin_group = {i[0] for i in ADMIN_CACHE[m.chat.id]}
369
+ except KeyError:
370
+ admin_group = {
371
+ i[0] for i in await admin_cache_reload(m, "custom_filter_update")
372
+ }
373
  app_users = Approve(m.chat.id).list_approved()
374
  SUDO_LEVEL = DEV_USERS.union(SUDO_USERS)
375
 
376
+ if u_id in SUDO_LEVEL:
377
  return False
378
 
379
+ elif u_id in admin_group:
380
+ return False
381
+
382
  elif u_id in {i[0] for i in app_users}:
383
  return False
384
 
385
  else:
386
  return True
387
 
388
+ async def captcha_filt(_, __, m: Message):
389
+ try:
390
+ return CAPTCHA().is_captcha(m.chat.id)
391
+ except:
392
+ return False
393
+
394
+ captcha_filter = create(captcha_filt)
395
  flood_filter = create(flood_check_filter)
396
  afk_filter = create(afk_check_filter)
397
  auto_join_filter = create(auto_join_check_filter)
Powers/utils/sticker_help.py CHANGED
@@ -349,14 +349,14 @@ async def draw_meme(image_path: str, text: str, sticker: bool, fiill: str) -> li
349
 
350
 
351
  def toimage(image, filename=None, is_direc=False):
352
- filename = filename if filename else "gojo.jpg"
353
  if is_direc:
354
  os.rename(image, filename)
355
  return filename
356
  img = Image.open(image)
357
  if img.mode != "RGB":
358
  img = img.convert("RGB")
359
- img.save(filename, "jpeg")
360
  os.remove(image)
361
  return filename
362
 
 
349
 
350
 
351
  def toimage(image, filename=None, is_direc=False):
352
+ filename = filename if filename else "gojo.png"
353
  if is_direc:
354
  os.rename(image, filename)
355
  return filename
356
  img = Image.open(image)
357
  if img.mode != "RGB":
358
  img = img.convert("RGB")
359
+ img.save(filename, "png")
360
  os.remove(image)
361
  return filename
362
 
requirements.txt CHANGED
@@ -16,7 +16,7 @@ pillow == 10.1.0
16
  prettyconf==2.2.1
17
  pyaes==1.6.1
18
  pymongo==4.6.1
19
- git+https://github.com/KurimuzonAkuma/[email protected].30
20
  pysocks==1.7.1
21
  python-dateutil==2.8.2
22
  pytube==15.0.0
 
16
  prettyconf==2.2.1
17
  pyaes==1.6.1
18
  pymongo==4.6.1
19
+ git+https://github.com/KurimuzonAkuma/[email protected].32
20
  pysocks==1.7.1
21
  python-dateutil==2.8.2
22
  pytube==15.0.0