admin.py 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  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. /demote - Demote A Member
  15. /promote - Promote A Member
  16. /pin - Pin A Message
  17. /unpin - Unpin A Message'''
  18. SUDO = [OWNER_ID, SUDO_USER_ID]
  19. # Get List Of Admins In A Chat
  20. async def list_admins(group_id):
  21. list_of_admins = []
  22. async for member in app.iter_chat_members(
  23. group_id, filter="administrators"):
  24. list_of_admins.append(member.user.id)
  25. return list_of_admins
  26. # Get List Of Members In A Chat
  27. async def list_members(group_id):
  28. list_of_members = []
  29. async for member in app.iter_chat_members(group_id):
  30. list_of_members.append(member.user.id)
  31. return list_of_members
  32. # Purge Messages
  33. @app.on_message(cust_filter.command(commands=("purge")) & ~filters.edited)
  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. async def kick(_, message: Message):
  77. try:
  78. username = (message.text.split(None, 2)[1])
  79. except IndexError:
  80. username = ""
  81. if (await app.get_chat_member(
  82. message.chat.id, message.from_user.id)).status == 'creator' \
  83. or (await app.get_chat_member(
  84. message.chat.id, message.from_user.id)).can_restrict_members \
  85. is True or message.from_user.id in SUDO:
  86. if username != "":
  87. if username in SUDO or (await app.get_users(username)).id in SUDO:
  88. await message.reply_text("You Wanna Kick The Elevated One?")
  89. else:
  90. if (await app.get_users(username)).id in \
  91. await list_members(message.chat.id):
  92. await message.chat.kick_member(username)
  93. await message.chat.unban_member(username)
  94. await message.reply_text(f"Kicked {username}")
  95. else:
  96. await message.reply_text("This user isn't here,"
  97. " consider kicking yourself.")
  98. else:
  99. if username in SUDO or message.reply_to_message.from_user.id \
  100. in SUDO:
  101. await message.reply_text("You Wanna Kick The Elevated One?")
  102. else:
  103. if message.reply_to_message.from_user.id in \
  104. await list_members(message.chat.id):
  105. user_id = message.reply_to_message.from_user.id
  106. await message.reply_to_message.chat.kick_member(user_id)
  107. await message.reply_to_message.chat.unban_member(user_id)
  108. await message.reply_text(f"Kicked {username}")
  109. else:
  110. await message.reply_text("This user isn't here,"
  111. " consider kicking yourself.")
  112. # Ban members
  113. @app.on_message(cust_filter.command(commands=("ban")) & ~filters.edited)
  114. async def ban(_, message: Message):
  115. try:
  116. username = (message.text.split(None, 2)[1])
  117. except IndexError:
  118. username = ""
  119. if (await app.get_chat_member(
  120. message.chat.id, message.from_user.id)).status == 'creator' \
  121. or (await app.get_chat_member(
  122. message.chat.id, message.from_user.id)).can_restrict_members \
  123. is True or message.from_user.id in SUDO:
  124. if username != "":
  125. if username in SUDO or (await app.get_users(username)).id in SUDO:
  126. await message.reply_text("You Wanna Ban The Elevated One?")
  127. else:
  128. if (await app.get_users(username)).id in \
  129. await list_members(message.chat.id):
  130. await message.chat.kick_member(username)
  131. await message.reply_text(f"Banned {username}")
  132. else:
  133. await message.reply_text("This user isn't here,"
  134. " consider banning yourself.")
  135. else:
  136. if username in SUDO or message.reply_to_message.from_user.id \
  137. in SUDO:
  138. await message.reply_text("You Wanna Ban The Elevated One?")
  139. else:
  140. if (await app.get_users(username)).id in \
  141. await list_members(message.chat.id):
  142. user_id = message.reply_to_message.from_user.id
  143. await message.reply_to_message.chat.kick_member(user_id)
  144. await message.reply_text(f"Banned {username}")
  145. else:
  146. await message.reply_text("This user isn't here,"
  147. " consider kicking yourself.")
  148. # Unban members
  149. @app.on_message(cust_filter.command(commands=("unban")) & ~filters.edited)
  150. async def unban(_, message: Message):
  151. try:
  152. username = (message.text.split(None, 2)[1])
  153. except IndexError:
  154. username = ""
  155. if (await app.get_chat_member(
  156. message.chat.id, message.from_user.id)).status == 'creator' \
  157. or (await app.get_chat_member(
  158. message.chat.id, message.from_user.id)).can_restrict_members \
  159. is True or message.from_user.id in SUDO:
  160. if username != "":
  161. if (await app.get_users(username)).id not in \
  162. await list_members(message.chat.id):
  163. await message.chat.unban_member(username)
  164. await message.reply_text(f"Unbanned {username}")
  165. else:
  166. await message.reply_text("This user is already here,"
  167. " don't bully me!")
  168. else:
  169. if (await app.get_users(username)).id not in \
  170. await list_members(message.chat.id):
  171. user_id = message.reply_to_message.from_user.id
  172. await message.reply_to_message.chat.unban_member(user_id)
  173. await message.reply_text(f"Unbanned {username}")
  174. else:
  175. await message.reply_text("This user is already here,"
  176. " don't bully me!")
  177. # Kick members on their own call
  178. @app.on_message(cust_filter.command(commands=("kickme")) & ~filters.edited)
  179. async def kickme(_, message: Message):
  180. if message.from_user.id not in SUDO:
  181. await message.chat.kick_member(message.from_user.id)
  182. await message.chat.unban_member(message.from_user.id)
  183. await message.reply_text("Kicked!, Joke's on you, I'm into that shit!")
  184. else:
  185. await message.reply_text("It doesn't works that way mate.")
  186. # Ban members on their own call
  187. @app.on_message(cust_filter.command(commands=("banme")))
  188. async def banme(_, message: Message):
  189. if message.from_user.id not in SUDO:
  190. await message.chat.kick_member(message.from_user.id)
  191. await message.reply_text("Banned!, Joke's on you, I'm into that shit!")
  192. else:
  193. await message.reply_text("It doesn't works that way mate.")
  194. # Delete messages
  195. @app.on_message(cust_filter.command(commands=("del")))
  196. async def delete(_, message: Message):
  197. admins = await list_admins(message.chat.id)
  198. chat_id = message.chat.id
  199. from_user_id = message.from_user.id
  200. if message.from_user.id in admins \
  201. or message.from_user.id in SUDO:
  202. if (await app.get_chat_member(chat_id,
  203. from_user_id)).can_delete_messages \
  204. or (await app.get_chat_member(chat_id, from_user_id)).status \
  205. == 'creator' \
  206. or message.from_user.id in SUDO:
  207. await message.reply_to_message.delete()
  208. await message.delete()
  209. else:
  210. await message.reply_text("You Don't Have Enough Permissions,"
  211. + " Consider Deleting Yourself!")
  212. # Promote Members
  213. @app.on_message(cust_filter.command(commands=("promote")) & ~filters.edited)
  214. async def promote(_, message: Message):
  215. admins = await list_admins(message.chat.id)
  216. chat_id = message.chat.id
  217. from_user_id = message.from_user.id
  218. if (await app.get_chat_member(chat_id,
  219. BOT_ID)).can_promote_members:
  220. if message.from_user.id in admins \
  221. or message.from_user.id in SUDO:
  222. if (await app.get_chat_member(chat_id,
  223. from_user_id)).can_promote_members \
  224. or (await app.get_chat_member(chat_id, from_user_id)).status \
  225. == 'creator' \
  226. or message.from_user.id in SUDO:
  227. if message.text != '/promote':
  228. username = message.text.replace('/promote', '')
  229. user_id = (await app.get_users(username)).id
  230. await message.chat.promote_member(
  231. user_id=user_id,
  232. can_change_info=True,
  233. can_invite_users=True,
  234. can_restrict_members=True,
  235. can_delete_messages=True,
  236. can_pin_messages=True,
  237. can_promote_members=True)
  238. await message.reply_text('Promoted!')
  239. else:
  240. user_id = message.reply_to_message.from_user.id
  241. await message.chat.promote_member(
  242. user_id=user_id,
  243. can_change_info=True,
  244. can_invite_users=True,
  245. can_restrict_members=True,
  246. can_delete_messages=True,
  247. can_pin_messages=True,
  248. can_promote_members=True)
  249. await message.reply_text('Promoted!')
  250. else:
  251. await message.reply_text("Yeah, I Can See You're An Admin,"
  252. + " But You Don't Have Permissions"
  253. + " To Promote Someone.")
  254. else:
  255. await message.reply_text("You're Not An Admin, Want A Good Ban?")
  256. else:
  257. await message.reply_text("Well, Your Know What?, I'M NOT AN ADMIN!"
  258. + " MAKE ME ADMIN!")
  259. # Demote Members
  260. @app.on_message(cust_filter.command(commands=("demote")) & ~filters.edited)
  261. async def demote(_, message: Message):
  262. admins = await list_admins(message.chat.id)
  263. chat_id = message.chat.id
  264. from_user_id = message.from_user.id
  265. if (await app.get_chat_member(chat_id,
  266. BOT_ID)).can_promote_members:
  267. if message.from_user.id in admins \
  268. or message.from_user.id in SUDO:
  269. if (await app.get_chat_member(chat_id,
  270. from_user_id)).can_promote_members \
  271. or (await app.get_chat_member(chat_id, from_user_id)).status \
  272. == 'creator' \
  273. or message.from_user.id in SUDO:
  274. if message.text != '/demote':
  275. username = message.text.replace('/demote', '')
  276. user_id = (await app.get_users(username)).id
  277. await message.chat.promote_member(
  278. user_id=user_id,
  279. can_change_info=False,
  280. can_invite_users=False,
  281. can_restrict_members=False,
  282. can_delete_messages=False,
  283. can_pin_messages=False,
  284. can_promote_members=False)
  285. await message.reply_text('Promoted!')
  286. else:
  287. user_id = message.reply_to_message.from_user.id
  288. await message.chat.promote_member(
  289. user_id=user_id,
  290. can_change_info=False,
  291. can_invite_users=False,
  292. can_restrict_members=False,
  293. can_delete_messages=False,
  294. can_pin_messages=False,
  295. can_promote_members=False)
  296. await message.reply_text('Demoted!')
  297. else:
  298. await message.reply_text("Yeah, I Can See You're An Admin,"
  299. + " But You Don't Have Permissions"
  300. + " To Demote Someone.")
  301. else:
  302. await message.reply_text("You're Not An Admin, Want A Good Ban?")
  303. else:
  304. await message.reply_text("Well, Your Know What?, I'M NOT AN ADMIN!"
  305. + " MAKE ME ADMIN!")
  306. # Pin Messages
  307. @app.on_message(cust_filter.command(commands=("pin")) & ~filters.edited)
  308. async def pin(_, message: Message):
  309. admins = await list_admins(message.chat.id)
  310. chat_id = message.chat.id
  311. from_user_id = message.from_user.id
  312. if message.from_user.id in admins \
  313. or message.from_user.id in SUDO:
  314. if (await app.get_chat_member(chat_id,
  315. from_user_id)).can_pin_messages \
  316. or (await app.get_chat_member(chat_id, from_user_id)).status \
  317. == 'creator' \
  318. or message.from_user.id in SUDO:
  319. await message.reply_to_message.pin()
  320. else:
  321. await message.reply_text("You're Not An Admin, Stop Spamming!")
  322. # Unpin Messages
  323. @app.on_message(cust_filter.command(commands=("unpin")) & ~filters.edited)
  324. async def unpin(_, message: Message):
  325. admins = await list_admins(message.chat.id)
  326. chat_id = message.chat.id
  327. from_user_id = message.from_user.id
  328. if message.from_user.id in admins \
  329. or message.from_user.id in SUDO:
  330. if (await app.get_chat_member(chat_id,
  331. from_user_id)).can_pin_messages \
  332. or (await app.get_chat_member(chat_id, from_user_id)).status \
  333. == 'creator' \
  334. or message.from_user.id in SUDO:
  335. await app.unpin_chat_message(chat_id)
  336. else:
  337. await message.reply_text("You're Not An Admin, Stop Spamming!")