admin.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. from pyrogram import filters
  2. from pyrogram.types import ChatPermissions
  3. from wbb import OWNER_ID, SUDO_USER_ID, app
  4. from wbb.utils.botinfo import BOT_ID
  5. from wbb.utils.errors import capture_err
  6. __MODULE__ = "Admin"
  7. __HELP__ = '''/ban - Ban A User
  8. /unban - Unban A User
  9. /kick - Kick A User
  10. /purge - Purge Messages
  11. /del - Delete Replied Message
  12. /promote - Promote A Member
  13. /pin - Pin A Message
  14. /mute - Mute A User
  15. /unmute - Unmute A User'''
  16. SUDO = [OWNER_ID, SUDO_USER_ID]
  17. # Get List Of Admins In A Chat
  18. async def list_admins(group_id):
  19. list_of_admins = []
  20. async for member in app.iter_chat_members(
  21. group_id, filter="administrators"):
  22. list_of_admins.append(member.user.id)
  23. return list_of_admins
  24. # Get List Of Members In A Chat
  25. async def list_members(group_id):
  26. list_of_members = []
  27. async for member in app.iter_chat_members(group_id):
  28. list_of_members.append(member.user.id)
  29. return list_of_members
  30. # Purge Messages
  31. @app.on_message(filters.command("purge") & ~filters.edited)
  32. @capture_err
  33. async def purge(client, message):
  34. message_ids = []
  35. if message.chat.type not in ("supergroup", "channel"):
  36. return
  37. admins = await list_admins(message.chat.id)
  38. if message.from_user.id in admins \
  39. or message.from_user.id in SUDO:
  40. chat_id = message.chat.id
  41. from_user_id = message.from_user.id
  42. if (await app.get_chat_member(chat_id,
  43. from_user_id)).can_delete_messages \
  44. or (await app.get_chat_member(chat_id, from_user_id)).status \
  45. == 'creator' \
  46. or message.from_user.id in SUDO:
  47. if message.reply_to_message:
  48. for a_s_message_id in range(
  49. message.reply_to_message.message_id,
  50. message.message_id
  51. ):
  52. message_ids.append(a_s_message_id)
  53. if len(message_ids) == 100:
  54. await client.delete_messages(
  55. chat_id=message.chat.id,
  56. message_ids=message_ids,
  57. revoke=True
  58. )
  59. message_ids = []
  60. if len(message_ids) > 0:
  61. await client.delete_messages(
  62. chat_id=message.chat.id,
  63. message_ids=message_ids,
  64. revoke=True
  65. )
  66. else:
  67. await message.reply_text(
  68. "Reply To A Message To Delete It,"
  69. " Don't Make Fun Of Yourself!")
  70. else:
  71. await message.reply_text("Your Don't Have Enough Permissions!")
  72. await message.delete()
  73. # Kick members
  74. @app.on_message(filters.command("kick") & ~filters.edited)
  75. @capture_err
  76. async def kick(_, message):
  77. try:
  78. if (await app.get_chat_member(
  79. message.chat.id, message.from_user.id)).status == 'creator' \
  80. or (await app.get_chat_member(
  81. message.chat.id, message.from_user.id)).can_restrict_members \
  82. is True or message.from_user.id in SUDO:
  83. if len(message.command) == 2:
  84. username = (message.text.split(None, 1)[1])
  85. if (await app.get_users(username)).id in SUDO:
  86. await message.reply_text("You Wanna Kick The Elevated One?")
  87. else:
  88. if (await app.get_users(username)).id in \
  89. await list_members(message.chat.id):
  90. await message.chat.kick_member(username)
  91. await message.chat.unban_member(username)
  92. await message.reply_text(f"Kicked {username}")
  93. else:
  94. await message.reply_text("This user isn't here,"
  95. " consider kicking yourself.")
  96. if len(message.command) == 1 and message.reply_to_message:
  97. if message.reply_to_message.from_user.id in SUDO:
  98. await message.reply_text("You Wanna Kick The Elevated One?")
  99. else:
  100. if message.reply_to_message.from_user.id in \
  101. await list_members(message.chat.id):
  102. user_id = message.reply_to_message.from_user.id
  103. await message.reply_to_message.chat.kick_member(user_id)
  104. await message.reply_to_message.chat.unban_member(user_id)
  105. await message.reply_text("Kicked!")
  106. else:
  107. await message.reply_text("This user isn't here.")
  108. except Exception as e:
  109. await message.reply_text(str(e))
  110. # Ban members
  111. @app.on_message(filters.command("ban") & ~filters.edited)
  112. @capture_err
  113. async def ban(_, message):
  114. try:
  115. if (await app.get_chat_member(
  116. message.chat.id, message.from_user.id)).status == 'creator' \
  117. or (await app.get_chat_member(
  118. message.chat.id, message.from_user.id)).can_restrict_members \
  119. is True or message.from_user.id in SUDO:
  120. if len(message.command) == 2:
  121. username = (message.text.split(None, 1)[1])
  122. if (await app.get_users(username)).id in SUDO:
  123. await message.reply_text("You Wanna Ban The Elevated One?")
  124. else:
  125. if (await app.get_users(username)).id in \
  126. await list_members(message.chat.id):
  127. await message.chat.kick_member(username)
  128. await message.reply_text(f"Banned! {username}")
  129. else:
  130. await message.reply_text("This user isn't here,"
  131. " consider banning yourself.")
  132. if len(message.command) == 1 and message.reply_to_message:
  133. if message.reply_to_message.from_user.id in SUDO:
  134. await message.reply_text("You Wanna Ban The Elevated One?")
  135. else:
  136. if message.reply_to_message.from_user.id in \
  137. await list_members(message.chat.id):
  138. user_id = message.reply_to_message.from_user.id
  139. await message.reply_to_message.chat.kick_member(user_id)
  140. await message.reply_text("Banned!")
  141. else:
  142. await message.reply_text("This user isn't here.")
  143. except Exception as e:
  144. await message.reply_text(str(e))
  145. # Unban members
  146. @app.on_message(filters.command("unban") & ~filters.edited)
  147. @capture_err
  148. async def unban(_, message):
  149. try:
  150. if (await app.get_chat_member(
  151. message.chat.id, message.from_user.id)).status == 'creator' \
  152. or (await app.get_chat_member(
  153. message.chat.id, message.from_user.id)).can_restrict_members \
  154. is True or message.from_user.id in SUDO:
  155. if len(message.command) == 2:
  156. username = (message.text.split(None, 1)[1])
  157. if (await app.get_users(username)).id not in \
  158. await list_members(message.chat.id):
  159. await message.chat.unban_member(username)
  160. await message.reply_text(f"Unbanned! {username}")
  161. else:
  162. await message.reply_text("This user is already here,"
  163. " consider banning yourself.")
  164. if len(message.command) == 1 and message.reply_to_message:
  165. if message.reply_to_message.from_user.id not in \
  166. await list_members(message.chat.id):
  167. user_id = message.reply_to_message.from_user.id
  168. await message.chat.unban_member(user_id)
  169. await message.reply_text("Unbanned!")
  170. else:
  171. await message.reply_text("This user is already here.")
  172. except Exception as e:
  173. await message.reply_text(str(e))
  174. # Delete messages
  175. @app.on_message(filters.command("del"))
  176. @capture_err
  177. async def delete(_, message):
  178. if not message.reply_to_message:
  179. await message.reply_text("Reply To A Message To Delete It")
  180. return
  181. try:
  182. admins = await list_admins(message.chat.id)
  183. chat_id = message.chat.id
  184. from_user_id = message.from_user.id
  185. if message.from_user.id in admins \
  186. or message.from_user.id in SUDO:
  187. if (await app.get_chat_member(chat_id,
  188. from_user_id)).can_delete_messages \
  189. or (await app.get_chat_member(chat_id, from_user_id)).status \
  190. == 'creator' \
  191. or message.from_user.id in SUDO:
  192. await message.reply_to_message.delete()
  193. await message.delete()
  194. else:
  195. await message.reply_text("You Don't Have Enough Permissions,"
  196. + " Consider Wiping Yourself Off The Existence!")
  197. except Exception as e:
  198. await message.reply_text(str(e))
  199. # Promote Members
  200. @app.on_message(filters.command("promote") & ~filters.edited)
  201. @capture_err
  202. async def promote(_, message):
  203. try:
  204. admins = await list_admins(message.chat.id)
  205. chat_id = message.chat.id
  206. from_user_id = message.from_user.id
  207. if (await app.get_chat_member(chat_id,
  208. BOT_ID)).can_promote_members:
  209. if message.from_user.id in admins \
  210. or message.from_user.id in SUDO:
  211. if (await app.get_chat_member(chat_id,
  212. from_user_id)).can_promote_members \
  213. or (await app.get_chat_member(chat_id, from_user_id)).status \
  214. == 'creator' \
  215. or message.from_user.id in SUDO:
  216. if not message.reply_to_message and len(message.command) == 2:
  217. username = message.text.split(None, 1)[1]
  218. user_id = (await app.get_users(username)).id
  219. await message.chat.promote_member(
  220. user_id=user_id,
  221. can_change_info=True,
  222. can_invite_users=True,
  223. can_delete_messages=True,
  224. can_restrict_members=False,
  225. can_pin_messages=True,
  226. can_promote_members=True)
  227. await message.reply_text('Promoted!')
  228. elif message.reply_to_message:
  229. user_id = message.reply_to_message.from_user.id
  230. await message.chat.promote_member(
  231. user_id=user_id,
  232. can_change_info=True,
  233. can_invite_users=True,
  234. can_delete_messages=True,
  235. can_restrict_members=False,
  236. can_pin_messages=True,
  237. can_promote_members=True)
  238. await message.reply_text('Promoted!')
  239. else:
  240. await message.reply_text("Reply To A User's Message Or Give A Username To Promote.")
  241. else:
  242. await message.reply_text("Yeah, I Can See You're An Admin,"
  243. + " But You Don't Have Permissions"
  244. + " To Promote Someone.")
  245. else:
  246. await message.reply_text("You're Not An Admin, Want A Good Ban?")
  247. else:
  248. await message.reply_text("Well, Your Know What?, I'M NOT AN ADMIN!"
  249. + " MAKE ME ADMIN!")
  250. except Exception as e:
  251. await message.reply_text(str(e))
  252. # Pin Messages
  253. @app.on_message(filters.command("pin") & ~filters.edited)
  254. @capture_err
  255. async def pin(_, message):
  256. if not message.reply_to_message:
  257. await message.reply_text("Reply To A Message To Pin.")
  258. return
  259. try:
  260. admins = await list_admins(message.chat.id)
  261. chat_id = message.chat.id
  262. from_user_id = message.from_user.id
  263. if message.from_user.id in admins \
  264. or message.from_user.id in SUDO:
  265. if (await app.get_chat_member(chat_id,
  266. from_user_id)).can_pin_messages \
  267. or (await app.get_chat_member(chat_id, from_user_id)).status \
  268. == 'creator' \
  269. or message.from_user.id in SUDO:
  270. await message.reply_to_message.pin(disable_notification=True)
  271. else:
  272. await message.reply_text("You're Not An Admin, Stop Spamming!")
  273. except Exception as e:
  274. await message.reply_text(str(e))
  275. # Mute members
  276. @app.on_message(filters.command("mute") & ~filters.edited)
  277. @capture_err
  278. async def mute(_, message):
  279. try:
  280. chat_id = message.chat.id
  281. from_user_id = message.from_user.id
  282. if not message.reply_to_message:
  283. await message.reply_text("Reply To A User's Message!")
  284. return
  285. if (await app.get_chat_member(chat_id,
  286. from_user_id)).can_restrict_members \
  287. or (await app.get_chat_member(chat_id, from_user_id)).status \
  288. == 'creator' \
  289. or message.from_user.id in SUDO:
  290. victim = message.reply_to_message.from_user.id
  291. await message.chat.restrict_member(victim,
  292. permissions=ChatPermissions())
  293. await message.reply_text("Muted!")
  294. else:
  295. await message.reply_text("Get Yourself An Admin Tag!")
  296. except Exception as e:
  297. await message.reply_text(str(e))
  298. # Unmute members
  299. @app.on_message(filters.command("unmute") & ~filters.edited)
  300. @capture_err
  301. async def unmute(_, message):
  302. try:
  303. chat_id = message.chat.id
  304. from_user_id = message.from_user.id
  305. if not message.reply_to_message:
  306. await message.reply_text("Reply To A User's Message!")
  307. return
  308. if (await app.get_chat_member(chat_id,
  309. from_user_id)).can_restrict_members \
  310. or (await app.get_chat_member(chat_id, from_user_id)).status \
  311. == 'creator' \
  312. or message.from_user.id in SUDO:
  313. victim = message.reply_to_message.from_user.id
  314. await message.chat.unban_member(victim)
  315. await message.reply_text("Unmuted!")
  316. else:
  317. await message.reply_text("Get Yourself An Admin Tag!")
  318. except Exception as e:
  319. await message.reply_text(str(e))