admin.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  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. __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(cust_filter.command(commands=("purge")) & ~filters.edited)
  32. async def purge(client, message: Message):
  33. message_ids = []
  34. if message.chat.type not in ("supergroup", "channel"):
  35. return
  36. admins = await list_admins(message.chat.id)
  37. if message.from_user.id in admins \
  38. or message.from_user.id in SUDO:
  39. chat_id = message.chat.id
  40. from_user_id = message.from_user.id
  41. if (await app.get_chat_member(chat_id,
  42. from_user_id)).can_delete_messages \
  43. or (await app.get_chat_member(chat_id, from_user_id)).status \
  44. == 'creator' \
  45. or message.from_user.id in SUDO:
  46. if message.reply_to_message:
  47. for a_s_message_id in range(
  48. message.reply_to_message.message_id,
  49. message.message_id
  50. ):
  51. message_ids.append(a_s_message_id)
  52. if len(message_ids) == 100:
  53. await client.delete_messages(
  54. chat_id=message.chat.id,
  55. message_ids=message_ids,
  56. revoke=True
  57. )
  58. message_ids = []
  59. if len(message_ids) > 0:
  60. await client.delete_messages(
  61. chat_id=message.chat.id,
  62. message_ids=message_ids,
  63. revoke=True
  64. )
  65. else:
  66. await message.reply_text(
  67. "Reply To A Message To Delete It,"
  68. " Don't Make Fun Of Yourself!")
  69. else:
  70. await message.reply_text("Your Don't Have Enough Permissions!")
  71. await message.delete()
  72. # Kick members
  73. @app.on_message(cust_filter.command(commands=("kick")) & ~filters.edited)
  74. async def kick(_, message: Message):
  75. if (await app.get_chat_member(
  76. message.chat.id, message.from_user.id)).status == 'creator' \
  77. or (await app.get_chat_member(
  78. message.chat.id, message.from_user.id)).can_restrict_members \
  79. is True or message.from_user.id in SUDO:
  80. if len(message.command) == 2:
  81. username = (message.text.split(None, 1)[1])
  82. if (await app.get_users(username)).id in SUDO:
  83. await message.reply_text("You Wanna Kick The Elevated One?")
  84. else:
  85. if (await app.get_users(username)).id in \
  86. await list_members(message.chat.id):
  87. await message.chat.kick_member(username)
  88. await message.chat.unban_member(username)
  89. await message.reply_text(f"Kicked {username}")
  90. else:
  91. await message.reply_text("This user isn't here,"
  92. " consider kicking yourself.")
  93. if len(message.command) == 1 and message.reply_to_message:
  94. if message.reply_to_message.from_user.id in SUDO:
  95. await message.reply_text("You Wanna Kick The Elevated One?")
  96. else:
  97. if message.reply_to_message.from_user.id in \
  98. await list_members(message.chat.id):
  99. user_id = message.reply_to_message.from_user.id
  100. await message.reply_to_message.chat.kick_member(user_id)
  101. await message.reply_to_message.chat.unban_member(user_id)
  102. await message.reply_text("Kicked!")
  103. else:
  104. await message.reply_text("This user isn't here.")
  105. # Ban members
  106. @app.on_message(cust_filter.command(commands=("ban")) & ~filters.edited)
  107. async def ban(_, message: Message):
  108. if (await app.get_chat_member(
  109. message.chat.id, message.from_user.id)).status == 'creator' \
  110. or (await app.get_chat_member(
  111. message.chat.id, message.from_user.id)).can_restrict_members \
  112. is True or message.from_user.id in SUDO:
  113. if len(message.command) == 2:
  114. username = (message.text.split(None, 1)[1])
  115. if (await app.get_users(username)).id in SUDO:
  116. await message.reply_text("You Wanna Ban The Elevated One?")
  117. else:
  118. if (await app.get_users(username)).id in \
  119. await list_members(message.chat.id):
  120. await message.chat.kick_member(username)
  121. await message.reply_text(f"Banned! {username}")
  122. else:
  123. await message.reply_text("This user isn't here,"
  124. " consider banning yourself.")
  125. if len(message.command) == 1 and message.reply_to_message:
  126. if message.reply_to_message.from_user.id in SUDO:
  127. await message.reply_text("You Wanna Ban The Elevated One?")
  128. else:
  129. if message.reply_to_message.from_user.id in \
  130. await list_members(message.chat.id):
  131. user_id = message.reply_to_message.from_user.id
  132. await message.reply_to_message.chat.kick_member(user_id)
  133. await message.reply_text("Banned!")
  134. else:
  135. await message.reply_text("This user isn't here.")
  136. # Unban members
  137. @app.on_message(cust_filter.command(commands=("unban")) & ~filters.edited)
  138. async def unban(_, message: Message):
  139. if (await app.get_chat_member(
  140. message.chat.id, message.from_user.id)).status == 'creator' \
  141. or (await app.get_chat_member(
  142. message.chat.id, message.from_user.id)).can_restrict_members \
  143. is True or message.from_user.id in SUDO:
  144. if len(message.command) == 2:
  145. username = (message.text.split(None, 1)[1])
  146. if (await app.get_users(username)).id not in \
  147. await list_members(message.chat.id):
  148. await message.chat.unban_member(username)
  149. await message.reply_text(f"Unbanned! {username}")
  150. else:
  151. await message.reply_text("This user is already here,"
  152. " consider banning yourself.")
  153. if len(message.command) == 1 and message.reply_to_message:
  154. if message.reply_to_message.from_user.id not in \
  155. await list_members(message.chat.id):
  156. user_id = message.reply_to_message.from_user.id
  157. await message.chat.unban_member(user_id)
  158. await message.reply_text("Unbanned!")
  159. else:
  160. await message.reply_text("This user is already here.")
  161. # Delete messages
  162. @app.on_message(cust_filter.command(commands=("del")))
  163. async def delete(_, message: Message):
  164. admins = await list_admins(message.chat.id)
  165. chat_id = message.chat.id
  166. from_user_id = message.from_user.id
  167. if message.from_user.id in admins \
  168. or message.from_user.id in SUDO:
  169. if (await app.get_chat_member(chat_id,
  170. from_user_id)).can_delete_messages \
  171. or (await app.get_chat_member(chat_id, from_user_id)).status \
  172. == 'creator' \
  173. or message.from_user.id in SUDO:
  174. await message.reply_to_message.delete()
  175. await message.delete()
  176. else:
  177. await message.reply_text("You Don't Have Enough Permissions,"
  178. + " Consider Deleting Yourself!")
  179. # Promote Members
  180. @app.on_message(cust_filter.command(commands=("promote")) & ~filters.edited)
  181. async def promote(_, message: Message):
  182. admins = await list_admins(message.chat.id)
  183. chat_id = message.chat.id
  184. from_user_id = message.from_user.id
  185. if (await app.get_chat_member(chat_id,
  186. BOT_ID)).can_promote_members:
  187. if message.from_user.id in admins \
  188. or message.from_user.id in SUDO:
  189. if (await app.get_chat_member(chat_id,
  190. from_user_id)).can_promote_members \
  191. or (await app.get_chat_member(chat_id, from_user_id)).status \
  192. == 'creator' \
  193. or message.from_user.id in SUDO:
  194. if message.text != '/promote':
  195. username = message.text.replace('/promote', '')
  196. user_id = (await app.get_users(username)).id
  197. await message.chat.promote_member(
  198. user_id=user_id,
  199. can_change_info=True,
  200. can_invite_users=True,
  201. can_delete_messages=True)
  202. await message.reply_text('Promoted!')
  203. else:
  204. user_id = message.reply_to_message.from_user.id
  205. await message.chat.promote_member(
  206. user_id=user_id,
  207. can_change_info=True,
  208. can_invite_users=True,
  209. can_delete_messages=True)
  210. await message.reply_text('Promoted!')
  211. else:
  212. await message.reply_text("Yeah, I Can See You're An Admin,"
  213. + " But You Don't Have Permissions"
  214. + " To Promote Someone.")
  215. else:
  216. await message.reply_text("You're Not An Admin, Want A Good Ban?")
  217. else:
  218. await message.reply_text("Well, Your Know What?, I'M NOT AN ADMIN!"
  219. + " MAKE ME ADMIN!")
  220. # Pin Messages
  221. @app.on_message(cust_filter.command(commands=("pin")) & ~filters.edited)
  222. async def pin(_, message: Message):
  223. admins = await list_admins(message.chat.id)
  224. chat_id = message.chat.id
  225. from_user_id = message.from_user.id
  226. if message.from_user.id in admins \
  227. or message.from_user.id in SUDO:
  228. if (await app.get_chat_member(chat_id,
  229. from_user_id)).can_pin_messages \
  230. or (await app.get_chat_member(chat_id, from_user_id)).status \
  231. == 'creator' \
  232. or message.from_user.id in SUDO:
  233. await message.reply_to_message.pin(disable_notification=True)
  234. else:
  235. await message.reply_text("You're Not An Admin, Stop Spamming!")
  236. # Mute members
  237. @app.on_message(cust_filter.command(commands=("mute")) & ~filters.edited)
  238. async def mute(_, message: Message):
  239. chat_id = message.chat.id
  240. from_user_id = message.from_user.id
  241. if not message.reply_to_message:
  242. await message.reply_text("Reply To A User's Message!")
  243. return
  244. if (await app.get_chat_member(chat_id,
  245. from_user_id)).can_restrict_members \
  246. or (await app.get_chat_member(chat_id, from_user_id)).status \
  247. == 'creator' \
  248. or message.from_user.id in SUDO:
  249. victim = message.reply_to_message.from_user.id
  250. await message.chat.restrict_member(victim,
  251. permissions=ChatPermissions())
  252. await message.reply_text("Muted!")
  253. else:
  254. await message.reply_text("Get Yourself An Admin Tag!")
  255. # Unmute members
  256. @app.on_message(cust_filter.command(commands=("unmute")) & ~filters.edited)
  257. async def unmute(_, message: Message):
  258. chat_id = message.chat.id
  259. from_user_id = message.from_user.id
  260. if not message.reply_to_message:
  261. await message.reply_text("Reply To A User's Message!")
  262. return
  263. if (await app.get_chat_member(chat_id,
  264. from_user_id)).can_restrict_members \
  265. or (await app.get_chat_member(chat_id, from_user_id)).status \
  266. == 'creator' \
  267. or message.from_user.id in SUDO:
  268. victim = message.reply_to_message.from_user.id
  269. await message.chat.unban_member(victim)
  270. await message.reply_text("Unmuted!")
  271. else:
  272. await message.reply_text("Get Yourself An Admin Tag!")