dbfunctions.py 9.7 KB

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