admin.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. from pyrogram import filters
  2. from pyrogram.types import Message
  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. /banme - Bans A User Who Issued The Command
  13. /kickme - Kicks A User Who Issued The Command
  14. /promote - Promote A Member
  15. /pin - Pin A Message
  16. /unpin - Unpin A Message'''
  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. async def purge(client, message: 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(cust_filter.command(commands=("kick")) & ~filters.edited)
  75. async def kick(_, message: Message):
  76. try:
  77. username = (message.text.split(None, 2)[1])
  78. except IndexError:
  79. username = ""
  80. if (await app.get_chat_member(
  81. message.chat.id, message.from_user.id)).status == 'creator' \
  82. or (await app.get_chat_member(
  83. message.chat.id, message.from_user.id)).can_restrict_members \
  84. is True or message.from_user.id in SUDO:
  85. if username != "":
  86. if username in SUDO or (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. else:
  98. if username in SUDO or message.reply_to_message.from_user.id \
  99. in SUDO:
  100. await message.reply_text("You Wanna Kick The Elevated One?")
  101. else:
  102. if message.reply_to_message.from_user.id in \
  103. await list_members(message.chat.id):
  104. user_id = message.reply_to_message.from_user.id
  105. await message.reply_to_message.chat.kick_member(user_id)
  106. await message.reply_to_message.chat.unban_member(user_id)
  107. await message.reply_text(f"Kicked {username}")
  108. else:
  109. await message.reply_text("This user isn't here,"
  110. " consider kicking yourself.")
  111. # Ban members
  112. @app.on_message(cust_filter.command(commands=("ban")) & ~filters.edited)
  113. async def ban(_, message: Message):
  114. try:
  115. username = (message.text.split(None, 2)[1])
  116. except IndexError:
  117. username = ""
  118. if (await app.get_chat_member(
  119. message.chat.id, message.from_user.id)).status == 'creator' \
  120. or (await app.get_chat_member(
  121. message.chat.id, message.from_user.id)).can_restrict_members \
  122. is True or message.from_user.id in SUDO:
  123. if username != "":
  124. if username in SUDO or (await app.get_users(username)).id in SUDO:
  125. await message.reply_text("You Wanna Ban The Elevated One?")
  126. else:
  127. if (await app.get_users(username)).id in \
  128. await list_members(message.chat.id):
  129. await message.chat.kick_member(username)
  130. await message.reply_text(f"Banned {username}")
  131. else:
  132. await message.reply_text("This user isn't here,"
  133. " consider banning yourself.")
  134. else:
  135. if username in SUDO or message.reply_to_message.from_user.id \
  136. in SUDO:
  137. await message.reply_text("You Wanna Ban The Elevated One?")
  138. else:
  139. if (await app.get_users(username)).id in \
  140. await list_members(message.chat.id):
  141. user_id = message.reply_to_message.from_user.id
  142. await message.reply_to_message.chat.kick_member(user_id)
  143. await message.reply_text(f"Banned {username}")
  144. else:
  145. await message.reply_text("This user isn't here,"
  146. " consider kicking yourself.")
  147. # Unban members
  148. @app.on_message(cust_filter.command(commands=("unban")) & ~filters.edited)
  149. async def unban(_, message: Message):
  150. try:
  151. username = (message.text.split(None, 2)[1])
  152. except IndexError:
  153. username = ""
  154. if (await app.get_chat_member(
  155. message.chat.id, message.from_user.id)).status == 'creator' \
  156. or (await app.get_chat_member(
  157. message.chat.id, message.from_user.id)).can_restrict_members \
  158. is True or message.from_user.id in SUDO:
  159. if username != "":
  160. if (await app.get_users(username)).id not in \
  161. await list_members(message.chat.id):
  162. await message.chat.unban_member(username)
  163. await message.reply_text(f"Unbanned {username}")
  164. else:
  165. await message.reply_text("This user is already here,"
  166. " don't bully me!")
  167. else:
  168. if (await app.get_users(username)).id not in \
  169. await list_members(message.chat.id):
  170. user_id = message.reply_to_message.from_user.id
  171. await message.reply_to_message.chat.unban_member(user_id)
  172. await message.reply_text(f"Unbanned {username}")
  173. else:
  174. await message.reply_text("This user is already here,"
  175. " don't bully me!")
  176. # Kick members on their own call
  177. @app.on_message(cust_filter.command(commands=("kickme")) & ~filters.edited)
  178. async def kickme(_, message: Message):
  179. if message.from_user.id not in SUDO:
  180. await message.chat.kick_member(message.from_user.id)
  181. await message.chat.unban_member(message.from_user.id)
  182. await message.reply_text("Kicked!, Joke's on you, I'm into that shit!")
  183. else:
  184. await message.reply_text("It doesn't works that way mate.")
  185. # Ban members on their own call
  186. @app.on_message(cust_filter.command(commands=("banme")))
  187. async def banme(_, message: Message):
  188. if message.from_user.id not in SUDO:
  189. await message.chat.kick_member(message.from_user.id)
  190. await message.reply_text("Banned!, Joke's on you, I'm into that shit!")
  191. else:
  192. await message.reply_text("It doesn't works that way mate.")
  193. # Delete messages
  194. @app.on_message(cust_filter.command(commands=("del")))
  195. async def delete(_, message: Message):
  196. admins = await list_admins(message.chat.id)
  197. chat_id = message.chat.id
  198. from_user_id = message.from_user.id
  199. if message.from_user.id in admins \
  200. or message.from_user.id in SUDO:
  201. if (await app.get_chat_member(chat_id,
  202. from_user_id)).can_delete_messages \
  203. or (await app.get_chat_member(chat_id, from_user_id)).status \
  204. == 'creator' \
  205. or message.from_user.id in SUDO:
  206. await message.reply_to_message.delete()
  207. await message.delete()
  208. else:
  209. await message.reply_text("You Don't Have Enough Permissions,"
  210. + " Consider Deleting Yourself!")
  211. # Promote Members
  212. @app.on_message(cust_filter.command(commands=("promote")) & ~filters.edited)
  213. async def promote(_, message: Message):
  214. admins = await list_admins(message.chat.id)
  215. chat_id = message.chat.id
  216. from_user_id = message.from_user.id
  217. if (await app.get_chat_member(chat_id,
  218. BOT_ID)).can_promote_members:
  219. if message.from_user.id in admins \
  220. or message.from_user.id in SUDO:
  221. if (await app.get_chat_member(chat_id,
  222. from_user_id)).can_promote_members \
  223. or (await app.get_chat_member(chat_id, from_user_id)).status \
  224. == 'creator' \
  225. or message.from_user.id in SUDO:
  226. if message.text != '/promote':
  227. username = message.text.replace('/promote', '')
  228. user_id = (await app.get_users(username)).id
  229. await message.chat.promote_member(
  230. user_id=user_id,
  231. can_change_info=True,
  232. can_invite_users=True,
  233. can_restrict_members=True,
  234. can_delete_messages=True,
  235. can_pin_messages=True,
  236. can_promote_members=True)
  237. await message.reply_text('Promoted!')
  238. else:
  239. user_id = message.reply_to_message.from_user.id
  240. await message.chat.promote_member(
  241. user_id=user_id,
  242. can_change_info=True,
  243. can_invite_users=True,
  244. can_restrict_members=True,
  245. can_delete_messages=True,
  246. can_pin_messages=True,
  247. can_promote_members=True)
  248. await message.reply_text('Promoted!')
  249. else:
  250. await message.reply_text("Yeah, I Can See You're An Admin,"
  251. + " But You Don't Have Permissions"
  252. + " To Promote Someone.")
  253. else:
  254. await message.reply_text("You're Not An Admin, Want A Good Ban?")
  255. else:
  256. await message.reply_text("Well, Your Know What?, I'M NOT AN ADMIN!"
  257. + " MAKE ME ADMIN!")
  258. # Pin Messages
  259. @app.on_message(cust_filter.command(commands=("pin")) & ~filters.edited)
  260. async def pin(_, message: Message):
  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()
  272. else:
  273. await message.reply_text("You're Not An Admin, Stop Spamming!")
  274. # Unpin Messages
  275. @app.on_message(cust_filter.command(commands=("unpin")) & ~filters.edited)
  276. async def unpin(_, message: Message):
  277. admins = await list_admins(message.chat.id)
  278. chat_id = message.chat.id
  279. from_user_id = message.from_user.id
  280. if message.from_user.id in admins \
  281. or message.from_user.id in SUDO:
  282. if (await app.get_chat_member(chat_id,
  283. from_user_id)).can_pin_messages \
  284. or (await app.get_chat_member(chat_id, from_user_id)).status \
  285. == 'creator' \
  286. or message.from_user.id in SUDO:
  287. await app.unpin_all_chat_messages(chat_id)
  288. else:
  289. await message.reply_text("You're Not An Admin, Stop Spamming!")