dbfunctions.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  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. usersdb = db.users
  8. chatsdb = db.chats
  9. """ Notes functions """
  10. async def _get_notes(chat_id: int) -> Dict[str, int]:
  11. _notes = await notesdb.find_one({"chat_id": chat_id})
  12. if _notes:
  13. _notes = _notes["notes"]
  14. else:
  15. _notes = {}
  16. return _notes
  17. async def get_note_names(chat_id: int) -> List[str]:
  18. _notes = []
  19. for note in await _get_notes(chat_id):
  20. _notes.append(note)
  21. return _notes
  22. async def get_note(chat_id: int, name: str) -> Union[bool, dict]:
  23. name = name.lower().strip()
  24. _notes = await _get_notes(chat_id)
  25. if name in _notes:
  26. return _notes[name]
  27. else:
  28. return False
  29. async def save_note(chat_id: int, name: str, note: dict):
  30. name = name.lower().strip()
  31. _notes = await _get_notes(chat_id)
  32. _notes[name] = note
  33. await notesdb.update_one(
  34. {"chat_id": chat_id},
  35. {
  36. "$set": {
  37. "notes": _notes
  38. }
  39. },
  40. upsert=True
  41. )
  42. async def delete_note(chat_id: int, name: str) -> bool:
  43. notesd = await _get_notes(chat_id)
  44. name = name.lower().strip()
  45. if name in notesd:
  46. del notesd[name]
  47. await notesdb.update_one(
  48. {"chat_id": chat_id},
  49. {
  50. "$set": {
  51. "notes": notesd
  52. }
  53. },
  54. upsert=True
  55. )
  56. return True
  57. return False
  58. """ Filters funcions """
  59. async def _get_filters(chat_id: int) -> Dict[str, int]:
  60. _filters = await filtersdb.find_one({"chat_id": chat_id})
  61. if _filters:
  62. _filters = _filters['filters']
  63. else:
  64. _filters = {}
  65. return _filters
  66. async def get_filters_names(chat_id: int) -> List[str]:
  67. _filters = []
  68. for _filter in await _get_filters(chat_id):
  69. _filters.append(_filter)
  70. return _filters
  71. async def get_filter(chat_id: int, name: str) -> Union[bool, dict]:
  72. name = name.lower().strip()
  73. _filters = await _get_filters(chat_id)
  74. if name in _filters:
  75. return _filters[name]
  76. else:
  77. return False
  78. async def save_filter(chat_id: int, name: str, _filter: dict):
  79. name = name.lower().strip()
  80. _filters = await _get_filters(chat_id)
  81. _filters[name] = _filter
  82. await filtersdb.update_one(
  83. {"chat_id": chat_id},
  84. {
  85. "$set": {
  86. "filters": _filters
  87. }
  88. },
  89. upsert=True
  90. )
  91. async def delete_filter(chat_id: int, name: str) -> bool:
  92. filtersd = await _get_filters(chat_id)
  93. name = name.lower().strip()
  94. if name in filtersd:
  95. del filtersd[name]
  96. await filtersdb.update_one(
  97. {"chat_id": chat_id},
  98. {
  99. "$set": {
  100. "filters": filtersd
  101. }
  102. },
  103. upsert=True
  104. )
  105. return True
  106. return False
  107. """ Warn functions """
  108. async def int_to_alpha(user_id: int) -> str:
  109. alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
  110. text = ""
  111. user_id = str(user_id)
  112. for i in user_id:
  113. text += alphabet[int(i)]
  114. return text
  115. async def int_to_alpha_chat(chat_id: int) -> str:
  116. alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
  117. text = ""
  118. chat_id = str(chat_id)
  119. chat_id = chat_id.replace("-", "")
  120. for i in chat_id:
  121. text += alphabet[int(i)]
  122. return text
  123. async def alpha_to_int(user_id_alphabet: str) -> int:
  124. alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
  125. user_id = ""
  126. for i in user_id_alphabet:
  127. index = alphabet.index(i)
  128. user_id += str(index)
  129. user_id = int(user_id)
  130. return user_id
  131. async def alpha_to_int_chat(chat_id_alphabet: str) -> int:
  132. alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
  133. chat_id = "-"
  134. for i in chat_id_alphabet:
  135. index = alphabet.index(i)
  136. chat_id += str(index)
  137. chat_id = int(chat_id)
  138. return chat_id
  139. async def get_warns(chat_id: int) -> Dict[str, int]:
  140. warns = await warnsdb.find_one({"chat_id": chat_id})
  141. if warns:
  142. warns = warns['warns']
  143. else:
  144. warns = {}
  145. return warns
  146. async def get_warn(chat_id: int, name: str) -> Union[bool, dict]:
  147. name = name.lower().strip()
  148. warns = await get_warns(chat_id)
  149. if name in warns:
  150. return warns[name]
  151. async def add_warn(chat_id: int, name: str, warn: dict):
  152. name = name.lower().strip()
  153. warns = await get_warns(chat_id)
  154. warns[name] = warn
  155. await warnsdb.update_one(
  156. {"chat_id": chat_id},
  157. {
  158. "$set": {
  159. "warns": warns
  160. }
  161. },
  162. upsert=True
  163. )
  164. async def remove_warns(chat_id: int, name: str) -> bool:
  165. warnsd = await get_warns(chat_id)
  166. name = name.lower().strip()
  167. if name in warnsd:
  168. del warnsd[name]
  169. await warnsdb.update_one(
  170. {"chat_id": chat_id},
  171. {
  172. "$set": {
  173. "warns": warnsd
  174. }
  175. },
  176. upsert=True
  177. )
  178. return True
  179. return False
  180. """ Karma functions """
  181. async def get_karmas(chat_id: int) -> Dict[str, int]:
  182. karma = await karmadb.find_one({"chat_id": chat_id})
  183. if karma:
  184. karma = karma['karma']
  185. else:
  186. karma = {}
  187. return karma
  188. async def get_karma(chat_id: int, name: str) -> Union[bool, dict]:
  189. name = name.lower().strip()
  190. karmas = await get_karmas(chat_id)
  191. if name in karmas:
  192. return karmas[name]
  193. async def update_karma(chat_id: int, name: str, karma: dict):
  194. name = name.lower().strip()
  195. karmas = await get_karmas(chat_id)
  196. karmas[name] = karma
  197. await karmadb.update_one(
  198. {"chat_id": chat_id},
  199. {
  200. "$set": {
  201. "karma": karmas
  202. }
  203. },
  204. upsert=True
  205. )
  206. """ Chats log functions """
  207. async def is_served_chat(chat_id: int) -> bool:
  208. chats = await chatsdb.find_one({"chats": "chats"})
  209. if not chats: return False
  210. chats = chats['chats']
  211. for chat in chats:
  212. if chat == await int_to_alpha_chat(chat_id): return True
  213. async def get_served_chats():
  214. chats = await chatsdb.find_one({"chats": "chats"})
  215. if not chats: return {}
  216. chats = chats['chats']
  217. return chats
  218. async def add_served_chat(chat_id: int):
  219. is_served = await is_served_chat(chat_id)
  220. if is_served: return
  221. chats = await get_served_chats()
  222. chats[await int_to_alpha_chat(chat_id)] = {"chat_id": chat_id}
  223. await chatsdb.update_one(
  224. {"chats": "chats"},
  225. {
  226. "$set": {
  227. "chats": chats
  228. }
  229. },
  230. upsert=True
  231. )
  232. async def remove_served_chat(chat_id: int):
  233. is_served = await is_served_chat(chat_id)
  234. if not is_served: return
  235. chats = await get_served_chats()
  236. del chats[await int_to_alpha_chat(chat_id)]
  237. await chatsdb.update_one(
  238. {"chats": "chats"},
  239. {
  240. "$set": {
  241. "chats": chats
  242. }
  243. },
  244. upsert=True
  245. )