TheHamkerCat 5 vuotta sitten
vanhempi
sitoutus
770d750cc7
2 muutettua tiedostoa jossa 136 lisäystä ja 46 poistoa
  1. 30 14
      wbb/modules/admin.py
  2. 106 32
      wbb/utils/dbfunctions.py

+ 30 - 14
wbb/modules/admin.py

@@ -3,7 +3,7 @@ from pyrogram.types import ChatPermissions
 from wbb import OWNER_ID, SUDOERS, app
 from wbb.utils.botinfo import BOT_ID
 from wbb.utils.errors import capture_err
-#from wbb.utils.dbfunctions import add_warn, get_warns, remove_warns
+from wbb.utils.dbfunctions import add_warn, get_warn, remove_warns, int_to_alpha
 
 __MODULE__ = "Admin"
 __HELP__ = '''/ban - Ban A User
@@ -378,9 +378,6 @@ async def ban_deleted_accounts(_, message):
         await message.reply_text(str(e))
         print(str(e))
 
-"""
-# Warn
-
 
 @app.on_message(filters.command("warn") & ~filters.edited)
 @capture_err
@@ -397,14 +394,22 @@ async def warn_user(_, message):
                 await message.reply_text("You Wanna Warn The Elevated One?")
             else:
                 if user_id in await list_members(chat_id):
-                    warns = await get_warns(chat_id, user_id)
+                    warns = await get_warn(chat_id, await int_to_alpha(user_id))
+                    if warns:
+                        warns = warns['warns']
+                    else:
+                        warn = {"warns": 1}
+                        await add_warn(chat_id, await int_to_alpha(user_id), warn)
+                        await message.reply_text(f"Warned {mention} !, 1/3 warnings now.")
+                        return
                     if warns >= 3:
                         await message.chat.kick_member(user_id)
                         await message.reply_text(f"Number of warns of {mention} exceeded, Banned!")
-                        await remove_warns(chat_id, user_id)
+                        await remove_warns(chat_id, await int_to_alpha(user_id))
                     else:
-                        await add_warn(chat_id, user_id)
-                        await message.reply_text(f"Warned {mention}!, {warns}/3 warnings now.")
+                        warn = {"warns": warns+1}
+                        await add_warn(chat_id, await int_to_alpha(user_id), warn)
+                        await message.reply_text(f"Warned {mention} !, {warns+1}/3 warnings now.")
                 else:
                     await message.reply_text("This user isn't here.")
         else:
@@ -426,11 +431,13 @@ async def remove_warnings(_, message):
         permissions = await member_permissions(chat_id, from_user_id)
         if "can_restrict_members" in permissions or from_user_id in SUDOERS:
             if message.reply_to_message:
-                warns = await get_warns(chat_id, user_id)
-                if warns == 0:
+                warns = await get_warn(chat_id, await int_to_alpha(user_id))
+                if warns:
+                    warns = warns['warns']
+                if warns == 0 or not warns:
                     await message.reply_text(f"{mention} have no warnings.")
                 else:
-                    await remove_warns(chat_id, user_id)
+                    await remove_warns(chat_id, await int_to_alpha(user_id))
                     await message.reply_text(f"Removed warnings of {mention}.")
             else:
                 await message.reply_text("Reply to someone's message to remove Warnings")
@@ -453,11 +460,20 @@ async def check_warns(_, message):
         mention_from_user = message.from_user.mention
         chat_id = message.chat.id
         if message.reply_to_message:
-            warns = await get_warns(chat_id, user_id)
+            warns = await get_warn(chat_id, await int_to_alpha(user_id))
+            if warns:
+                warns = warns['warns']
+            else:
+                await message.reply_text(f"{mention_user} have no warnings.")
+                return
             await message.reply_text(f"{mention_user} have {warns}/3 warnings.")
             return
-        warns = await get_warns(chat_id, from_user_id)
+        warns = await get_warn(chat_id, await int_to_alpha(user_id))
+        if warns:
+            warns = warns['warns']
+        else:
+            await message.reply_text(f"{mention_user} have no warnings.")
+            return
         await message.reply_text(f"{mention__from_user} have {warns}/3 warnings.")
     except Exception as e:
         await message.reply_text(str(e))
-"""

+ 106 - 32
wbb/utils/dbfunctions.py

@@ -12,13 +12,31 @@ warnsdb = db.warns
 
 async def _get_notes(chat_id: int) -> Dict[str, int]:
     _notes = await notesdb.find_one({"chat_id": chat_id})
-    _notes = {} if not _notes else _notes["notes"]
+    if _notes:
+        _notes = _notes["notes"]
+    else:
+        _notes = {}
     return _notes
 
 
+async def get_note_names(chat_id: int) -> List[str]:
+    _notes = []
+    for note in await _get_notes(chat_id):
+        _notes.append(note)
+    return _notes
+
+
+async def get_note(chat_id: int, name: str) -> Union[bool, dict]:
+    name = name.lower().strip()
+    _notes = await _get_notes(chat_id)
+    if name in _notes:
+        return _notes[name]
+    else:
+        return False
+
+
 async def save_note(chat_id: int, name: str, note: dict):
-    name = name.lower()
-    name = name.strip()
+    name = name.lower().strip()
     _notes = await _get_notes(chat_id)
     _notes[name] = note
 
@@ -33,21 +51,9 @@ async def save_note(chat_id: int, name: str, note: dict):
     )
 
 
-async def get_note_names(
-    chat_id: int) -> List[str]: return [note for note in await _get_notes(chat_id)]
-
-
-async def get_note(chat_id: int, name: str) -> Union[bool, dict]:
-    name = name.lower()
-    name = name.strip()
-    _notes = await _get_notes(chat_id)
-    return _notes[name] if name in _notes else False
-
-
 async def delete_note(chat_id: int, name: str) -> bool:
     notesd = await _get_notes(chat_id)
-    name = name.lower()
-    name = name.strip()
+    name = name.lower().strip()
     if name in notesd:
         del notesd[name]
         await notesdb.update_one(
@@ -68,13 +74,31 @@ async def delete_note(chat_id: int, name: str) -> bool:
 
 async def _get_filters(chat_id: int) -> Dict[str, int]:
     _filters = await filtersdb.find_one({"chat_id": chat_id})
-    _filters = {} if not _filters else _filters["filters"]
+    if _filters:
+        _filters = _filters['filters']
+    else:
+        _filters = {}
+    return _filters
+
+
+async def get_filters_names(chat_id: int) -> List[str]:
+    _filters = []
+    for _filter in await _get_filters(chat_id):
+        _filters.append(_filter)
     return _filters
 
 
+async def get_filter(chat_id: int, name: str) -> Union[bool, dict]:
+    name = name.lower().strip()
+    _filters = await _get_filters(chat_id)
+    if name in _filters:
+        return _filters[name]
+    else:
+        return False
+
+
 async def save_filter(chat_id: int, name: str, _filter: dict):
-    name = name.lower()
-    name = name.strip()
+    name = name.lower().strip()
     _filters = await _get_filters(chat_id)
     _filters[name] = _filter
 
@@ -89,21 +113,9 @@ async def save_filter(chat_id: int, name: str, _filter: dict):
     )
 
 
-async def get_filters_names(
-    chat_id: int) -> List[str]: return [_filter for _filter in await _get_filters(chat_id)]
-
-
-async def get_filter(chat_id: int, name: str) -> Union[bool, dict]:
-    name = name.lower()
-    name = name.strip()
-    _filters = await _get_filters(chat_id)
-    return _filters[name] if name in _filters else False
-
-
 async def delete_filter(chat_id: int, name: str) -> bool:
     filtersd = await _get_filters(chat_id)
-    name = name.lower()
-    name = name.strip()
+    name = name.lower().strip()
     if name in filtersd:
         del filtersd[name]
         await filtersdb.update_one(
@@ -117,3 +129,65 @@ async def delete_filter(chat_id: int, name: str) -> bool:
         )
         return True
     return False
+
+
+""" Warn function """
+async def int_to_alpha(user_id):
+    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 get_warns(chat_id: int) -> Dict[str, int]:
+    warns = await warnsdb.find_one({"chat_id": chat_id})
+    if warns:
+        warns = warns['warns']
+    else:
+        warns = {}
+    return warns
+
+
+async def get_warn(chat_id: int, name: str) -> Union[bool, dict]:
+    name = name.lower().strip()
+    warns = await get_warns(chat_id)
+    if name in warns:
+        return warns[name]
+
+
+async def add_warn(chat_id: int, name: str, warn: dict):
+    name = name.lower().strip()
+    warns = await get_warns(chat_id)
+    warns[name] = warn
+
+    await warnsdb.update_one(
+        {"chat_id": chat_id},
+        {
+            "$set": {
+                "warns": warns
+            }
+        },
+        upsert=True
+    )
+
+
+async def remove_warns(chat_id: int, name: str) -> bool:
+    warnsd = await get_warns(chat_id)
+    name = name.lower().strip()
+    if name in warnsd:
+        del warnsd[name]
+        await warnsdb.update_one(
+            {"chat_id": chat_id},
+            {
+                "$set": {
+                    "warns": warnsd
+                }
+            },
+            upsert=True
+        )
+        return True
+    return False
+
+