dbfeds.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. import pytz
  2. from datetime import datetime
  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 == 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. {"$push": {"chat_ids": {"chat_id": int(chat_id), "chat_name": chat_name}}},
  67. )
  68. async def chat_leave_fed(chat_id):
  69. result = await fedsdb.update_one(
  70. {"chat_ids.chat_id": int(chat_id)},
  71. {"$pull": {"chat_ids": {"chat_id": int(chat_id)}}},
  72. )
  73. if result.modified_count > 0:
  74. return True
  75. else:
  76. return False
  77. async def user_join_fed(fed_id, user_id):
  78. result = await fedsdb.update_one(
  79. {"fed_id": fed_id}, {"$addToSet": {"fadmins": int(user_id)}}, upsert=True
  80. )
  81. if result.modified_count > 0:
  82. return True
  83. else:
  84. return False
  85. async def user_demote_fed(fed_id, user_id):
  86. result = await fedsdb.update_one(
  87. {"fed_id": fed_id}, {"$pull": {"fadmins": int(user_id)}}
  88. )
  89. if result.modified_count > 0:
  90. return True
  91. else:
  92. return False
  93. async def search_user_in_fed(fed_id, user_id):
  94. getfed = await search_fed_by_id(fed_id)
  95. if getfed is None:
  96. return False
  97. fadmins = getfed["fadmins"]
  98. if user_id in fadmins:
  99. return True
  100. else:
  101. return False
  102. async def chat_id_and_names_in_fed(fed_id):
  103. getfed = await search_fed_by_id(fed_id)
  104. if getfed is None or "chat_ids" not in getfed:
  105. return [], []
  106. chat_ids = [chat["chat_id"] for chat in getfed["chat_ids"]]
  107. chat_names = [chat["chat_name"] for chat in getfed["chat_ids"]]
  108. return chat_ids, chat_names
  109. async def add_fban_user(fed_id, user_id, reason):
  110. current_date = datetime.now(pytz.timezone("Asia/Kolkata")).strftime(
  111. "%Y-%m-%d %H:%M"
  112. )
  113. await fedsdb.update_one(
  114. {"fed_id": fed_id},
  115. {
  116. "$push": {
  117. "banned_users": {
  118. "user_id": int(user_id),
  119. "reason": reason,
  120. "date": current_date,
  121. }
  122. }
  123. },
  124. upsert=True,
  125. )
  126. async def remove_fban_user(fed_id, user_id):
  127. await fedsdb.update_one(
  128. {"fed_id": fed_id}, {"$pull": {"banned_users": {"user_id": int(user_id)}}}
  129. )
  130. async def check_banned_user(fed_id, user_id):
  131. result = await fedsdb.find_one({"fed_id": fed_id, "banned_users.user_id": user_id})
  132. if result and "banned_users" in result:
  133. for user in result["banned_users"]:
  134. if user.get("user_id") == user_id:
  135. return {"reason": user.get("reason"), "date": user.get("date")}
  136. return False