diff --git a/ubot/command.py b/ubot/command.py index a549140..08379df 100644 --- a/ubot/command.py +++ b/ubot/command.py @@ -32,6 +32,7 @@ class Command: self.fun = args.get("fun", False) self.not_disableable = args.get("no_disable", False) or self.owner or self.sudo or self.admin self.no_private = args.get("no_private", False) + self.private_only = args.get("private_only", False) self.silent_bail = args.get("silent_bail", False) self.filter = args.get("filter", None) diff --git a/ubot/command_handler.py b/ubot/command_handler.py index c5a211c..8f349e5 100644 --- a/ubot/command_handler.py +++ b/ubot/command_handler.py @@ -316,7 +316,10 @@ class CommandHandler(): return (False, None) if event.is_private and command.no_private: - return (False, "That command can't be used in private!") + return (False, None if command.silent_bail else "That command can't be used in private!") + + if not event.is_private and command.private_only: + return (False, None if command.silent_bail else "That command can only be used in private!") if command.owner and not self.is_owner(event): return (False, None if command.silent_bail else "You lack the permissions to use that command!") diff --git a/ubot/database.py b/ubot/database.py index f6785d4..07f1940 100644 --- a/ubot/database.py +++ b/ubot/database.py @@ -155,6 +155,13 @@ class Database(): self.cached_chat_wrappers[chat_id] = (chat_db := ChatWrapper(chat)) return chat_db + # deletes the database entry associated with a given chat ID + def del_chat(self, chat_id: int) -> None: + if chat_id in self.cached_chat_wrappers: + del self.cached_chat_wrappers[chat_id] + + Chat.delete_by_id(chat_id) + # sudo functions def sudo_user(self, user_id: int): try: diff --git a/ubot/modules/system.py b/ubot/modules/system.py index f18a1e1..b55fb12 100644 --- a/ubot/modules/system.py +++ b/ubot/modules/system.py @@ -4,6 +4,8 @@ from telethon import Button from ubot import ldr +bot_name = ldr.settings.get_config("bot_name") or "bot" + @ldr.add("del", no_disable=True, help="Deletes messages from this bot, it's a safety feature.") async def delete_message(event): @@ -17,7 +19,7 @@ async def delete_message(event): async def start_cmd(event): await event.reply( f"Hi I'm {ldr.settings.get_config('bot_name') or 'μBot'}, use /help to see what commands I have!\n\n" - "You can toggle NSFW commands using /nsfw [on|off].", + "You can toggle NSFW commands using /nsfw [on|off] and view what I store using /privacy.", buttons=[Button.url("Creator", "https://t.me/Nick80835"), Button.url("Source", "https://github.com/Nick80835/microbot/tree/bot")] ) @@ -52,6 +54,28 @@ async def help_cmd(event): await event.reply(f"{prefix_help}Available commands:\n\n{help_string}", parse_mode="html") +@ldr.add("privacy") +async def privacy_policy(event): + await event.reply( + f"This bot (\"**{bot_name}**\") stores the IDs of chats in which it receives messages as well as configurations associated with those chats such as command prefixes and disabled commands. " + "This includes private 1-on-1 chats, private groups, public groups and channels.\n\n" + f"You may delete this chat (with ID `{event.chat.id}`) and data associated with it from my database using `{ldr.prefix()}clearconfig` if you have sufficient permissions. " + "If a message is received in this chat after the configuration for this chat is deleted, a new database entry for this chat will be created." + ) + + +@ldr.add("clearconfig", admin=True, hide_help=True, no_disable=True, no_private=True, silent_bail=True) +async def clear_config(event): + ldr.db.del_chat(event.chat.id) + await event.reply("Group config cleared.") + + +@ldr.add("clearconfig", no_disable=True, private_only=True, silent_bail=True) +async def clear_config_private(event): + ldr.db.del_chat(event.chat.id) + await event.reply("Private config cleared.") + + @ldr.add("prefix", admin=True, no_private=True) async def set_group_prefix(event): if not event.args: