flash / Database /mongodb /karma_mongo.py
Karma
Add files via upload
c7dfe8b
raw
history blame
3.26 kB
from typing import Dict, Union
from pymongo import MongoClient
from Mikobot import DB_NAME, MONGO_DB_URI
client = MongoClient(MONGO_DB_URI)
db = client[DB_NAME]
coupledb = db.couple
karmadb = db.karma
async def _get_lovers(chat_id: int):
lovers = coupledb.find_one({"chat_id": chat_id})
if lovers:
lovers = lovers["couple"]
else:
lovers = {}
return lovers
async def get_couple(chat_id: int, date: str):
lovers = await _get_lovers(chat_id)
if date in lovers:
return lovers[date]
else:
return False
async def save_couple(chat_id: int, date: str, couple: dict):
lovers = await _get_lovers(chat_id)
lovers[date] = couple
coupledb.update_one({"chat_id": chat_id}, {"$set": {"couple": lovers}}, upsert=True)
async def get_karmas_count() -> dict:
chats = karmadb.find({"chat_id": {"$lt": 0}})
if not chats:
return {}
chats_count = 0
karmas_count = 0
for chat in await chats.to_list(length=1000000):
for i in chat["karma"]:
karma_ = chat["karma"][i]["karma"]
if karma_ > 0:
karmas_count += karma_
chats_count += 1
return {"chats_count": chats_count, "karmas_count": karmas_count}
async def user_global_karma(user_id) -> int:
chats = karmadb.find({"chat_id": {"$lt": 0}})
if not chats:
return 0
total_karma = 0
for chat in await chats.to_list(length=1000000):
karma = await get_karma(chat["chat_id"], await int_to_alpha(user_id))
if karma and (int(karma["karma"]) > 0):
total_karma += int(karma["karma"])
return total_karma
async def get_karmas(chat_id: int) -> Dict[str, int]:
karma = karmadb.find_one({"chat_id": chat_id})
if not karma:
return {}
return karma["karma"]
async def get_karma(chat_id: int, name: str) -> Union[bool, dict]:
name = name.lower().strip()
karmas = await get_karmas(chat_id)
if name in karmas:
return karmas[name]
async def update_karma(chat_id: int, name: str, karma: dict):
name = name.lower().strip()
karmas = await get_karmas(chat_id)
karmas[name] = karma
karmadb.update_one({"chat_id": chat_id}, {"$set": {"karma": karmas}}, upsert=True)
async def is_karma_on(chat_id: int) -> bool:
chat = karmadb.find_one({"chat_id_toggle": chat_id})
if not chat:
return True
return False
async def karma_on(chat_id: int):
is_karma = await is_karma_on(chat_id)
if is_karma:
return
return karmadb.delete_one({"chat_id_toggle": chat_id})
async def karma_off(chat_id: int):
is_karma = await is_karma_on(chat_id)
if not is_karma:
return
return karmadb.insert_one({"chat_id_toggle": chat_id})
async def int_to_alpha(user_id: int) -> str:
alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
text = ""
user_id = str(user_id)
for i in user_id:
text += alphabet[int(i)]
return text
async def alpha_to_int(user_id_alphabet: str) -> int:
alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
user_id = ""
for i in user_id_alphabet:
index = alphabet.index(i)
user_id += str(index)
user_id = int(user_id)
return user_id