diff --git a/examples/commands.json b/examples/commands.json new file mode 100644 index 0000000..8634ffa --- /dev/null +++ b/examples/commands.json @@ -0,0 +1,21 @@ +{ + "help": { + "scopes": [ + { + "name": "BotCommandScopeDefault" + }, + { + "name": "BotCommandScopeChat", + "chat_id": "owner" + } + ] + }, + "shutdown": { + "scopes": [ + { + "name": "BotCommandScopeChat", + "chat_id": "owner" + } + ] + } +} \ No newline at end of file diff --git a/examples/config.json b/examples/config.json new file mode 100644 index 0000000..7919804 --- /dev/null +++ b/examples/config.json @@ -0,0 +1,38 @@ +{ + "locale": "en", + "bot": { + "owner": 0, + "api_id": 0, + "api_hash": "", + "bot_token": "", + "workers": 1, + "max_concurrent_transmissions": 1, + "scoped_commands": true + }, + "reports": { + "chat_id": "owner" + }, + "disabled_plugins": [], + "commands": { + "help": { + "scopes": [ + { + "name": "BotCommandScopeDefault" + }, + { + "name": "BotCommandScopeChat", + "chat_id": "owner" + } + ] + }, + "shutdown": { + "scopes": [ + { + "name": "BotCommandScopeChat", + "chat_id": "owner" + } + ] + } + } +} + diff --git a/examples/locale.json b/examples/locale.json new file mode 100644 index 0000000..78e4c60 --- /dev/null +++ b/examples/locale.json @@ -0,0 +1,23 @@ +{ + "metadata": { + "flag": "🇬🇧", + "name": "English", + "codes": [ + "en" + ] + }, + "bot": { + "name": "Your Bot", + "about": "I'm a your bot. Nice to meet you!", + "description": "I'm just your bot. Yet nice to meet you!" + }, + "commands": { + "help": "Show help message" + }, + "messages": { + "help": "Sample Text" + }, + "callbacks": { + "sample": "This button is working!" + } +} \ No newline at end of file diff --git a/requirements/dev.txt b/requirements/dev.txt index 165d741..2b24a25 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,11 +1,11 @@ -black==23.12.1 -build==1.0.3 +black==24.4.2 +build==1.2.1 isort==5.13.2 -mypy==1.8.0 -pylint==3.0.3 -pytest-asyncio==0.23.3 -pytest-cov==4.1.0 -pytest==7.4.4 -tox==4.11.4 -types-aiofiles==23.2.0.0 +mypy==1.10.0 +pylint==3.2.0 +pytest-asyncio==0.23.6 +pytest-cov==5.0.0 +pytest==8.2.0 +tox==4.15.0 +types-aiofiles==23.2.0.20240403 types-ujson==5.9.0.0 \ No newline at end of file diff --git a/requirements/pycord.txt b/requirements/pycord.txt index 5c3fd69..e7a7c44 100644 --- a/requirements/pycord.txt +++ b/requirements/pycord.txt @@ -1,2 +1,2 @@ apscheduler~=3.10.4 -py-cord~=2.4.1 \ No newline at end of file +py-cord~=2.5.0 \ No newline at end of file diff --git a/requirements/pyrogram.txt b/requirements/pyrogram.txt index 13119ee..c24b74c 100644 --- a/requirements/pyrogram.txt +++ b/requirements/pyrogram.txt @@ -1,2 +1,2 @@ apscheduler~=3.10.4 -pyrofork~=2.3.16.post1 \ No newline at end of file +pyrofork~=2.3.21.post3 \ No newline at end of file diff --git a/requirements/speed.txt b/requirements/speed.txt index 934e0b8..5393963 100644 --- a/requirements/speed.txt +++ b/requirements/speed.txt @@ -1 +1 @@ -ujson~=5.9.0 \ No newline at end of file +ujson~=5.10.0 \ No newline at end of file diff --git a/src/libbot/__init__.py b/src/libbot/__init__.py index 3bd8739..74b0290 100644 --- a/src/libbot/__init__.py +++ b/src/libbot/__init__.py @@ -1,4 +1,4 @@ -__version__ = "3.0.0" +__version__ = "3.0.1" __license__ = "GPL3" __author__ = "Profitroll" diff --git a/src/libbot/pyrogram/classes/client.py b/src/libbot/pyrogram/classes/client.py index 90422f6..c246434 100644 --- a/src/libbot/pyrogram/classes/client.py +++ b/src/libbot/pyrogram/classes/client.py @@ -46,6 +46,7 @@ class PyroClient(Client): def __init__( self, name: str = "bot_client", + owner: Union[int, None] = None, config: Union[Dict[str, Any], None] = None, config_path: Union[str, Path] = Path("config.json"), api_id: Union[int, None] = None, @@ -58,6 +59,8 @@ class PyroClient(Client): sleep_threshold: int = 120, max_concurrent_transmissions: int = 1, commands_source: Union[Dict[str, dict], None] = None, + scoped_commands: Union[bool, None] = None, + i18n_bot_info: bool = False, scheduler: Union[AsyncIOScheduler, BackgroundScheduler, None] = None, **kwargs, ): @@ -93,12 +96,16 @@ class PyroClient(Client): else max_concurrent_transmissions, **kwargs, ) - self.owner: int = self.config["bot"]["owner"] + self.owner: int = self.config["bot"]["owner"] if owner is None else owner self.commands: List[PyroCommand] = [] self.commands_source: Dict[str, dict] = ( self.config["commands"] if commands_source is None else commands_source ) - self.scoped_commands: bool = self.config["bot"]["scoped_commands"] + self.scoped_commands: bool = ( + self.config["bot"]["scoped_commands"] + if scoped_commands is None + else scoped_commands + ) self.start_time: float = 0 self.bot_locale: BotLocale = BotLocale( @@ -116,6 +123,8 @@ class PyroClient(Client): self.scopes_placeholders: Dict[str, int] = {"owner": self.owner} + self.i18n_bot_info: bool = i18n_bot_info + async def start(self, register_commands: bool = True) -> None: await super().start() @@ -129,51 +138,53 @@ class PyroClient(Client): getpid(), ) - # Register default bot's info - try: - await self.set_bot_info( - name=self._("name", "bot"), - about=self._("about", "bot"), - description=self._("description", "bot"), - lang_code="", - ) - logger.info( - "Bot's info for the default locale %s has been updated", - self.default_locale, - ) - except KeyError: - logger.warning( - "Default locale %s has incorrect keys or values in bot section", - self.default_locale, - ) - - # Register bot's info for each available locale - for locale_code in self.locales: - locale = self.locales[locale_code] - - if "metadata" not in locale or ("codes" not in locale["metadata"]): - logger.warning( - "Locale %s is missing metadata or metadata.codes key", locale_code + if self.i18n_bot_info: + # Register default bot's info + try: + await self.set_bot_info( + name=self._("name", "bot"), + about=self._("about", "bot"), + description=self._("description", "bot"), + lang_code="", + ) + logger.info( + "Bot's info for the default locale %s has been updated", + self.default_locale, + ) + except KeyError: + logger.warning( + "Default locale %s has incorrect keys or values in bot section", + self.default_locale, ) - continue - for code in locale["metadata"]["codes"]: - try: - await self.set_bot_info( - name=locale["bot"]["name"], - about=locale["bot"]["about"], - description=locale["bot"]["description"], - lang_code=code, - ) - logger.info( - "Bot's info for the locale %s has been updated", - self.default_locale, - ) - except KeyError: + # Register bot's info for each available locale + for locale_code in self.locales: + locale = self.locales[locale_code] + + if "metadata" not in locale or ("codes" not in locale["metadata"]): logger.warning( - "Locale %s has incorrect keys or values in bot section", + "Locale %s is missing metadata or metadata.codes key", locale_code, ) + continue + + for code in locale["metadata"]["codes"]: + try: + await self.set_bot_info( + name=locale["bot"]["name"], + about=locale["bot"]["about"], + description=locale["bot"]["description"], + lang_code=code, + ) + logger.info( + "Bot's info for the locale %s has been updated", + self.code, + ) + except KeyError: + logger.warning( + "Locale %s has incorrect keys or values in bot section", + locale_code, + ) # Send a message to the bot's reports chat about the startup try: