admin.py 15 KB

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