dbfeds.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. from datetime import datetime
  2. import pytz
  3. from wbb import SUDOERS, db
  4. fedsdb = db.feds
  5. def get_fed_info(fed_id):
  6. get = fedsdb.find_one({"fed_id": str(fed_id)})
  7. if get is None:
  8. return False
  9. return get
  10. async def get_fed_id(chat_id):
  11. get = await fedsdb.find_one({"chat_ids.chat_id": int(chat_id)})
  12. if get is None:
  13. return False
  14. else:
  15. for chat_info in get.get("chat_ids", []):
  16. if chat_info["chat_id"] == int(chat_id):
  17. return get["fed_id"]
  18. return False
  19. async def get_feds_by_owner(owner_id):
  20. cursor = fedsdb.find({"owner_id": owner_id})
  21. feds = await cursor.to_list(length=None)
  22. if not feds:
  23. return False
  24. federations = [
  25. {"fed_id": fed["fed_id"], "fed_name": fed["fed_name"]} for fed in feds
  26. ]
  27. return federations
  28. async def transfer_owner(fed_id, current_owner_id, new_owner_id):
  29. if await is_user_fed_owner(fed_id, current_owner_id):
  30. await fedsdb.update_one(
  31. {"fed_id": fed_id, "owner_id": current_owner_id},
  32. {"$set": {"owner_id": new_owner_id}},
  33. )
  34. return True
  35. else:
  36. return False
  37. async def set_log_chat(fed_id, log_group_id: int):
  38. await fedsdb.update_one(
  39. {"fed_id": fed_id}, {"$set": {"log_group_id": log_group_id}}
  40. )
  41. return
  42. async def get_fed_name(chat_id):
  43. get = await fedsdb.find_one(int(chat_id))
  44. if get is None:
  45. return False
  46. else:
  47. return get["fed_name"]
  48. async def is_user_fed_owner(fed_id, user_id: int):
  49. getfed = await get_fed_info(fed_id)
  50. if not getfed:
  51. return False
  52. owner_id = getfed["owner_id"]
  53. if user_id == owner_id or user_id in SUDOERS:
  54. return True
  55. else:
  56. return False
  57. async def search_fed_by_id(fed_id):
  58. get = await fedsdb.find_one({"fed_id": str(fed_id)})
  59. if get is not None:
  60. return get
  61. else:
  62. return False
  63. def chat_join_fed(fed_id, chat_name, chat_id):
  64. return fedsdb.update_one(
  65. {"fed_id": fed_id},
  66. {
  67. "$push": {
  68. "chat_ids": {"chat_id": int(chat_id), "chat_name": chat_name}
  69. }
  70. },
  71. )
  72. async def chat_leave_fed(chat_id):
  73. result = await fedsdb.update_one(
  74. {"chat_ids.chat_id": int(chat_id)},
  75. {"$pull": {"chat_ids": {"chat_id": int(chat_id)}}},
  76. )
  77. if result.modified_count > 0:
  78. return True
  79. else:
  80. return False
  81. async def user_join_fed(fed_id, user_id):
  82. result = await fedsdb.update_one(
  83. {"fed_id": fed_id},
  84. {"$addToSet": {"fadmins": int(user_id)}},
  85. upsert=True,
  86. )
  87. if result.modified_count > 0:
  88. return True
  89. else:
  90. return False
  91. async def user_demote_fed(fed_id, user_id):
  92. result = await fedsdb.update_one(
  93. {"fed_id": fed_id}, {"$pull": {"fadmins": int(user_id)}}
  94. )
  95. if result.modified_count > 0:
  96. return True
  97. else:
  98. return False
  99. async def search_user_in_fed(fed_id, user_id):
  100. getfed = await search_fed_by_id(fed_id)
  101. if getfed is None:
  102. return False
  103. fadmins = getfed["fadmins"]
  104. if user_id in fadmins:
  105. return True
  106. else:
  107. return False
  108. async def chat_id_and_names_in_fed(fed_id):
  109. getfed = await search_fed_by_id(fed_id)
  110. if getfed is None or "chat_ids" not in getfed:
  111. return [], []
  112. chat_ids = [chat["chat_id"] for chat in getfed["chat_ids"]]
  113. chat_names = [chat["chat_name"] for chat in getfed["chat_ids"]]
  114. return chat_ids, chat_names
  115. async def add_fban_user(fed_id, user_id, reason):
  116. current_date = datetime.now(pytz.timezone("Asia/Kolkata")).strftime(
  117. "%Y-%m-%d %H:%M"
  118. )
  119. await fedsdb.update_one(
  120. {"fed_id": fed_id},
  121. {
  122. "$push": {
  123. "banned_users": {
  124. "user_id": int(user_id),
  125. "reason": reason,
  126. "date": current_date,
  127. }
  128. }
  129. },
  130. upsert=True,
  131. )
  132. async def remove_fban_user(fed_id, user_id):
  133. await fedsdb.update_one(
  134. {"fed_id": fed_id},
  135. {"$pull": {"banned_users": {"user_id": int(user_id)}}},
  136. )
  137. async def check_banned_user(fed_id, user_id):
  138. result = await fedsdb.find_one(
  139. {"fed_id": fed_id, "banned_users.user_id": user_id}
  140. )
  141. if result and "banned_users" in result:
  142. for user in result["banned_users"]:
  143. if user.get("user_id") == user_id:
  144. return {"reason": user.get("reason"), "date": user.get("date")}
  145. return False
  146. async def get_user_fstatus(user_id):
  147. cursor = fedsdb.find({"banned_users.user_id": user_id})
  148. feds = await cursor.to_list(length=None)
  149. if not feds:
  150. return False
  151. federations = [
  152. {"fed_id": fed["fed_id"], "fed_name": fed["fed_name"]} for fed in feds
  153. ]
  154. return federations