dbfunctions.py 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. from wbb import db
  2. from typing import Dict, List, Union
  3. notesdb = db.notes
  4. filtersdb = db.filters
  5. warnsdb = db.warns
  6. karmadb = db.karma
  7. chatsdb = db.chats
  8. gbansdb = db.gban
  9. coupledb = db.couple
  10. """ Notes functions """
  11. async def get_notes_count() -> dict:
  12. chats = notesdb.find({"chat_id": {"$lt": 0}})
  13. if not chats:
  14. return {}
  15. chats_count = 0
  16. notes_count = 0
  17. for chat in await chats.to_list(length=1000000000):
  18. notes_name = await get_note_names(chat['chat_id'])
  19. notes_count += len(notes_name)
  20. chats_count += 1
  21. return {
  22. "chats_count": chats_count,
  23. "notes_count": notes_count
  24. }
  25. async def _get_notes(chat_id: int) -> Dict[str, int]:
  26. _notes = await notesdb.find_one({"chat_id": chat_id})
  27. if _notes:
  28. _notes = _notes["notes"]
  29. else:
  30. _notes = {}
  31. return _notes
  32. async def get_note_names(chat_id: int) -> List[str]:
  33. _notes = []
  34. for note in await _get_notes(chat_id):
  35. _notes.append(note)
  36. return _notes
  37. async def get_note(chat_id: int, name: str) -> Union[bool, dict]:
  38. name = name.lower().strip()
  39. _notes = await _get_notes(chat_id)
  40. if name in _notes:
  41. return _notes[name]
  42. else:
  43. return False
  44. async def save_note(chat_id: int, name: str, note: dict):
  45. name = name.lower().strip()
  46. _notes = await _get_notes(chat_id)
  47. _notes[name] = note
  48. await notesdb.update_one(
  49. {"chat_id": chat_id},
  50. {
  51. "$set": {
  52. "notes": _notes
  53. }
  54. },
  55. upsert=True
  56. )
  57. async def delete_note(chat_id: int, name: str) -> bool:
  58. notesd = await _get_notes(chat_id)
  59. name = name.lower().strip()
  60. if name in notesd:
  61. del notesd[name]
  62. await notesdb.update_one(
  63. {"chat_id": chat_id},
  64. {
  65. "$set": {
  66. "notes": notesd
  67. }
  68. },
  69. upsert=True
  70. )
  71. return True
  72. return False
  73. """ Filters funcions """
  74. async def get_filters_count() -> dict:
  75. chats = filtersdb.find({"chat_id": {"$lt": 0}})
  76. if not chats:
  77. return {}
  78. chats_count = 0
  79. filters_count = 0
  80. for chat in await chats.to_list(length=1000000000):
  81. filters_name = await get_filters_names(chat['chat_id'])
  82. filters_count += len(filters_name)
  83. chats_count += 1
  84. return {
  85. "chats_count": chats_count,
  86. "filters_count": filters_count
  87. }
  88. async def _get_filters(chat_id: int) -> Dict[str, int]:
  89. _filters = await filtersdb.find_one({"chat_id": chat_id})
  90. if _filters:
  91. _filters = _filters['filters']
  92. else:
  93. _filters = {}
  94. return _filters
  95. async def get_filters_names(chat_id: int) -> List[str]:
  96. _filters = []
  97. for _filter in await _get_filters(chat_id):
  98. _filters.append(_filter)
  99. return _filters
  100. async def get_filter(chat_id: int, name: str) -> Union[bool, dict]:
  101. name = name.lower().strip()
  102. _filters = await _get_filters(chat_id)
  103. if name in _filters:
  104. return _filters[name]
  105. else:
  106. return False
  107. async def save_filter(chat_id: int, name: str, _filter: dict):
  108. name = name.lower().strip()
  109. _filters = await _get_filters(chat_id)
  110. _filters[name] = _filter
  111. await filtersdb.update_one(
  112. {"chat_id": chat_id},
  113. {
  114. "$set": {
  115. "filters": _filters
  116. }
  117. },
  118. upsert=True
  119. )
  120. async def delete_filter(chat_id: int, name: str) -> bool:
  121. filtersd = await _get_filters(chat_id)
  122. name = name.lower().strip()
  123. if name in filtersd:
  124. del filtersd[name]
  125. await filtersdb.update_one(
  126. {"chat_id": chat_id},
  127. {
  128. "$set": {
  129. "filters": filtersd
  130. }
  131. },
  132. upsert=True
  133. )
  134. return True
  135. return False
  136. """ Warn functions """
  137. async def int_to_alpha(user_id: int) -> str:
  138. alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
  139. text = ""
  140. user_id = str(user_id)
  141. for i in user_id:
  142. text += alphabet[int(i)]
  143. return text
  144. async def alpha_to_int(user_id_alphabet: str) -> int:
  145. alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
  146. user_id = ""
  147. for i in user_id_alphabet:
  148. index = alphabet.index(i)
  149. user_id += str(index)
  150. user_id = int(user_id)
  151. return user_id
  152. async def get_warns_count() -> dict:
  153. chats = warnsdb.find({"chat_id": {"$lt": 0}})
  154. if not chats:
  155. return {}
  156. chats_count = 0
  157. warns_count = 0
  158. for chat in await chats.to_list(length=100000000):
  159. for user in chat['warns']:
  160. warns_count += chat['warns'][user]['warns']
  161. chats_count += 1
  162. return {
  163. "chats_count": chats_count,
  164. "warns_count": warns_count
  165. }
  166. async def get_warns(chat_id: int) -> Dict[str, int]:
  167. warns = await warnsdb.find_one({"chat_id": chat_id})
  168. if warns:
  169. warns = warns['warns']
  170. else:
  171. warns = {}
  172. return warns
  173. async def get_warn(chat_id: int, name: str) -> Union[bool, dict]:
  174. name = name.lower().strip()
  175. warns = await get_warns(chat_id)
  176. if name in warns:
  177. return warns[name]
  178. async def add_warn(chat_id: int, name: str, warn: dict):
  179. name = name.lower().strip()
  180. warns = await get_warns(chat_id)
  181. warns[name] = warn
  182. await warnsdb.update_one(
  183. {"chat_id": chat_id},
  184. {
  185. "$set": {
  186. "warns": warns
  187. }
  188. },
  189. upsert=True
  190. )
  191. async def remove_warns(chat_id: int, name: str) -> bool:
  192. warnsd = await get_warns(chat_id)
  193. name = name.lower().strip()
  194. if name in warnsd:
  195. del warnsd[name]
  196. await warnsdb.update_one(
  197. {"chat_id": chat_id},
  198. {
  199. "$set": {
  200. "warns": warnsd
  201. }
  202. },
  203. upsert=True
  204. )
  205. return True
  206. return False
  207. """ Karma functions """
  208. async def get_karmas_count() -> dict:
  209. chats = karmadb.find({"chat_id": {"$lt": 0}})
  210. if not chats:
  211. return {}
  212. chats_count = 0
  213. karmas_count = 0
  214. for chat in await chats.to_list(length=1000000):
  215. for i in chat['karma']:
  216. karmas_count += chat['karma'][i]['karma']
  217. chats_count += 1
  218. return {
  219. "chats_count": chats_count,
  220. "karmas_count": karmas_count
  221. }
  222. async def get_karmas(chat_id: int) -> Dict[str, int]:
  223. karma = await karmadb.find_one({"chat_id": chat_id})
  224. if karma:
  225. karma = karma['karma']
  226. else:
  227. karma = {}
  228. return karma
  229. async def get_karma(chat_id: int, name: str) -> Union[bool, dict]:
  230. name = name.lower().strip()
  231. karmas = await get_karmas(chat_id)
  232. if name in karmas:
  233. return karmas[name]
  234. async def update_karma(chat_id: int, name: str, karma: dict):
  235. name = name.lower().strip()
  236. karmas = await get_karmas(chat_id)
  237. karmas[name] = karma
  238. await karmadb.update_one(
  239. {"chat_id": chat_id},
  240. {
  241. "$set": {
  242. "karma": karmas
  243. }
  244. },
  245. upsert=True
  246. )
  247. """ Chats log functions """
  248. async def is_served_chat(chat_id: int) -> bool:
  249. chat = await chatsdb.find_one({"chat_id": chat_id})
  250. if not chat:
  251. return False
  252. return True
  253. async def get_served_chats() -> list:
  254. chats = chatsdb.find({"chat_id": {'$lt': 0}})
  255. if not chats:
  256. return []
  257. chats_list = []
  258. for chat in await chats.to_list(length=1000000000):
  259. chats_list.append(chat)
  260. return chats_list
  261. async def add_served_chat(chat_id: int):
  262. is_served = await is_served_chat(chat_id)
  263. if is_served:
  264. return
  265. return await chatsdb.insert_one({"chat_id": chat_id})
  266. async def remove_served_chat(chat_id: int):
  267. is_served = await is_served_chat(chat_id)
  268. if not is_served:
  269. return
  270. return await chatsdb.delete_one({"chat_id": chat_id})
  271. """ Gban functions """
  272. async def get_gbans_count() -> int:
  273. users = gbansdb.find({"user_id": {"$gt": 0}})
  274. users = await users.to_list(length=100000)
  275. return len(users)
  276. async def is_gbanned_user(user_id: int) -> bool:
  277. user = await gbansdb.find_one({"user_id": user_id})
  278. if not user:
  279. return False
  280. return True
  281. async def add_gban_user(user_id: int):
  282. is_gbanned = await is_gbanned_user(user_id)
  283. if is_gbanned:
  284. return
  285. return await gbansdb.insert_one({"user_id": user_id})
  286. async def remove_gban_user(user_id: int):
  287. is_gbanned = await is_gbanned_user(user_id)
  288. if not is_gbanned:
  289. return
  290. return await gbansdb.delete_one({"user_id": user_id})
  291. # Couple Chooser
  292. async def _get_lovers(chat_id: int):
  293. lovers = await coupledb.find_one({"chat_id": chat_id})
  294. if lovers:
  295. lovers = lovers["couple"]
  296. else:
  297. lovers = {}
  298. return lovers
  299. async def get_couple(chat_id: int, date: str):
  300. lovers = await _get_lovers(chat_id)
  301. if date in lovers:
  302. return lovers[date]
  303. else:
  304. return False
  305. async def save_couple(chat_id: int, date: str, couple: dict):
  306. lovers = await _get_lovers(chat_id)
  307. lovers[date] = couple
  308. await coupledb.update_one(
  309. {"chat_id": chat_id},
  310. {
  311. "$set": {
  312. "couple": lovers
  313. }
  314. },
  315. upsert=True
  316. )