dbfunctions.py 10 KB

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