admin.py 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. from pyrogram import filters
  2. from pyrogram.types import ChatPermissions
  3. from wbb import SUDOERS, app
  4. from wbb.utils.botinfo import BOT_ID
  5. from wbb.utils.errors import capture_err
  6. from wbb.utils.dbfunctions import add_warn, get_warn, remove_warns, int_to_alpha
  7. __MODULE__ = "Admin"
  8. __HELP__ = '''/ban - Ban A User
  9. /unban - Unban A User
  10. /warn - Warn A User
  11. /rmwarns - Remove All Warning of A User
  12. /warns - Show Warning Of A User
  13. /kick - Kick A User
  14. /purge - Purge Messages
  15. /del - Delete Replied Message
  16. /promote - Promote A Member
  17. /pin - Pin A Message
  18. /mute - Mute A User
  19. /unmute - Unmute A User
  20. /ban_ghosts - Ban Deleted Accounts
  21. /report | @admins - Report A Message To Admins.'''
  22. async def list_admins(group_id):
  23. list_of_admins = []
  24. async for member in app.iter_chat_members(
  25. group_id, filter="administrators"):
  26. list_of_admins.append(member.user.id)
  27. return list_of_admins
  28. async def member_permissions(chat_id, user_id):
  29. perms = []
  30. member = (await app.get_chat_member(chat_id, user_id))
  31. if member.can_post_messages:
  32. perms.append("can_post_messages")
  33. if member.can_edit_messages:
  34. perms.append("can_edit_messages")
  35. if member.can_delete_messages:
  36. perms.append("can_delete_messages")
  37. if member.can_restrict_members:
  38. perms.append("can_restrict_members")
  39. if member.can_promote_members:
  40. perms.append("can_promote_members")
  41. if member.can_change_info:
  42. perms.append("can_change_info")
  43. if member.can_invite_users:
  44. perms.append("can_invite_users")
  45. if member.can_pin_messages:
  46. perms.append("can_pin_messages")
  47. return perms
  48. # Get List Of Members In A Chat
  49. async def list_members(group_id):
  50. list_of_members = []
  51. async for member in app.iter_chat_members(group_id):
  52. list_of_members.append(member.user.id)
  53. return list_of_members
  54. # Purge Messages
  55. @app.on_message(filters.command("purge") & ~filters.edited)
  56. @capture_err
  57. async def purge(client, message):
  58. try:
  59. message_ids = []
  60. chat_id = message.chat.id
  61. user_id = message.from_user.id
  62. if message.chat.type not in ("supergroup", "channel"):
  63. return
  64. permissions = await member_permissions(chat_id, user_id)
  65. if "can_delete_messages" in permissions or user_id in SUDOERS:
  66. if message.reply_to_message:
  67. for a_s_message_id in range(
  68. message.reply_to_message.message_id,
  69. message.message_id
  70. ):
  71. message_ids.append(a_s_message_id)
  72. if len(message_ids) == 100:
  73. await client.delete_messages(chat_id=chat_id,
  74. message_ids=message_ids,
  75. revoke=True)
  76. message_ids = []
  77. if len(message_ids) > 0:
  78. await client.delete_messages(
  79. chat_id=chat_id,
  80. message_ids=message_ids,
  81. revoke=True
  82. )
  83. else:
  84. await message.reply_text(
  85. "Reply To A Message To Delete It,"
  86. " Don't Make Fun Of Yourself!")
  87. else:
  88. await message.reply_text("Your Don't Have Enough Permissions!")
  89. await message.delete()
  90. except Exception as e:
  91. print(e)
  92. await message.reply_text(e)
  93. # Kick members
  94. @app.on_message(filters.command("kick") & ~filters.edited)
  95. @capture_err
  96. async def kick(_, message):
  97. try:
  98. from_user_id = message.from_user.id
  99. chat_id = message.chat.id
  100. permissions = await member_permissions(chat_id, from_user_id)
  101. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  102. if len(message.command) == 2:
  103. username = message.text.split(None, 1)[1]
  104. if (await app.get_users(username)).id in SUDOERS:
  105. await message.reply_text("You Wanna Kick The Elevated One?")
  106. else:
  107. if (await app.get_users(username)).id in \
  108. await list_members(chat_id):
  109. await message.chat.kick_member(username)
  110. await message.chat.unban_member(username)
  111. await message.reply_text(f"Kicked {username}")
  112. else:
  113. await message.reply_text("This user isn't here,"
  114. " consider kicking yourself.")
  115. if len(message.command) == 1 and message.reply_to_message:
  116. user_id = message.reply_to_message.from_user.id
  117. if user_id in SUDOERS:
  118. await message.reply_text("You Wanna Kick The Elevated One?")
  119. else:
  120. if user_id in await list_members(chat_id):
  121. await message.reply_to_message.chat.kick_member(user_id)
  122. await message.reply_to_message.chat.unban_member(user_id)
  123. await message.reply_text("Kicked!")
  124. else:
  125. await message.reply_text("This user isn't here.")
  126. except Exception as e:
  127. print(e)
  128. await message.reply_text(e)
  129. # Ban members
  130. @app.on_message(filters.command("ban") & ~filters.edited)
  131. @capture_err
  132. async def ban(_, message):
  133. try:
  134. from_user_id = message.from_user.id
  135. chat_id = message.chat.id
  136. permissions = await member_permissions(chat_id, from_user_id)
  137. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  138. if len(message.command) == 2:
  139. username = message.text.split(None, 1)[1]
  140. if (await app.get_users(username)).id in SUDOERS:
  141. await message.reply_text("You Wanna Ban The Elevated One?")
  142. else:
  143. if (await app.get_users(username)).id in \
  144. await list_members(chat_id):
  145. await message.chat.kick_member(username)
  146. await message.reply_text(f"Banned! {username}")
  147. else:
  148. await message.reply_text("This user isn't here,"
  149. " consider banning yourself.")
  150. if len(message.command) == 1 and message.reply_to_message:
  151. user_id = message.reply_to_message.from_user.id
  152. if user_id in SUDOERS:
  153. await message.reply_text("You Wanna Ban The Elevated One?")
  154. else:
  155. if user_id in await list_members(chat_id):
  156. await message.reply_to_message.chat.kick_member(user_id)
  157. await message.reply_text("Banned!")
  158. else:
  159. await message.reply_text("This user isn't here.")
  160. except Exception as e:
  161. await message.reply_text(str(e))
  162. # Unban members
  163. @app.on_message(filters.command("unban") & ~filters.edited)
  164. @capture_err
  165. async def unban(_, message):
  166. try:
  167. from_user_id = message.from_user.id
  168. chat_id = message.chat.id
  169. permissions = await member_permissions(chat_id, from_user_id)
  170. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  171. if len(message.command) == 2:
  172. username = message.text.split(None, 1)[1]
  173. if (await app.get_users(username)).id not in \
  174. await list_members(message.chat.id):
  175. await message.chat.unban_member(username)
  176. await message.reply_text(f"Unbanned! {username}")
  177. else:
  178. await message.reply_text("This user is already here,"
  179. " consider banning yourself.")
  180. if len(message.command) == 1 and message.reply_to_message:
  181. user_id = message.reply_to_message.from_user.id
  182. if user_id not in \
  183. await list_members(chat_id):
  184. await message.chat.unban_member(user_id)
  185. await message.reply_text("Unbanned!")
  186. else:
  187. await message.reply_text("This user is already here.")
  188. except Exception as e:
  189. await message.reply_text(str(e))
  190. # Delete messages
  191. @app.on_message(filters.command("del") & ~filters.edited)
  192. @capture_err
  193. async def delete(_, message):
  194. if not message.reply_to_message:
  195. await message.reply_text("Reply To A Message To Delete It")
  196. return
  197. try:
  198. from_user_id = message.from_user.id
  199. chat_id = message.chat.id
  200. permissions = await member_permissions(chat_id, from_user_id)
  201. if "can_delete_messages" in permissions or from_user_id in SUDOERS:
  202. await message.reply_to_message.delete()
  203. await message.delete()
  204. else:
  205. await message.reply_text("You Don't Have Enough Permissions,"
  206. + " Consider Deleting Yourself!")
  207. except Exception as e:
  208. await message.reply_text(str(e))
  209. # Promote Members
  210. @app.on_message(filters.command("promote") & ~filters.edited)
  211. @capture_err
  212. async def promote(_, message):
  213. try:
  214. from_user_id = message.from_user.id
  215. chat_id = message.chat.id
  216. permissions = await member_permissions(chat_id, from_user_id)
  217. if "can_promote_members" in permissions or from_user_id in SUDOERS:
  218. if len(message.command) == 2:
  219. username = message.text.split(None, 1)[1]
  220. user_id = (await app.get_users(username)).id
  221. await message.chat.promote_member(
  222. user_id=user_id,
  223. can_change_info=True,
  224. can_invite_users=True,
  225. can_delete_messages=True,
  226. can_restrict_members=False,
  227. can_pin_messages=True,
  228. can_promote_members=True)
  229. await message.reply_text('Promoted!')
  230. elif len(message.command) == 1 and message.reply_to_message:
  231. user_id = message.reply_to_message.from_user.id
  232. await message.chat.promote_member(
  233. user_id=user_id,
  234. can_change_info=True,
  235. can_invite_users=True,
  236. can_delete_messages=True,
  237. can_restrict_members=False,
  238. can_pin_messages=True,
  239. can_promote_members=True)
  240. await message.reply_text('Promoted!')
  241. else:
  242. await message.reply_text("Reply To A User's Message Or Give A Username To Promote.")
  243. else:
  244. await message.reply_text("You're Not An Admin, Want A Good Ban?")
  245. except Exception as e:
  246. await message.reply_text(str(e))
  247. # Pin Messages
  248. @app.on_message(filters.command("pin") & ~filters.edited)
  249. @capture_err
  250. async def pin(_, message):
  251. if not message.reply_to_message:
  252. await message.reply_text("Reply To A Message To Pin.")
  253. return
  254. try:
  255. from_user_id = message.from_user.id
  256. chat_id = message.chat.id
  257. permissions = await member_permissions(chat_id, from_user_id)
  258. if "can_pin_messages" in permissions or from_user_id in SUDOERS:
  259. await message.reply_to_message.pin(disable_notification=True)
  260. else:
  261. await message.reply_text("You're Not An Admin, Stop Spamming!")
  262. except Exception as e:
  263. await message.reply_text(str(e))
  264. # Mute members
  265. @app.on_message(filters.command("mute") & ~filters.edited)
  266. @capture_err
  267. async def mute(_, message):
  268. if not message.reply_to_message:
  269. await message.reply_text("Reply To A User's Message!")
  270. return
  271. try:
  272. chat_id = message.chat.id
  273. from_user_id = message.from_user.id
  274. permissions = await member_permissions(chat_id, from_user_id)
  275. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  276. user_id = message.reply_to_message.from_user.id
  277. await message.chat.restrict_member(user_id,
  278. permissions=ChatPermissions())
  279. await message.reply_text("Muted!")
  280. else:
  281. await message.reply_text("Get Yourself An Admin Tag!")
  282. except Exception as e:
  283. await message.reply_text(str(e))
  284. # Unmute members
  285. @app.on_message(filters.command("unmute") & ~filters.edited)
  286. @capture_err
  287. async def unmute(_, message):
  288. if not message.reply_to_message:
  289. await message.reply_text("Reply To A User's Message!")
  290. return
  291. try:
  292. chat_id = message.chat.id
  293. from_user_id = message.from_user.id
  294. permissions = await member_permissions(chat_id, from_user_id)
  295. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  296. user_id = message.reply_to_message.from_user.id
  297. await message.chat.unban_member(user_id)
  298. await message.reply_text("Unmuted!")
  299. else:
  300. await message.reply_text("Get Yourself An Admin Tag!")
  301. except Exception as e:
  302. await message.reply_text(str(e))
  303. # Ban deleted accounts
  304. @app.on_message(filters.command("ban_ghosts"))
  305. async def ban_deleted_accounts(_, message):
  306. try:
  307. from_user_id = message.from_user.id
  308. chat_id = message.chat.id
  309. permissions = await member_permissions(chat_id, from_user_id)
  310. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  311. deleted_users = []
  312. banned_users = 0
  313. async for i in app.iter_chat_members(chat_id):
  314. if i.user.is_deleted:
  315. deleted_users.append(i.user.id)
  316. if len(deleted_users) > 0:
  317. for deleted_user in deleted_users:
  318. try:
  319. await message.chat.kick_member(deleted_user)
  320. except Exception as e:
  321. print(str(e))
  322. pass
  323. banned_users += 1
  324. await message.reply_text(f"Banned {banned_users} Deleted Accounts")
  325. else:
  326. await message.reply_text("No Deleted Accounts In This Chat")
  327. return
  328. else:
  329. await message.reply_text("You Don't Have Enough Permissions")
  330. except Exception as e:
  331. await message.reply_text(str(e))
  332. print(str(e))
  333. @app.on_message(filters.command("warn") & ~filters.edited)
  334. @capture_err
  335. async def warn_user(_, message):
  336. if not message.reply_to_message:
  337. await message.reply_text("Reply to a message to warn a user.")
  338. return
  339. try:
  340. from_user_id = message.from_user.id
  341. chat_id = message.chat.id
  342. permissions = await member_permissions(chat_id, from_user_id)
  343. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  344. user_id = message.reply_to_message.from_user.id
  345. mention = message.reply_to_message.from_user.mention
  346. if user_id in SUDOERS:
  347. await message.reply_text("You Wanna Warn The Elevated One?")
  348. elif user_id == BOT_ID:
  349. await message.reply_text("Huh, Can't warn myself.")
  350. elif user_id in await list_admins(message.chat.id):
  351. await message.reply_text("Can't warn an admin.")
  352. elif user_id == from_user_id:
  353. await message.reply_text("I wouldn't do that if i were you.")
  354. else:
  355. if user_id in await list_members(chat_id):
  356. warns = await get_warn(chat_id, await int_to_alpha(user_id))
  357. if warns:
  358. warns = warns['warns']
  359. else:
  360. warn = {"warns": 1}
  361. await add_warn(chat_id, await int_to_alpha(user_id), warn)
  362. await message.reply_text(f"Warned {mention} !, 1/3 warnings now.")
  363. return
  364. if warns >= 3:
  365. await message.chat.kick_member(user_id)
  366. await message.reply_text(f"Number of warns of {mention} exceeded, Banned!")
  367. await remove_warns(chat_id, await int_to_alpha(user_id))
  368. else:
  369. warn = {"warns": warns+1}
  370. await add_warn(chat_id, await int_to_alpha(user_id), warn)
  371. await message.reply_text(f"Warned {mention} !, {warns+1}/3 warnings now.")
  372. else:
  373. await message.reply_text("This user isn't here.")
  374. else:
  375. await message.reply_text("You don't have enough permissions.")
  376. except Exception as e:
  377. await message.reply_text(str(e))
  378. # Rmwarns
  379. @app.on_message(filters.command("rmwarns") & ~filters.edited)
  380. @capture_err
  381. async def remove_warnings(_, message):
  382. if not message.reply_to_message:
  383. await message.reply_text("Reply to a message to remove a user's warnings.")
  384. return
  385. try:
  386. from_user_id = message.from_user.id
  387. user_id = message.reply_to_message.from_user.id
  388. mention = message.reply_to_message.from_user.mention
  389. chat_id = message.chat.id
  390. permissions = await member_permissions(chat_id, from_user_id)
  391. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  392. warns = await get_warn(chat_id, await int_to_alpha(user_id))
  393. if warns:
  394. warns = warns['warns']
  395. if warns == 0 or not warns:
  396. await message.reply_text(f"{mention} have no warnings.")
  397. else:
  398. await remove_warns(chat_id, await int_to_alpha(user_id))
  399. await message.reply_text(f"Removed warnings of {mention}.")
  400. else:
  401. await message.reply_text("You don't have enough permissions")
  402. except Exception as e:
  403. await message.reply_text(str(e))
  404. # Warns
  405. @app.on_message(filters.command("warns") & ~filters.edited)
  406. @capture_err
  407. async def check_warns(_, message):
  408. if not message.reply_to_message:
  409. await message.reply_text("Reply to a message to check a user's warnings.")
  410. return
  411. try:
  412. user_id = message.reply_to_message.from_user.id
  413. mention_user = message.reply_to_message.from_user.mention
  414. mention_from_user = message.from_user.mention
  415. chat_id = message.chat.id
  416. if message.reply_to_message:
  417. warns = await get_warn(chat_id, await int_to_alpha(user_id))
  418. if warns:
  419. warns = warns['warns']
  420. else:
  421. await message.reply_text(f"{mention_user} have no warnings.")
  422. return
  423. await message.reply_text(f"{mention_user} have {warns}/3 warnings.")
  424. return
  425. warns = await get_warn(chat_id, await int_to_alpha(user_id))
  426. if warns:
  427. warns = warns['warns']
  428. else:
  429. await message.reply_text(f"{mention_user} have no warnings.")
  430. return
  431. await message.reply_text(f"{mention_from_user} have {warns}/3 warnings.")
  432. except Exception as e:
  433. await message.reply_text(str(e))
  434. # Report
  435. @app.on_message(filters.command(["report", "admins"], prefixes=["@", "/"]) & ~filters.edited)
  436. @capture_err
  437. async def report_user(_, message):
  438. if not message.reply_to_message:
  439. await message.reply_text("Reply to a message to report user.")
  440. return
  441. list_of_admins = await list_admins(message.chat.id)
  442. user_mention = message.reply_to_message.from_user.mention
  443. text = f"Reported {user_mention} to admins."
  444. for admin in list_of_admins:
  445. text += f"[\u2063](tg://user?id={admin})"
  446. await message.reply_text(text)