Updated docs
This commit is contained in:
		| @@ -1,26 +1,26 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
|  | ||||
| """ | ||||
| cpl-discord sh-edraft Common Python library Discord | ||||
| cpl-discord CPL Discord | ||||
| ~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| sh-edraft Common Python library link between discord.py and CPL | ||||
| Link between discord.py and CPL | ||||
|  | ||||
| :copyright: (c) 2022 - 2023 sh-edraft.de | ||||
| :license: MIT, see LICENSE for more details. | ||||
|  | ||||
| """ | ||||
|  | ||||
| __title__ = 'cpl_discord' | ||||
| __author__ = 'Sven Heidemann' | ||||
| __license__ = 'MIT' | ||||
| __copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de' | ||||
| __version__ = '2022.12.1' | ||||
| __title__ = "cpl_discord" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "2023.2.0" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
|  | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple('VersionInfo', 'major minor micro') | ||||
| version_info = VersionInfo(major='2022', minor='12', micro='1') | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="2023", minor="2", micro="0") | ||||
|   | ||||
| @@ -6,17 +6,16 @@ from cpl_core.utils import String | ||||
|  | ||||
|  | ||||
| class DiscordBot(ProjectTypeABC): | ||||
|  | ||||
|     def __init__( | ||||
|             self, | ||||
|             base_path: str, | ||||
|             project_name: str, | ||||
|             workspace: WorkspaceSettings, | ||||
|             use_application_api: bool, | ||||
|             use_startup: bool, | ||||
|             use_service_providing: bool, | ||||
|             use_async: bool, | ||||
|             project_file_data: dict, | ||||
|         self, | ||||
|         base_path: str, | ||||
|         project_name: str, | ||||
|         workspace: WorkspaceSettings, | ||||
|         use_application_api: bool, | ||||
|         use_startup: bool, | ||||
|         use_service_providing: bool, | ||||
|         use_async: bool, | ||||
|         project_file_data: dict, | ||||
|     ): | ||||
|         from project_file_discord import DiscordBotProjectFile | ||||
|         from project_file_discord_appsettings import DiscordBotProjectFileAppsettings | ||||
| @@ -31,24 +30,56 @@ class DiscordBot(ProjectTypeABC): | ||||
|  | ||||
|         use_application_api, use_startup, use_service_providing, use_async = True, True, True, True | ||||
|  | ||||
|         ProjectTypeABC.__init__(self, base_path, project_name, workspace, use_application_api, use_startup, use_service_providing, use_async, project_file_data) | ||||
|         ProjectTypeABC.__init__( | ||||
|             self, | ||||
|             base_path, | ||||
|             project_name, | ||||
|             workspace, | ||||
|             use_application_api, | ||||
|             use_startup, | ||||
|             use_service_providing, | ||||
|             use_async, | ||||
|             project_file_data, | ||||
|         ) | ||||
|  | ||||
|         project_path = f'{base_path}{String.convert_to_snake_case(project_name.split("/")[-1])}/' | ||||
|  | ||||
|         self.add_template(DiscordBotProjectFile(project_name.split('/')[-1], project_path, project_file_data)) | ||||
|         self.add_template(DiscordBotProjectFile(project_name.split("/")[-1], project_path, project_file_data)) | ||||
|         if workspace is None: | ||||
|             self.add_template(DiscordBotProjectFileLicense('')) | ||||
|             self.add_template(DiscordBotProjectFileReadme('')) | ||||
|             self.add_template(DiscordBotInit('', 'init', f'{base_path}tests/')) | ||||
|             self.add_template(DiscordBotProjectFileLicense("")) | ||||
|             self.add_template(DiscordBotProjectFileReadme("")) | ||||
|             self.add_template(DiscordBotInit("", "init", f"{base_path}tests/")) | ||||
|  | ||||
|         self.add_template(DiscordBotInit('', 'init', project_path)) | ||||
|         self.add_template(DiscordBotInit("", "init", project_path)) | ||||
|         self.add_template(DiscordBotProjectFileAppsettings(project_path)) | ||||
|  | ||||
|         self.add_template(DiscordBotInit('', 'init', f'{project_path}events/')) | ||||
|         self.add_template(Event('OnReady', 'event', f'{project_path}events/')) | ||||
|         self.add_template(DiscordBotInit('', 'init', f'{project_path}commands/')) | ||||
|         self.add_template(Command('Ping', 'command', f'{project_path}commands/')) | ||||
|         self.add_template(DiscordBotInit("", "init", f"{project_path}events/")) | ||||
|         self.add_template(Event("OnReady", "event", f"{project_path}events/")) | ||||
|         self.add_template(DiscordBotInit("", "init", f"{project_path}commands/")) | ||||
|         self.add_template(Command("Ping", "command", f"{project_path}commands/")) | ||||
|  | ||||
|         self.add_template(DiscordBotProjectFileApplication(project_path, use_application_api, use_startup, use_service_providing, use_async)) | ||||
|         self.add_template(DiscordBotProjectFileStartup(project_name.split('/')[-1], project_path, use_application_api, use_startup, use_service_providing, use_async)) | ||||
|         self.add_template(DiscordBotProjectFileMain(project_name.split('/')[-1], project_path, use_application_api, use_startup, use_service_providing, use_async)) | ||||
|         self.add_template( | ||||
|             DiscordBotProjectFileApplication( | ||||
|                 project_path, use_application_api, use_startup, use_service_providing, use_async | ||||
|             ) | ||||
|         ) | ||||
|         self.add_template( | ||||
|             DiscordBotProjectFileStartup( | ||||
|                 project_name.split("/")[-1], | ||||
|                 project_path, | ||||
|                 use_application_api, | ||||
|                 use_startup, | ||||
|                 use_service_providing, | ||||
|                 use_async, | ||||
|             ) | ||||
|         ) | ||||
|         self.add_template( | ||||
|             DiscordBotProjectFileMain( | ||||
|                 project_name.split("/")[-1], | ||||
|                 project_path, | ||||
|                 use_application_api, | ||||
|                 use_startup, | ||||
|                 use_service_providing, | ||||
|                 use_async, | ||||
|             ) | ||||
|         ) | ||||
|   | ||||
| @@ -4,10 +4,9 @@ from cpl_cli.abc.file_template_abc import FileTemplateABC | ||||
|  | ||||
|  | ||||
| class DiscordBotProjectFile(FileTemplateABC): | ||||
|  | ||||
|     def __init__(self, name: str, path: str, code: dict): | ||||
|         FileTemplateABC.__init__(self, '', path, '{}') | ||||
|         self._name = f'{name}.json' | ||||
|         FileTemplateABC.__init__(self, "", path, "{}") | ||||
|         self._name = f"{name}.json" | ||||
|         self._code = code | ||||
|  | ||||
|     def get_code(self) -> str: | ||||
|   | ||||
| @@ -4,13 +4,13 @@ from cpl_cli.abc.file_template_abc import FileTemplateABC | ||||
|  | ||||
|  | ||||
| class DiscordBotProjectFileAppsettings(FileTemplateABC): | ||||
|  | ||||
|     def __init__(self, path: str): | ||||
|         FileTemplateABC.__init__(self, '', path, '{}') | ||||
|         self._name = 'appsettings.json' | ||||
|         FileTemplateABC.__init__(self, "", path, "{}") | ||||
|         self._name = "appsettings.json" | ||||
|  | ||||
|     def get_code(self) -> str: | ||||
|         return textwrap.dedent("""\ | ||||
|         return textwrap.dedent( | ||||
|             """\ | ||||
|         { | ||||
|           "TimeFormatSettings": { | ||||
|             "DateFormat": "%Y-%m-%d", | ||||
| @@ -31,4 +31,5 @@ class DiscordBotProjectFileAppsettings(FileTemplateABC): | ||||
|             "Prefix": "!bot " | ||||
|           } | ||||
|         } | ||||
|         """) | ||||
|         """ | ||||
|         ) | ||||
|   | ||||
| @@ -2,14 +2,18 @@ from cpl_cli.abc.code_file_template_abc import CodeFileTemplateABC | ||||
|  | ||||
|  | ||||
| class DiscordBotProjectFileApplication(CodeFileTemplateABC): | ||||
|  | ||||
|     def __init__(self, path: str, use_application_api: bool, use_startup: bool, use_service_providing: bool, use_async: bool): | ||||
|         CodeFileTemplateABC.__init__(self, 'application', path, '', use_application_api, use_startup, use_service_providing, use_async) | ||||
|     def __init__( | ||||
|         self, path: str, use_application_api: bool, use_startup: bool, use_service_providing: bool, use_async: bool | ||||
|     ): | ||||
|         CodeFileTemplateABC.__init__( | ||||
|             self, "application", path, "", use_application_api, use_startup, use_service_providing, use_async | ||||
|         ) | ||||
|  | ||||
|     def get_code(self) -> str: | ||||
|         import textwrap | ||||
|  | ||||
|         return textwrap.dedent("""\ | ||||
|         return textwrap.dedent( | ||||
|             """\ | ||||
|         from cpl_core.application import ApplicationABC | ||||
|         from cpl_core.configuration import ConfigurationABC | ||||
|         from cpl_core.console import Console | ||||
| @@ -50,4 +54,5 @@ class DiscordBotProjectFileApplication(CodeFileTemplateABC): | ||||
|                     self._logger.error(__name__, 'stop failed', e) | ||||
|          | ||||
|                 Console.write_line() | ||||
|         """) | ||||
|         """ | ||||
|         ) | ||||
|   | ||||
| @@ -3,15 +3,25 @@ from cpl_core.utils import String | ||||
|  | ||||
|  | ||||
| class DiscordBotProjectFileMain(CodeFileTemplateABC): | ||||
|  | ||||
|     def __init__(self, name: str, path: str, use_application_api: bool, use_startup: bool, use_service_providing: bool, use_async: bool): | ||||
|         CodeFileTemplateABC.__init__(self, 'main', path, '', use_application_api, use_startup, use_service_providing, use_async) | ||||
|     def __init__( | ||||
|         self, | ||||
|         name: str, | ||||
|         path: str, | ||||
|         use_application_api: bool, | ||||
|         use_startup: bool, | ||||
|         use_service_providing: bool, | ||||
|         use_async: bool, | ||||
|     ): | ||||
|         CodeFileTemplateABC.__init__( | ||||
|             self, "main", path, "", use_application_api, use_startup, use_service_providing, use_async | ||||
|         ) | ||||
|  | ||||
|         import textwrap | ||||
|  | ||||
|         import_pkg = f'{String.convert_to_snake_case(name)}.' | ||||
|         import_pkg = f"{String.convert_to_snake_case(name)}." | ||||
|  | ||||
|         self._main_with_application_host_and_startup = textwrap.dedent(f"""\ | ||||
|         self._main_with_application_host_and_startup = textwrap.dedent( | ||||
|             f"""\ | ||||
|             import asyncio | ||||
|             from typing import Optional | ||||
|              | ||||
| @@ -41,7 +51,8 @@ class DiscordBotProjectFileMain(CodeFileTemplateABC): | ||||
|                     asyncio.run(program.main()) | ||||
|                 except KeyboardInterrupt: | ||||
|                     asyncio.run(program.stop()) | ||||
|         """) | ||||
|         """ | ||||
|         ) | ||||
|  | ||||
|     def get_code(self) -> str: | ||||
|         return self._main_with_application_host_and_startup | ||||
|   | ||||
| @@ -3,17 +3,27 @@ from cpl_core.utils import String | ||||
|  | ||||
|  | ||||
| class DiscordBotProjectFileStartup(CodeFileTemplateABC): | ||||
|  | ||||
|     def __init__(self, project_name: str, path: str, use_application_api: bool, use_startup: bool, use_service_providing: bool, use_async: bool): | ||||
|         CodeFileTemplateABC.__init__(self, 'startup', path, '', use_application_api, use_startup, use_service_providing, use_async) | ||||
|     def __init__( | ||||
|         self, | ||||
|         project_name: str, | ||||
|         path: str, | ||||
|         use_application_api: bool, | ||||
|         use_startup: bool, | ||||
|         use_service_providing: bool, | ||||
|         use_async: bool, | ||||
|     ): | ||||
|         CodeFileTemplateABC.__init__( | ||||
|             self, "startup", path, "", use_application_api, use_startup, use_service_providing, use_async | ||||
|         ) | ||||
|         self._project_name = project_name | ||||
|  | ||||
|     def get_code(self) -> str: | ||||
|         import textwrap | ||||
|  | ||||
|         import_pkg = f'{String.convert_to_snake_case(self._project_name)}.' | ||||
|         import_pkg = f"{String.convert_to_snake_case(self._project_name)}." | ||||
|  | ||||
|         return textwrap.dedent(f"""\ | ||||
|         return textwrap.dedent( | ||||
|             f"""\ | ||||
|         from cpl_core.application import StartupABC | ||||
|         from cpl_core.configuration import ConfigurationABC | ||||
|         from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionABC | ||||
| @@ -44,4 +54,5 @@ class DiscordBotProjectFileStartup(CodeFileTemplateABC): | ||||
|                 dc_collection.add_command(PingCommand) | ||||
|          | ||||
|                 return services.build_service_provider() | ||||
|         """) | ||||
|         """ | ||||
|         ) | ||||
|   | ||||
| @@ -2,10 +2,9 @@ from cpl_cli.abc.file_template_abc import FileTemplateABC | ||||
|  | ||||
|  | ||||
| class DiscordBotProjectFileLicense(FileTemplateABC): | ||||
|  | ||||
|     def __init__(self, path: str): | ||||
|         FileTemplateABC.__init__(self, '', path, '') | ||||
|         self._name = 'LICENSE' | ||||
|         FileTemplateABC.__init__(self, "", path, "") | ||||
|         self._name = "LICENSE" | ||||
|  | ||||
|     def get_code(self) -> str: | ||||
|         return self._code | ||||
|   | ||||
| @@ -2,10 +2,9 @@ from cpl_cli.abc.file_template_abc import FileTemplateABC | ||||
|  | ||||
|  | ||||
| class DiscordBotProjectFileReadme(FileTemplateABC): | ||||
|  | ||||
|     def __init__(self, path: str): | ||||
|         FileTemplateABC.__init__(self, '', path, '') | ||||
|         self._name = 'README.md' | ||||
|         FileTemplateABC.__init__(self, "", path, "") | ||||
|         self._name = "README.md" | ||||
|  | ||||
|     def get_code(self) -> str: | ||||
|         return self._code | ||||
|   | ||||
| @@ -4,7 +4,6 @@ from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC | ||||
|  | ||||
|  | ||||
| class Command(GenerateSchematicABC): | ||||
|  | ||||
|     def __init__(self, *args: str): | ||||
|         GenerateSchematicABC.__init__(self, *args) | ||||
|  | ||||
| @@ -37,8 +36,4 @@ class Command(GenerateSchematicABC): | ||||
|  | ||||
|     @classmethod | ||||
|     def register(cls): | ||||
|         GenerateSchematicABC.register( | ||||
|             cls, | ||||
|             'command', | ||||
|             [] | ||||
|         ) | ||||
|         GenerateSchematicABC.register(cls, "command", []) | ||||
|   | ||||
| @@ -7,15 +7,15 @@ from cpl_core.utils import String | ||||
|  | ||||
|  | ||||
| class Event(GenerateSchematicABC): | ||||
|  | ||||
|     def __init__(self, name: str, schematic: str, path: str): | ||||
|         GenerateSchematicABC.__init__(self, name, schematic, path) | ||||
|  | ||||
|         event = None | ||||
|  | ||||
|         from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum | ||||
|  | ||||
|         for event_type in DiscordEventTypesEnum: | ||||
|             event_name = event_type.value.__name__.replace("ABC", '') | ||||
|             event_name = event_type.value.__name__.replace("ABC", "") | ||||
|  | ||||
|             if event_name in name: | ||||
|                 name = name.replace(event_name, "") | ||||
| @@ -23,18 +23,18 @@ class Event(GenerateSchematicABC): | ||||
|                 break | ||||
|  | ||||
|         if event is None: | ||||
|             Console.error(f'No valid event found in name {name}') | ||||
|             Console.write_line('Available events:') | ||||
|             Console.error(f"No valid event found in name {name}") | ||||
|             Console.write_line("Available events:") | ||||
|             for event_type in DiscordEventTypesEnum: | ||||
|                 Console.write_line(f'\t{event_type.value.__name__.replace("ABC", "")}') | ||||
|             sys.exit() | ||||
|  | ||||
|         self._event_class = f'{event}ABC' | ||||
|         self._event_class = f"{event}ABC" | ||||
|         self._name = f'{String.convert_to_snake_case(self._event_class.replace("ABC", ""))}_{schematic}.py' | ||||
|         self._class_name = f'{self._event_class.replace("ABC", "")}{String.first_to_upper(schematic)}' | ||||
|         if name != '': | ||||
|             self._name = f'{String.convert_to_snake_case(name)}_{self._name}' | ||||
|             self._class_name = f'{String.first_to_upper(name)}{self._class_name}' | ||||
|         if name != "": | ||||
|             self._name = f"{String.convert_to_snake_case(name)}_{self._name}" | ||||
|             self._class_name = f"{String.first_to_upper(name)}{self._class_name}" | ||||
|  | ||||
|     def get_code(self) -> str: | ||||
|         code = """\ | ||||
| @@ -62,8 +62,4 @@ class Event(GenerateSchematicABC): | ||||
|  | ||||
|     @classmethod | ||||
|     def register(cls): | ||||
|         GenerateSchematicABC.register( | ||||
|             cls, | ||||
|             'event', | ||||
|             [] | ||||
|         ) | ||||
|         GenerateSchematicABC.register(cls, "event", []) | ||||
|   | ||||
| @@ -4,10 +4,9 @@ from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC | ||||
|  | ||||
|  | ||||
| class DiscordBotInit(GenerateSchematicABC): | ||||
|  | ||||
|     def __init__(self, *args: str): | ||||
|         GenerateSchematicABC.__init__(self, *args) | ||||
|         self._name = f'__init__.py' | ||||
|         self._name = f"__init__.py" | ||||
|  | ||||
|     def get_code(self) -> str: | ||||
|         code = """\ | ||||
| @@ -17,8 +16,4 @@ class DiscordBotInit(GenerateSchematicABC): | ||||
|  | ||||
|     @classmethod | ||||
|     def register(cls): | ||||
|         GenerateSchematicABC.register( | ||||
|             cls, | ||||
|             'init', | ||||
|             [] | ||||
|         ) | ||||
|         GenerateSchematicABC.register(cls, "init", []) | ||||
|   | ||||
| @@ -1,21 +1,21 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
|  | ||||
| """ | ||||
| cpl-discord sh-edraft Common Python library Discord | ||||
| cpl-discord CPL Discord | ||||
| ~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| sh-edraft Common Python library link between discord.py and CPL | ||||
| Link between discord.py and CPL | ||||
|  | ||||
| :copyright: (c) 2022 - 2023 sh-edraft.de | ||||
| :license: MIT, see LICENSE for more details. | ||||
|  | ||||
| """ | ||||
|  | ||||
| __title__ = 'cpl_discord' | ||||
| __author__ = 'Sven Heidemann' | ||||
| __license__ = 'MIT' | ||||
| __copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de' | ||||
| __version__ = '2022.12.1' | ||||
| __title__ = "cpl_discord" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "2023.2.0" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -35,24 +35,28 @@ def add_discord(self): | ||||
|         self.add_singleton(DiscordServiceABC, DiscordService) | ||||
|         self.add_singleton(DiscordBotServiceABC, DiscordBotService) | ||||
|     except ImportError as e: | ||||
|         Console.error('cpl-discord is not installed', str(e)) | ||||
|         Console.error("cpl-discord is not installed", str(e)) | ||||
|  | ||||
|  | ||||
| def init(): | ||||
|     from cpl_core.dependency_injection import ServiceCollection | ||||
|  | ||||
|     ServiceCollection.add_discord = add_discord | ||||
|  | ||||
|  | ||||
| init() | ||||
|  | ||||
|  | ||||
| def get_discord_collection(services: 'ServiceCollectionABC') -> 'DiscordCollectionABC': | ||||
| def get_discord_collection(services: "ServiceCollectionABC") -> "DiscordCollectionABC": | ||||
|     from cpl_discord.service.discord_collection import DiscordCollection | ||||
|     from cpl_discord.service.discord_collection_abc import DiscordCollectionABC | ||||
|  | ||||
|     collection = DiscordCollection(services) | ||||
|     services.add_singleton(DiscordCollectionABC, collection) | ||||
|     return collection | ||||
|  | ||||
|  | ||||
| # build-ignore-end | ||||
|  | ||||
| VersionInfo = namedtuple('VersionInfo', 'major minor micro') | ||||
| version_info = VersionInfo(major='2022', minor='12', micro='1') | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="2023", minor="2", micro="0") | ||||
|   | ||||
| @@ -1,21 +1,21 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
|  | ||||
| """ | ||||
| cpl-discord sh-edraft Common Python library Discord | ||||
| cpl-discord CPL Discord | ||||
| ~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| sh-edraft Common Python library link between discord.py and CPL | ||||
| Link between discord.py and CPL | ||||
|  | ||||
| :copyright: (c) 2022 - 2023 sh-edraft.de | ||||
| :license: MIT, see LICENSE for more details. | ||||
|  | ||||
| """ | ||||
|  | ||||
| __title__ = 'cpl_discord.application' | ||||
| __author__ = 'Sven Heidemann' | ||||
| __license__ = 'MIT' | ||||
| __copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de' | ||||
| __version__ = '2022.12.1' | ||||
| __title__ = "cpl_discord.application" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "2023.2.0" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,5 +23,5 @@ from collections import namedtuple | ||||
| # imports | ||||
| from .discord_bot_application_abc import DiscordBotApplicationABC | ||||
|  | ||||
| VersionInfo = namedtuple('VersionInfo', 'major minor micro') | ||||
| version_info = VersionInfo(major='2022', minor='12', micro='1') | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="2023", minor="2", micro="0") | ||||
|   | ||||
| @@ -6,9 +6,9 @@ from cpl_core.dependency_injection.service_provider_abc import ServiceProviderAB | ||||
|  | ||||
|  | ||||
| class DiscordBotApplicationABC(ApplicationABC): | ||||
|  | ||||
|     def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): | ||||
|         ApplicationABC.__init__(self, config, services) | ||||
|  | ||||
|     @abstractmethod | ||||
|     def stop_async(self): pass | ||||
|     def stop_async(self): | ||||
|         pass | ||||
|   | ||||
| @@ -1,21 +1,21 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
|  | ||||
| """ | ||||
| cpl-discord sh-edraft Common Python library Discord | ||||
| cpl-discord CPL Discord | ||||
| ~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| sh-edraft Common Python library link between discord.py and CPL | ||||
| Link between discord.py and CPL | ||||
|  | ||||
| :copyright: (c) 2022 - 2023 sh-edraft.de | ||||
| :license: MIT, see LICENSE for more details. | ||||
|  | ||||
| """ | ||||
|  | ||||
| __title__ = 'cpl_discord.command' | ||||
| __author__ = 'Sven Heidemann' | ||||
| __license__ = 'MIT' | ||||
| __copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de' | ||||
| __version__ = '2022.12.1' | ||||
| __title__ = "cpl_discord.command" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "2023.2.0" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -24,5 +24,5 @@ from collections import namedtuple | ||||
| from .discord_command_abc import DiscordCommandABC | ||||
| from .discord_commands_meta import DiscordCogMeta | ||||
|  | ||||
| VersionInfo = namedtuple('VersionInfo', 'major minor micro') | ||||
| version_info = VersionInfo(major='2022', minor='12', micro='1') | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="2023", minor="2", micro="0") | ||||
|   | ||||
| @@ -6,6 +6,6 @@ from cpl_discord.command.discord_commands_meta import DiscordCogMeta | ||||
|  | ||||
|  | ||||
| class DiscordCommandABC(ABC, commands.Cog, metaclass=DiscordCogMeta): | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|     def __init__(self): | ||||
|         pass | ||||
|   | ||||
| @@ -2,4 +2,5 @@ from abc import ABCMeta | ||||
| from discord.ext import commands | ||||
|  | ||||
|  | ||||
| class DiscordCogMeta(ABCMeta, commands.CogMeta): pass | ||||
| class DiscordCogMeta(ABCMeta, commands.CogMeta): | ||||
|     pass | ||||
|   | ||||
| @@ -1,21 +1,21 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
|  | ||||
| """ | ||||
| cpl-discord sh-edraft Common Python library Discord | ||||
| cpl-discord CPL Discord | ||||
| ~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| sh-edraft Common Python library link between discord.py and CPL | ||||
| Link between discord.py and CPL | ||||
|  | ||||
| :copyright: (c) 2022 - 2023 sh-edraft.de | ||||
| :license: MIT, see LICENSE for more details. | ||||
|  | ||||
| """ | ||||
|  | ||||
| __title__ = 'cpl_discord.configuration' | ||||
| __author__ = 'Sven Heidemann' | ||||
| __license__ = 'MIT' | ||||
| __copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de' | ||||
| __version__ = '2022.12.1' | ||||
| __title__ = "cpl_discord.configuration" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "2023.2.0" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,5 +23,5 @@ from collections import namedtuple | ||||
| # imports | ||||
| from .discord_bot_settings import DiscordBotSettings | ||||
|  | ||||
| VersionInfo = namedtuple('VersionInfo', 'major minor micro') | ||||
| version_info = VersionInfo(major='2022', minor='12', micro='1') | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="2023", minor="2", micro="0") | ||||
|   | ||||
| @@ -5,12 +5,11 @@ from cpl_core.console import Console | ||||
|  | ||||
|  | ||||
| class DiscordBotSettings(ConfigurationModelABC): | ||||
|  | ||||
|     def __init__(self): | ||||
|         ConfigurationModelABC.__init__(self) | ||||
|  | ||||
|         self._token = '' | ||||
|         self._prefix = '' | ||||
|         self._token = "" | ||||
|         self._prefix = "" | ||||
|  | ||||
|     @property | ||||
|     def token(self) -> str: | ||||
| @@ -22,8 +21,8 @@ class DiscordBotSettings(ConfigurationModelABC): | ||||
|  | ||||
|     def from_dict(self, settings: dict): | ||||
|         try: | ||||
|             self._token = settings['Token'] | ||||
|             self._prefix = settings['Prefix'] | ||||
|             self._token = settings["Token"] | ||||
|             self._prefix = settings["Prefix"] | ||||
|         except Exception as e: | ||||
|             Console.error(f'[ ERROR ] [ {__name__} ]: Reading error in {__name__} settings') | ||||
|             Console.error(f'[ EXCEPTION ] [ {__name__} ]: {e} -> {traceback.format_exc()}') | ||||
|             Console.error(f"[ ERROR ] [ {__name__} ]: Reading error in {__name__} settings") | ||||
|             Console.error(f"[ EXCEPTION ] [ {__name__} ]: {e} -> {traceback.format_exc()}") | ||||
|   | ||||
| @@ -1,21 +1,21 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
|  | ||||
| """ | ||||
| cpl-discord sh-edraft Common Python library Discord | ||||
| cpl-discord CPL Discord | ||||
| ~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| sh-edraft Common Python library link between discord.py and CPL | ||||
| Link between discord.py and CPL | ||||
|  | ||||
| :copyright: (c) 2022 - 2023 sh-edraft.de | ||||
| :license: MIT, see LICENSE for more details. | ||||
|  | ||||
| """ | ||||
|  | ||||
| __title__ = 'cpl_discord.container' | ||||
| __author__ = 'Sven Heidemann' | ||||
| __license__ = 'MIT' | ||||
| __copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de' | ||||
| __version__ = '2022.12.1' | ||||
| __title__ = "cpl_discord.container" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "2023.2.0" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -30,5 +30,5 @@ from .text_channel import TextChannel | ||||
| from .thread import Thread | ||||
| from .voice_channel import VoiceChannel | ||||
|  | ||||
| VersionInfo = namedtuple('VersionInfo', 'major minor micro') | ||||
| version_info = VersionInfo(major='2022', minor='12', micro='1') | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="2023", minor="2", micro="0") | ||||
|   | ||||
| @@ -8,7 +8,6 @@ from cpl_query.extension import List | ||||
|  | ||||
|  | ||||
| class CategoryChannel(discord.CategoryChannel, Container): | ||||
|  | ||||
|     def __init__(self, _t: discord.CategoryChannel): | ||||
|         Container.__init__(self, _t, CategoryChannel) | ||||
|  | ||||
|   | ||||
| @@ -3,7 +3,6 @@ from typing import Callable | ||||
|  | ||||
|  | ||||
| class Container: | ||||
|  | ||||
|     def __init__(self, _o: object, _t: type): | ||||
|         self._object = _o | ||||
|         self._type = _t | ||||
|   | ||||
| @@ -11,7 +11,6 @@ from cpl_query.extension import List | ||||
|  | ||||
|  | ||||
| class Guild(Container, discord.Guild): | ||||
|  | ||||
|     def __init__(self, _t: discord.Guild): | ||||
|         self._object: discord.Guild = _t | ||||
|  | ||||
|   | ||||
| @@ -6,11 +6,11 @@ from cpl_query.extension.list import List | ||||
|  | ||||
|  | ||||
| class Member(discord.Member, Container): | ||||
|  | ||||
|     def __init__(self, _t: discord.Member): | ||||
|         Container.__init__(self, _t, Member) | ||||
|  | ||||
|     @property | ||||
|     def roles(self) -> List['Role']: | ||||
|     def roles(self) -> List["Role"]: | ||||
|         from cpl_discord.container.role import Role | ||||
|  | ||||
|         return List(Role, ToContainersConverter.convert(self._object.roles, Role)) | ||||
|   | ||||
| @@ -7,11 +7,11 @@ from cpl_query.extension.list import List | ||||
|  | ||||
|  | ||||
| class Role(discord.Role, Container): | ||||
|  | ||||
|     def __init__(self, _t: discord.Role): | ||||
|         Container.__init__(self, _t, Role) | ||||
|  | ||||
|     @property | ||||
|     def members(self) -> List['Member']: | ||||
|     def members(self) -> List["Member"]: | ||||
|         from cpl_discord.container.member import Member | ||||
|  | ||||
|         return List(Member, ToContainersConverter.convert(self._object.members, Member)) | ||||
|   | ||||
| @@ -8,7 +8,6 @@ from cpl_query.extension import List | ||||
|  | ||||
|  | ||||
| class TextChannel(discord.TextChannel, Container): | ||||
|  | ||||
|     def __init__(self, _t: discord.TextChannel): | ||||
|         Container.__init__(self, _t, TextChannel) | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,6 @@ from cpl_query.extension import List | ||||
|  | ||||
|  | ||||
| class Thread(discord.Thread, Container): | ||||
|  | ||||
|     def __init__(self, _t: discord.Thread): | ||||
|         Container.__init__(self, _t, Thread) | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,6 @@ from cpl_query.extension import List | ||||
|  | ||||
|  | ||||
| class VoiceChannel(discord.VoiceChannel, Container): | ||||
|  | ||||
|     def __init__(self, _t: discord.VoiceChannel): | ||||
|         Container.__init__(self, _t, VoiceChannel) | ||||
|  | ||||
|   | ||||
| @@ -2,26 +2,26 @@ | ||||
|   "ProjectSettings": { | ||||
|     "Name": "cpl-discord", | ||||
|     "Version": { | ||||
|       "Major": "2022", | ||||
|       "Minor": "12", | ||||
|       "Micro": "1" | ||||
|       "Major": "2023", | ||||
|       "Minor": "2", | ||||
|       "Micro": "0" | ||||
|     }, | ||||
|     "Author": "Sven Heidemann", | ||||
|     "AuthorEmail": "sven.heidemann@sh-edraft.de", | ||||
|     "Description": "sh-edraft Common Python library Discord", | ||||
|     "LongDescription": "sh-edraft Common Python library link between discord.py and CPL", | ||||
|     "Description": "CPL Discord", | ||||
|     "LongDescription": "Link between discord.py and CPL", | ||||
|     "URL": "https://www.sh-edraft.de", | ||||
|     "CopyrightDate": "2022 - 2023", | ||||
|     "CopyrightName": "sh-edraft.de", | ||||
|     "LicenseName": "MIT", | ||||
|     "LicenseDescription": "MIT, see LICENSE for more details.", | ||||
|     "Dependencies": [ | ||||
|       "cpl-core>=2022.12.1", | ||||
|       "cpl-core>=2023.2.0", | ||||
|       "discord.py==2.1.0", | ||||
|       "cpl-query>=2022.12.2.post1" | ||||
|       "cpl-query>=2023.2.0" | ||||
|     ], | ||||
|     "DevDependencies": [ | ||||
|       "cpl-cli>=2022.12.1" | ||||
|       "cpl-cli>=2023.2.0" | ||||
|     ], | ||||
|     "PythonVersion": ">=3.10", | ||||
|     "PythonPath": {}, | ||||
|   | ||||
| @@ -1,21 +1,21 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
|  | ||||
| """ | ||||
| cpl-discord sh-edraft Common Python library Discord | ||||
| cpl-discord CPL Discord | ||||
| ~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| sh-edraft Common Python library link between discord.py and CPL | ||||
| Link between discord.py and CPL | ||||
|  | ||||
| :copyright: (c) 2022 - 2023 sh-edraft.de | ||||
| :license: MIT, see LICENSE for more details. | ||||
|  | ||||
| """ | ||||
|  | ||||
| __title__ = 'cpl_discord.events' | ||||
| __author__ = 'Sven Heidemann' | ||||
| __license__ = 'MIT' | ||||
| __copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de' | ||||
| __version__ = '2022.12.1' | ||||
| __title__ = "cpl_discord.events" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "2023.2.0" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -68,5 +68,5 @@ from .on_user_update_abc import OnUserUpdateABC | ||||
| from .on_voice_state_update_abc import OnVoiceStateUpdateABC | ||||
| from .on_webhooks_update_abc import OnWebhooksUpdateABC | ||||
|  | ||||
| VersionInfo = namedtuple('VersionInfo', 'major minor micro') | ||||
| version_info = VersionInfo(major='2022', minor='12', micro='1') | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="2023", minor="2", micro="0") | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnBulkMessageDeleteABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_bulk_message_delete(self, messages: list[discord.Message]): pass | ||||
|     async def on_bulk_message_delete(self, messages: list[discord.Message]): | ||||
|         pass | ||||
|   | ||||
| @@ -4,9 +4,10 @@ from discord.ext.commands import Context | ||||
|  | ||||
|  | ||||
| class OnCommandABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_command(self, ctx: Context): pass | ||||
|     async def on_command(self, ctx: Context): | ||||
|         pass | ||||
|   | ||||
| @@ -4,9 +4,10 @@ from discord.ext.commands import Context, CommandError | ||||
|  | ||||
|  | ||||
| class OnCommandCompletionABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_command_completion(self, ctx: Context): pass | ||||
|     async def on_command_completion(self, ctx: Context): | ||||
|         pass | ||||
|   | ||||
| @@ -4,9 +4,10 @@ from discord.ext.commands import Context, CommandError | ||||
|  | ||||
|  | ||||
| class OnCommandErrorABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_command_error(self, ctx: Context, error: CommandError): pass | ||||
|     async def on_command_error(self, ctx: Context, error: CommandError): | ||||
|         pass | ||||
|   | ||||
| @@ -2,9 +2,10 @@ from abc import ABC, abstractmethod | ||||
|  | ||||
|  | ||||
| class OnConnectABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_connect(self): pass | ||||
|     async def on_connect(self): | ||||
|         pass | ||||
|   | ||||
| @@ -2,9 +2,10 @@ from abc import ABC, abstractmethod | ||||
|  | ||||
|  | ||||
| class OnDisconnectABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|      | ||||
|     @abstractmethod | ||||
|     async def on_disconnect(self): pass | ||||
|     async def on_disconnect(self): | ||||
|         pass | ||||
|   | ||||
| @@ -2,9 +2,10 @@ from abc import ABC, abstractmethod | ||||
|  | ||||
|  | ||||
| class OnErrorABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_error(self, event: str, *args, **kwargs): pass | ||||
|     async def on_error(self, event: str, *args, **kwargs): | ||||
|         pass | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGroupJoinABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_group_join( | ||||
|         self, channel: discord.GroupChannel, user: discord.User): pass | ||||
|     async def on_group_join(self, channel: discord.GroupChannel, user: discord.User): | ||||
|         pass | ||||
|   | ||||
| @@ -1,11 +1,12 @@ | ||||
| from abc import ABC, abstractmethod | ||||
| import discord | ||||
|  | ||||
|  | ||||
| class OnGroupRemoveABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_group_remove( | ||||
|         self, chhanel: discord.GroupChannel, user: discord.User): pass | ||||
|     async def on_group_remove(self, chhanel: discord.GroupChannel, user: discord.User): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildAvailableABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_available(self, guild: discord.Guild): pass | ||||
|     async def on_guild_available(self, guild: discord.Guild): | ||||
|         pass | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildChannelCreateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_channel_create(self, channel: discord.abc.GuildChannel): pass | ||||
|      | ||||
|     async def on_guild_channel_create(self, channel: discord.abc.GuildChannel): | ||||
|         pass | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildChannelDeleteABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_channel_delete(self, channel: discord.abc.GuildChannel): pass | ||||
|      | ||||
|     async def on_guild_channel_delete(self, channel: discord.abc.GuildChannel): | ||||
|         pass | ||||
|   | ||||
| @@ -5,10 +5,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildChannelPinsUpdateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_channel_pins_update(self, channel: discord.abc.GuildChannel, list_pin: Optional[datetime]): pass | ||||
|      | ||||
|     async def on_guild_channel_pins_update(self, channel: discord.abc.GuildChannel, list_pin: Optional[datetime]): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildChannelUpdateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_channel_update(self, before: discord.abc.GuildChannel, after: discord.abc.GuildChannel): pass | ||||
|     async def on_guild_channel_update(self, before: discord.abc.GuildChannel, after: discord.abc.GuildChannel): | ||||
|         pass | ||||
|   | ||||
| @@ -4,9 +4,12 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildEmojisUpdateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|      | ||||
|     @abstractmethod | ||||
|     async def on_guild_emojis_update(self, guild: discord.Guild, before: Sequence[discord.Emoji], after: Sequence[discord.Emoji]): pass | ||||
|     async def on_guild_emojis_update( | ||||
|         self, guild: discord.Guild, before: Sequence[discord.Emoji], after: Sequence[discord.Emoji] | ||||
|     ): | ||||
|         pass | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildIntegrationsUpdateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_integrations_update(self, guild: discord.Guild): pass | ||||
|      | ||||
|     async def on_guild_integrations_update(self, guild: discord.Guild): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildJoinABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_join(self, guild: discord.Guild): pass | ||||
|     async def on_guild_join(self, guild: discord.Guild): | ||||
|         pass | ||||
|   | ||||
| @@ -3,8 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildRemoveABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|     @abstractmethod | ||||
|     async def on_guild_remove(self, guild: discord.Guild): pass | ||||
|     async def on_guild_remove(self, guild: discord.Guild): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildRoleCreateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_role_create(self, role: discord.Role): pass | ||||
|     async def on_guild_role_create(self, role: discord.Role): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildRoleDeleteABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_role_delete(self, role: discord.Role): pass | ||||
|     async def on_guild_role_delete(self, role: discord.Role): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildRoleUpdateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_role_update(self, before: discord.Role, after: discord.Role): pass | ||||
|     async def on_guild_role_update(self, before: discord.Role, after: discord.Role): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildUnavailableABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_unavailable(self, guild: discord.Guild): pass | ||||
|     async def on_guild_unavailable(self, guild: discord.Guild): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnGuildUpdateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_update(self, before: discord.Guild, after: discord.Guild): pass | ||||
|     async def on_guild_update(self, before: discord.Guild, after: discord.Guild): | ||||
|         pass | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnInviteCreateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_invite_create(self, invite: discord.Invite): pass | ||||
|      | ||||
|     async def on_invite_create(self, invite: discord.Invite): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnInviteDeleteABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_invite_delete(self, invite: discord.Invite): pass | ||||
|     async def on_invite_delete(self, invite: discord.Invite): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnMemberBanABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_member_ban(self, guild: discord.Guild, user: discord.User): pass | ||||
|     async def on_member_ban(self, guild: discord.Guild, user: discord.User): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnMemberJoinABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_member_join(self, member: discord.Member): pass | ||||
|     async def on_member_join(self, member: discord.Member): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnMemberRemoveABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_member_remove(self, member: discord.Member): pass | ||||
|     async def on_member_remove(self, member: discord.Member): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnMemberUnbanABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_member_unban(self, guild: discord.Guild, user: discord.User): pass | ||||
|     async def on_member_unban(self, guild: discord.Guild, user: discord.User): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnMemberUpdateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|      | ||||
|     @abstractmethod | ||||
|     async def on_member_update(self, before: discord.Member, after: discord.Member): pass | ||||
|     async def on_member_update(self, before: discord.Member, after: discord.Member): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnMessageABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|      | ||||
|     @abstractmethod | ||||
|     async def on_message(self, message: discord.Message): pass | ||||
|     async def on_message(self, message: discord.Message): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnMessageDeleteABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_message_delete(self, message: discord.Message): pass | ||||
|     async def on_message_delete(self, message: discord.Message): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnMessageEditABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_message_edit(self, before: discord.Message, after: discord.Message): pass | ||||
|     async def on_message_edit(self, before: discord.Message, after: discord.Message): | ||||
|         pass | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnPrivateChannelCreateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_private_channel_create(self, channel: discord.abc.PrivateChannel): pass | ||||
|      | ||||
|     async def on_private_channel_create(self, channel: discord.abc.PrivateChannel): | ||||
|         pass | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnPrivateChannelDeleteABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_private_channel_delete(self, channel: discord.abc.PrivateChannel): pass | ||||
|      | ||||
|     async def on_private_channel_delete(self, channel: discord.abc.PrivateChannel): | ||||
|         pass | ||||
|   | ||||
| @@ -5,10 +5,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnPrivateChannelPinsUpdateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_private_channel_pins_update(self, channel: discord.abc.PrivateChannel, list_pin: Optional[datetime]): pass | ||||
|      | ||||
|     async def on_private_channel_pins_update(self, channel: discord.abc.PrivateChannel, list_pin: Optional[datetime]): | ||||
|         pass | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnPrivateChannelUpdateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_private_channel_update(self, before: discord.GroupChannel, after: discord.GroupChannel): pass | ||||
|      | ||||
|     async def on_private_channel_update(self, before: discord.GroupChannel, after: discord.GroupChannel): | ||||
|         pass | ||||
|   | ||||
| @@ -4,10 +4,10 @@ from discord import RawReactionActionEvent | ||||
|  | ||||
|  | ||||
| class OnRawReactionAddABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_raw_reaction_add(self, payload: RawReactionActionEvent): pass | ||||
|      | ||||
|     async def on_raw_reaction_add(self, payload: RawReactionActionEvent): | ||||
|         pass | ||||
|   | ||||
| @@ -4,10 +4,10 @@ from discord import RawReactionActionEvent | ||||
|  | ||||
|  | ||||
| class OnRawReactionClearABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_raw_reaction_clear(self, payload: RawReactionActionEvent): pass | ||||
|      | ||||
|     async def on_raw_reaction_clear(self, payload: RawReactionActionEvent): | ||||
|         pass | ||||
|   | ||||
| @@ -4,10 +4,10 @@ from discord import RawReactionActionEvent | ||||
|  | ||||
|  | ||||
| class OnRawReactionClearEmojiABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_raw_reaction_clear_emoji(self, payload: RawReactionActionEvent): pass | ||||
|      | ||||
|     async def on_raw_reaction_clear_emoji(self, payload: RawReactionActionEvent): | ||||
|         pass | ||||
|   | ||||
| @@ -4,10 +4,10 @@ from discord import RawReactionActionEvent | ||||
|  | ||||
|  | ||||
| class OnRawReactionRemoveABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_raw_reaction_remove(self, payload: RawReactionActionEvent): pass | ||||
|      | ||||
|     async def on_raw_reaction_remove(self, payload: RawReactionActionEvent): | ||||
|         pass | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnReactionAddABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_reaction_add(self, reaction: discord.Reaction, user: discord.User): pass | ||||
|      | ||||
|     async def on_reaction_add(self, reaction: discord.Reaction, user: discord.User): | ||||
|         pass | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnReactionClearABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_reaction_clear(self, message: discord.Message, reactions: list[discord.Reaction]): pass | ||||
|      | ||||
|     async def on_reaction_clear(self, message: discord.Message, reactions: list[discord.Reaction]): | ||||
|         pass | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnReactionClearEmojiABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_reaction_clear_emoji(self, reaction: discord.Reaction): pass | ||||
|      | ||||
|     async def on_reaction_clear_emoji(self, reaction: discord.Reaction): | ||||
|         pass | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnReactionRemoveABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_reaction_remove(self, reaction: discord.Reaction, user: discord.User): pass | ||||
|      | ||||
|     async def on_reaction_remove(self, reaction: discord.Reaction, user: discord.User): | ||||
|         pass | ||||
|   | ||||
| @@ -2,9 +2,10 @@ from abc import ABC, abstractmethod | ||||
|  | ||||
|  | ||||
| class OnReadyABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|      | ||||
|     @abstractmethod | ||||
|     async def on_ready(self): pass | ||||
|     async def on_ready(self): | ||||
|         pass | ||||
|   | ||||
| @@ -2,9 +2,10 @@ from abc import ABC, abstractmethod | ||||
|  | ||||
|  | ||||
| class OnResumeABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_resume(self): pass | ||||
|     async def on_resume(self): | ||||
|         pass | ||||
|   | ||||
| @@ -5,9 +5,12 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnTypingABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|      | ||||
|     @abstractmethod | ||||
|     async def on_typing(self, channel: discord.abc.Messageable, user: Union[discord.User, discord.Member], when: datetime): pass | ||||
|     async def on_typing( | ||||
|         self, channel: discord.abc.Messageable, user: Union[discord.User, discord.Member], when: datetime | ||||
|     ): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnUserUpdateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_user_update(self, before: discord.User, after: discord.User): pass | ||||
|     async def on_user_update(self, before: discord.User, after: discord.User): | ||||
|         pass | ||||
|   | ||||
| @@ -3,9 +3,12 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnVoiceStateUpdateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_voice_state_update(self, member: discord.Member, before: discord.VoiceState,after: discord.VoiceState): pass | ||||
|     async def on_voice_state_update( | ||||
|         self, member: discord.Member, before: discord.VoiceState, after: discord.VoiceState | ||||
|     ): | ||||
|         pass | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import discord | ||||
|  | ||||
|  | ||||
| class OnWebhooksUpdateABC(ABC): | ||||
|     @abstractmethod | ||||
|     def __init__(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def __init__(self): pass | ||||
|  | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_webhooks_update(self, channel: discord.abc.GuildChannel): pass | ||||
|     async def on_webhooks_update(self, channel: discord.abc.GuildChannel): | ||||
|         pass | ||||
|   | ||||
| @@ -1,21 +1,21 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
|  | ||||
| """ | ||||
| cpl-discord sh-edraft Common Python library Discord | ||||
| cpl-discord CPL Discord | ||||
| ~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| sh-edraft Common Python library link between discord.py and CPL | ||||
| Link between discord.py and CPL | ||||
|  | ||||
| :copyright: (c) 2022 - 2023 sh-edraft.de | ||||
| :license: MIT, see LICENSE for more details. | ||||
|  | ||||
| """ | ||||
|  | ||||
| __title__ = 'cpl_discord.helper' | ||||
| __author__ = 'Sven Heidemann' | ||||
| __license__ = 'MIT' | ||||
| __copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de' | ||||
| __version__ = '2022.12.1' | ||||
| __title__ = "cpl_discord.helper" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "2023.2.0" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,5 +23,5 @@ from collections import namedtuple | ||||
| # imports | ||||
| from .to_containers_converter import ToContainersConverter | ||||
|  | ||||
| VersionInfo = namedtuple('VersionInfo', 'major minor micro') | ||||
| version_info = VersionInfo(major='2022', minor='12', micro='1') | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="2023", minor="2", micro="0") | ||||
|   | ||||
| @@ -4,7 +4,6 @@ from cpl_discord.container.container import Container | ||||
|  | ||||
|  | ||||
| class ToContainersConverter: | ||||
|  | ||||
|     @staticmethod | ||||
|     def convert(_l: Union[list[object], Sequence[object]], _t: type) -> list[Container]: | ||||
|         values = [] | ||||
|   | ||||
| @@ -1,21 +1,21 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
|  | ||||
| """ | ||||
| cpl-discord sh-edraft Common Python library Discord | ||||
| cpl-discord CPL Discord | ||||
| ~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| sh-edraft Common Python library link between discord.py and CPL | ||||
| Link between discord.py and CPL | ||||
|  | ||||
| :copyright: (c) 2022 - 2023 sh-edraft.de | ||||
| :license: MIT, see LICENSE for more details. | ||||
|  | ||||
| """ | ||||
|  | ||||
| __title__ = 'cpl_discord.service' | ||||
| __author__ = 'Sven Heidemann' | ||||
| __license__ = 'MIT' | ||||
| __copyright__ = 'Copyright (c) 2022 - 2023 sh-edraft.de' | ||||
| __version__ = '2022.12.1' | ||||
| __title__ = "cpl_discord.service" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "2023.2.0" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -28,5 +28,5 @@ from .discord_collection import DiscordCollection | ||||
| from .discord_service import DiscordService | ||||
| from .discord_service_abc import DiscordServiceABC | ||||
|  | ||||
| VersionInfo = namedtuple('VersionInfo', 'major minor micro') | ||||
| version_info = VersionInfo(major='2022', minor='12', micro='1') | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="2023", minor="2", micro="0") | ||||
|   | ||||
| @@ -5,10 +5,9 @@ from cpl_discord.events.on_command_error_abc import OnCommandErrorABC | ||||
|  | ||||
|  | ||||
| class CommandErrorHandlerService(OnCommandErrorABC): | ||||
|  | ||||
|     def __init__(self, logger: LoggerABC): | ||||
|         OnCommandErrorABC.__init__(self) | ||||
|         self._logger = logger | ||||
|  | ||||
|     async def on_command_error(self, ctx: Context, error: CommandError): | ||||
|         self._logger.error(__name__, f'Error in command: {ctx.command}', error) | ||||
|         self._logger.error(__name__, f"Error in command: {ctx.command}", error) | ||||
|   | ||||
| @@ -13,15 +13,14 @@ from cpl_query.extension.list import List | ||||
|  | ||||
|  | ||||
| class DiscordBotService(DiscordBotServiceABC): | ||||
|  | ||||
|     def __init__( | ||||
|             self, | ||||
|             config: ConfigurationABC, | ||||
|             logger: LoggerABC, | ||||
|             discord_bot_settings: DiscordBotSettings, | ||||
|             env: ApplicationEnvironmentABC, | ||||
|             logging_st: LoggingSettings, | ||||
|             discord_service: DiscordServiceABC | ||||
|         self, | ||||
|         config: ConfigurationABC, | ||||
|         logger: LoggerABC, | ||||
|         discord_bot_settings: DiscordBotSettings, | ||||
|         env: ApplicationEnvironmentABC, | ||||
|         logging_st: LoggingSettings, | ||||
|         discord_service: DiscordServiceABC, | ||||
|     ): | ||||
|         # services | ||||
|         self._config = config | ||||
| @@ -34,51 +33,57 @@ class DiscordBotService(DiscordBotServiceABC): | ||||
|         self._discord_settings = self._get_settings(discord_bot_settings) | ||||
|  | ||||
|         # setup super | ||||
|         DiscordBotServiceABC.__init__(self, command_prefix=self._discord_settings.prefix, help_command=None, intents=discord.Intents().all()) | ||||
|         DiscordBotServiceABC.__init__( | ||||
|             self, command_prefix=self._discord_settings.prefix, help_command=None, intents=discord.Intents().all() | ||||
|         ) | ||||
|         self._base = super(DiscordBotServiceABC, self) | ||||
|  | ||||
|     @staticmethod | ||||
|     def _is_string_invalid(x): | ||||
|         return x is None or x == '' | ||||
|         return x is None or x == "" | ||||
|  | ||||
|     def _get_settings(self, settings_from_config: DiscordBotSettings) -> DiscordBotSettings: | ||||
|         new_settings = DiscordBotSettings() | ||||
|         token = None if settings_from_config is None else settings_from_config.token | ||||
|         prefix = None if settings_from_config is None else settings_from_config.prefix | ||||
|         env_token = self._config.get_configuration('TOKEN') | ||||
|         env_prefix = self._config.get_configuration('PREFIX') | ||||
|         env_token = self._config.get_configuration("TOKEN") | ||||
|         env_prefix = self._config.get_configuration("PREFIX") | ||||
|  | ||||
|         new_settings.from_dict({ | ||||
|             'Token': env_token if token is None or token == '' else token, | ||||
|             'Prefix': ('! ' if self._is_string_invalid(env_prefix) else env_prefix) if self._is_string_invalid(prefix) else prefix | ||||
|         }) | ||||
|         if new_settings.token is None or new_settings.token == '': | ||||
|             raise Exception('You have to configure discord token by appsettings or environment variables') | ||||
|         new_settings.from_dict( | ||||
|             { | ||||
|                 "Token": env_token if token is None or token == "" else token, | ||||
|                 "Prefix": ("! " if self._is_string_invalid(env_prefix) else env_prefix) | ||||
|                 if self._is_string_invalid(prefix) | ||||
|                 else prefix, | ||||
|             } | ||||
|         ) | ||||
|         if new_settings.token is None or new_settings.token == "": | ||||
|             raise Exception("You have to configure discord token by appsettings or environment variables") | ||||
|         return new_settings | ||||
|  | ||||
|     async def start_async(self): | ||||
|         self._logger.trace(__name__, 'Try to connect to discord') | ||||
|         self._logger.trace(__name__, "Try to connect to discord") | ||||
|         await self.start(self._discord_settings.token) | ||||
|         # continue at on_ready | ||||
|  | ||||
|     async def stop_async(self): | ||||
|         self._logger.trace(__name__, 'Try to disconnect from discord') | ||||
|         self._logger.trace(__name__, "Try to disconnect from discord") | ||||
|         try: | ||||
|             await self.close() | ||||
|         except Exception as e: | ||||
|             self._logger.error(__name__, 'Stop failed', e) | ||||
|             self._logger.error(__name__, "Stop failed", e) | ||||
|  | ||||
|     async def on_ready(self): | ||||
|         self._logger.info(__name__, 'Connected to discord') | ||||
|         self._logger.info(__name__, "Connected to discord") | ||||
|  | ||||
|         self._logger.header(f'{self.user.name}:') | ||||
|         self._logger.header(f"{self.user.name}:") | ||||
|         if self._logging_st.console.value >= LoggingLevelEnum.INFO.value: | ||||
|             Console.banner(self._env.application_name if self._env.application_name != '' else 'A bot') | ||||
|             Console.banner(self._env.application_name if self._env.application_name != "" else "A bot") | ||||
|  | ||||
|         await self._discord_service.init(self) | ||||
|         await self.wait_until_ready() | ||||
|         await self.tree.sync() | ||||
|         self._logger.debug(__name__, f'Finished syncing commands') | ||||
|         self._logger.debug(__name__, f"Finished syncing commands") | ||||
|  | ||||
|         await self._discord_service.on_ready() | ||||
|  | ||||
|   | ||||
| @@ -7,19 +7,22 @@ from cpl_query.extension.list import List | ||||
|  | ||||
|  | ||||
| class DiscordBotServiceABC(commands.Bot): | ||||
|  | ||||
|     def __init__(self, **kwargs): | ||||
|         commands.Bot.__init__(self, **kwargs) | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def start_async(self): pass | ||||
|     async def start_async(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def stop_async(self): pass | ||||
|     async def stop_async(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_ready(self): pass | ||||
|     async def on_ready(self): | ||||
|         pass | ||||
|  | ||||
|     @property | ||||
|     @abstractmethod | ||||
|     def guilds(self) -> List[Guild]: pass | ||||
|     def guilds(self) -> List[Guild]: | ||||
|         pass | ||||
|   | ||||
| @@ -9,7 +9,6 @@ from cpl_query.extension import List | ||||
|  | ||||
|  | ||||
| class DiscordCollection(DiscordCollectionABC): | ||||
|  | ||||
|     def __init__(self, service_collection: ServiceCollectionABC): | ||||
|         DiscordCollectionABC.__init__(self) | ||||
|  | ||||
|   | ||||
| @@ -6,18 +6,21 @@ from cpl_query.extension import List | ||||
|  | ||||
|  | ||||
| class DiscordCollectionABC(ABC): | ||||
|  | ||||
|     def __init__(self): | ||||
|         ABC.__init__(self) | ||||
|  | ||||
|     @abstractmethod | ||||
|     def add_command(self, _t: Type[DiscordCommandABC]): pass | ||||
|     def add_command(self, _t: Type[DiscordCommandABC]): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def get_commands(self) -> List[DiscordCommandABC]: pass | ||||
|     def get_commands(self) -> List[DiscordCommandABC]: | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def add_event(self, _t_event: Type, _t: Type): pass | ||||
|     def add_event(self, _t_event: Type, _t: Type): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def get_events_by_base(self, _t_event: Type): pass | ||||
|     def get_events_by_base(self, _t_event: Type): | ||||
|         pass | ||||
|   | ||||
| @@ -66,13 +66,7 @@ from cpl_discord.service.discord_service_abc import DiscordServiceABC | ||||
|  | ||||
|  | ||||
| class DiscordService(DiscordServiceABC, commands.Cog, metaclass=DiscordCogMeta): | ||||
|  | ||||
|     def __init__( | ||||
|             self, | ||||
|             logger: LoggerABC, | ||||
|             dc_collection: DiscordCollectionABC, | ||||
|             services: ServiceProviderABC | ||||
|     ): | ||||
|     def __init__(self, logger: LoggerABC, dc_collection: DiscordCollectionABC, services: ServiceProviderABC): | ||||
|         DiscordServiceABC.__init__(self) | ||||
|         self._logger = logger | ||||
|         self._collection = dc_collection | ||||
| @@ -87,8 +81,8 @@ class DiscordService(DiscordServiceABC, commands.Cog, metaclass=DiscordCogMeta): | ||||
|             event_instance = self._services.get_service(event_type) | ||||
|  | ||||
|             func_name = event.__name__ | ||||
|             if func_name.endswith('ABC'): | ||||
|                 func_name = func_name.replace('ABC', '') | ||||
|             if func_name.endswith("ABC"): | ||||
|                 func_name = func_name.replace("ABC", "") | ||||
|  | ||||
|             func_name = String.convert_to_snake_case(func_name) | ||||
|  | ||||
| @@ -96,280 +90,286 @@ class DiscordService(DiscordServiceABC, commands.Cog, metaclass=DiscordCogMeta): | ||||
|                 func = getattr(event_instance, func_name) | ||||
|                 await func(*args, **kwargs) | ||||
|             except Exception as e: | ||||
|                 self._logger.error(__name__, f'Cannot execute {func_name} of {type(event_instance).__name__}', e) | ||||
|                 self._logger.error(__name__, f"Cannot execute {func_name} of {type(event_instance).__name__}", e) | ||||
|  | ||||
|     async def init(self, bot: commands.Bot): | ||||
|         try: | ||||
|             await bot.add_cog(self) | ||||
|         except Exception as e: | ||||
|             self._logger.error(__name__, f'{type(self).__name__} initialization failed', e) | ||||
|             self._logger.error(__name__, f"{type(self).__name__} initialization failed", e) | ||||
|  | ||||
|         try: | ||||
|             for command_type in self._collection.get_commands(): | ||||
|                 self._logger.trace(__name__, f'Register command {command_type.__name__}') | ||||
|                 self._logger.trace(__name__, f"Register command {command_type.__name__}") | ||||
|                 command: Cog = self._services.get_service(command_type) | ||||
|                 if command is None: | ||||
|                     self._logger.warn(__name__, f'Instance of {command_type.__name__} not found') | ||||
|                     self._logger.warn(__name__, f"Instance of {command_type.__name__} not found") | ||||
|                     continue | ||||
|                 await bot.add_cog(command) | ||||
|         except Exception as e: | ||||
|             self._logger.error(__name__, f'Registration of commands failed', e) | ||||
|             self._logger.error(__name__, f"Registration of commands failed", e) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_connect(self): | ||||
|         self._logger.trace(__name__, f'Received on_connect') | ||||
|         self._logger.trace(__name__, f"Received on_connect") | ||||
|         await self._handle_event(OnConnectABC) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_command(self, ctx: Context): | ||||
|         self._logger.trace(__name__, f'Received on_command') | ||||
|         self._logger.trace(__name__, f"Received on_command") | ||||
|         await self._handle_event(OnCommandABC, ctx) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_command_error(self, ctx: Context, error: CommandError): | ||||
|         self._logger.trace(__name__, f'Received on_command_error') | ||||
|         self._logger.trace(__name__, f"Received on_command_error") | ||||
|         await self._handle_event(OnCommandErrorABC, ctx, error) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_command_completion(self, ctx: Context): | ||||
|         self._logger.trace(__name__, f'Received on_command_completion') | ||||
|         self._logger.trace(__name__, f"Received on_command_completion") | ||||
|         await self._handle_event(OnCommandCompletionABC, ctx) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_disconnect(self): | ||||
|         self._logger.trace(__name__, f'Received on_disconnect') | ||||
|         self._logger.trace(__name__, f"Received on_disconnect") | ||||
|         await self._handle_event(OnDisconnectABC) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_error(self, event: str, *args, **kwargs): | ||||
|         self._logger.trace(__name__, f'Received on_error') | ||||
|         self._logger.trace(__name__, f"Received on_error") | ||||
|         await self._handle_event(OnErrorABC, event, *args, **kwargs) | ||||
|  | ||||
|     async def on_ready(self): | ||||
|         self._logger.trace(__name__, f'Received on_ready') | ||||
|         self._logger.trace(__name__, f"Received on_ready") | ||||
|         await self._handle_event(OnReadyABC) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_resume(self): | ||||
|         self._logger.trace(__name__, f'Received on_resume') | ||||
|         self._logger.trace(__name__, f"Received on_resume") | ||||
|         await self._handle_event(OnResumeABC) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_error(self, event: str, *args, **kwargs): | ||||
|         self._logger.trace(__name__, f'Received on_error:\n\t{event}\n\t{args}\n\t{kwargs}') | ||||
|         self._logger.trace(__name__, f"Received on_error:\n\t{event}\n\t{args}\n\t{kwargs}") | ||||
|         await self._handle_event(OnReadyABC, event, *args, **kwargs) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_typing(self, channel: discord.abc.Messageable, user: Union[discord.User, discord.Member], when: datetime): | ||||
|         self._logger.trace(__name__, f'Received on_typing:\n\t{channel}\n\t{user}\n\t{when}') | ||||
|     async def on_typing( | ||||
|         self, channel: discord.abc.Messageable, user: Union[discord.User, discord.Member], when: datetime | ||||
|     ): | ||||
|         self._logger.trace(__name__, f"Received on_typing:\n\t{channel}\n\t{user}\n\t{when}") | ||||
|         await self._handle_event(OnTypingABC, channel, user, when) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_message(self, message: discord.Message): | ||||
|         self._logger.trace(__name__, f'Received on_message:\n\t{message}') | ||||
|         self._logger.trace(__name__, f"Received on_message:\n\t{message}") | ||||
|         await self._handle_event(OnMessageABC, message) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_message_delete(self, message: discord.Message): | ||||
|         self._logger.trace(__name__, f'Received on_message_delete:\n\t{message}') | ||||
|         self._logger.trace(__name__, f"Received on_message_delete:\n\t{message}") | ||||
|         await self._handle_event(OnMessageDeleteABC, message) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_bulk_message_delete(self, messages: list[discord.Message]): | ||||
|         self._logger.trace(__name__, f'Received on_bulk_message_delete:\n\t{len(messages)}') | ||||
|         self._logger.trace(__name__, f"Received on_bulk_message_delete:\n\t{len(messages)}") | ||||
|         await self._handle_event(OnBulkMessageDeleteABC, messages) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_message_edit(self, before: discord.Message, after: discord.Message): | ||||
|         self._logger.trace(__name__, f'Received on_message_edit:\n\t{before}\n\t{after}') | ||||
|         self._logger.trace(__name__, f"Received on_message_edit:\n\t{before}\n\t{after}") | ||||
|         await self._handle_event(OnMessageEditABC, before, after) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_raw_reaction_add(self, payload: RawReactionActionEvent): | ||||
|         self._logger.trace(__name__, f'Received on_raw_reaction_add') | ||||
|         self._logger.trace(__name__, f"Received on_raw_reaction_add") | ||||
|         await self._handle_event(OnRawReactionAddABC, payload) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_raw_reaction_remove(self, payload: RawReactionActionEvent): | ||||
|         self._logger.trace(__name__, f'Received on_raw_reaction_remove') | ||||
|         self._logger.trace(__name__, f"Received on_raw_reaction_remove") | ||||
|         await self._handle_event(OnRawReactionRemoveABC, payload) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_raw_reaction_clear(self, payload: RawReactionActionEvent): | ||||
|         self._logger.trace(__name__, f'Received on_raw_reaction_clear') | ||||
|         self._logger.trace(__name__, f"Received on_raw_reaction_clear") | ||||
|         await self._handle_event(OnRawReactionClearABC, payload) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_raw_reaction_clear_emoji(self, payload: RawReactionActionEvent): | ||||
|         self._logger.trace(__name__, f'Received on_raw_reaction_clear_emoji') | ||||
|         self._logger.trace(__name__, f"Received on_raw_reaction_clear_emoji") | ||||
|         await self._handle_event(OnRawReactionClearEmojiABC, payload) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_reaction_add(self, reaction: discord.Reaction, user: discord.User): | ||||
|         self._logger.trace(__name__, f'Received on_reaction_add:\n\t{reaction}\n\t{user}') | ||||
|         self._logger.trace(__name__, f"Received on_reaction_add:\n\t{reaction}\n\t{user}") | ||||
|         await self._handle_event(OnReactionAddABC, reaction, user) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_reaction_remove(self, reaction: discord.Reaction, user: discord.User): | ||||
|         self._logger.trace(__name__, f'Received on_reaction_remove:\n\t{reaction}\n\t{user}') | ||||
|         self._logger.trace(__name__, f"Received on_reaction_remove:\n\t{reaction}\n\t{user}") | ||||
|         await self._handle_event(OnReactionRemoveABC, reaction, user) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_reaction_clear(self, message: discord.Message, reactions: list[discord.Reaction]): | ||||
|         self._logger.trace(__name__, f'Received on_reaction_reon_reaction_clearmove:\n\t{message}\n\t{len(reactions)}') | ||||
|         self._logger.trace(__name__, f"Received on_reaction_reon_reaction_clearmove:\n\t{message}\n\t{len(reactions)}") | ||||
|         await self._handle_event(OnReactionClearABC, message, reactions) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_reaction_clear_emoji(self, reaction: discord.Reaction): | ||||
|         self._logger.trace(__name__, f'Received on_reaction_clear_emoji:\n\t{reaction}') | ||||
|         self._logger.trace(__name__, f"Received on_reaction_clear_emoji:\n\t{reaction}") | ||||
|         await self._handle_event(OnReactionClearEmojiABC, reaction) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_private_channel_delete(self, channel: discord.abc.PrivateChannel): | ||||
|         self._logger.trace(__name__, f'Received on_private_channel_delete:\n\t{channel}') | ||||
|         self._logger.trace(__name__, f"Received on_private_channel_delete:\n\t{channel}") | ||||
|         await self._handle_event(OnPrivateChannelDeleteABC, channel) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_private_channel_create(self, channel: discord.abc.PrivateChannel): | ||||
|         self._logger.trace(__name__, f'Received on_private_channel_create:\n\t{channel}') | ||||
|         self._logger.trace(__name__, f"Received on_private_channel_create:\n\t{channel}") | ||||
|         await self._handle_event(OnPrivateChannelCreateABC, channel) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_private_channel_update(self, before: discord.GroupChannel, after: discord.GroupChannel): | ||||
|         self._logger.trace(__name__, f'Received on_private_channel_update:\n\t{before}\n\t{after}') | ||||
|         self._logger.trace(__name__, f"Received on_private_channel_update:\n\t{before}\n\t{after}") | ||||
|         await self._handle_event(OnPrivateChannelUpdateABC, before, after) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_private_channel_pins_update(self, channel: discord.abc.PrivateChannel, list_pin: Optional[datetime]): | ||||
|         self._logger.trace(__name__, f'Received on_private_channel_pins_update:\n\t{channel}\n\t{list_pin}') | ||||
|         self._logger.trace(__name__, f"Received on_private_channel_pins_update:\n\t{channel}\n\t{list_pin}") | ||||
|         await self._handle_event(OnPrivateChannelPinsUpdateABC, channel, list_pin) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_channel_delete(self, channel: discord.abc.GuildChannel): | ||||
|         self._logger.trace(__name__, f'Received on_guild_channel_delete:\n\t{channel}') | ||||
|         self._logger.trace(__name__, f"Received on_guild_channel_delete:\n\t{channel}") | ||||
|         await self._handle_event(OnGuildChannelDeleteABC, channel) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_channel_create(self, channel: discord.abc.GuildChannel): | ||||
|         self._logger.trace(__name__, f'Received on_guild_channel_create:\n\t{channel}') | ||||
|         self._logger.trace(__name__, f"Received on_guild_channel_create:\n\t{channel}") | ||||
|         await self._handle_event(OnGuildChannelCreateABC, channel) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_channel_update(self, before: discord.abc.GuildChannel, after: discord.abc.GuildChannel): | ||||
|         self._logger.trace(__name__, f'Received on_guild_channel_update:\n\t{before}\n\t{after}') | ||||
|         self._logger.trace(__name__, f"Received on_guild_channel_update:\n\t{before}\n\t{after}") | ||||
|         await self._handle_event(OnGuildChannelUpdateABC, before, after) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_channel_pins_update(self, channel: discord.abc.GuildChannel, list_pin: Optional[datetime]): | ||||
|         self._logger.trace(__name__, f'Received on_guild_channel_pins_update:\n\t{channel}\n\t{list_pin}') | ||||
|         self._logger.trace(__name__, f"Received on_guild_channel_pins_update:\n\t{channel}\n\t{list_pin}") | ||||
|         await self._handle_event(OnGuildChannelPinsUpdateABC, channel, list_pin) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_integrations_update(self, guild: discord.Guild): | ||||
|         self._logger.trace(__name__, f'Received on_guild_integrations_update:\n\t{guild}') | ||||
|         self._logger.trace(__name__, f"Received on_guild_integrations_update:\n\t{guild}") | ||||
|         await self._handle_event(OnGuildIntegrationsUpdateABC, guild) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_webhooks_update(self, channel: discord.abc.GuildChannel): | ||||
|         self._logger.trace(__name__, f'Received on_webhooks_update:\n\t{channel}') | ||||
|         self._logger.trace(__name__, f"Received on_webhooks_update:\n\t{channel}") | ||||
|         await self._handle_event(OnWebhooksUpdateABC, channel) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_member_join(self, member: discord.Member): | ||||
|         self._logger.trace(__name__, f'Received on_member_join:\n\t{member}') | ||||
|         self._logger.trace(__name__, f"Received on_member_join:\n\t{member}") | ||||
|         await self._handle_event(OnMemberJoinABC, member) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_member_remove(self, member: discord.Member): | ||||
|         self._logger.trace(__name__, f'Received on_member_remove:\n\t{member}') | ||||
|         self._logger.trace(__name__, f"Received on_member_remove:\n\t{member}") | ||||
|         await self._handle_event(OnMemberRemoveABC, member) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_member_update(self, before: discord.Member, after: discord.Member): | ||||
|         self._logger.trace(__name__, f'Received on_member_update:\n\t{before}\n\t{after}') | ||||
|         self._logger.trace(__name__, f"Received on_member_update:\n\t{before}\n\t{after}") | ||||
|         await self._handle_event(OnMemberUpdateABC, before, after) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_user_update(self, before: discord.User, after: discord.User): | ||||
|         self._logger.trace(__name__, f'Received on_user_update:\n\t{before}\n\t{after}') | ||||
|         self._logger.trace(__name__, f"Received on_user_update:\n\t{before}\n\t{after}") | ||||
|         await self._handle_event(OnUserUpdateABC, before, after) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_join(self, guild: discord.Guild): | ||||
|         self._logger.trace(__name__, f'Received on_guild_join:\n\t{guild}') | ||||
|         self._logger.trace(__name__, f"Received on_guild_join:\n\t{guild}") | ||||
|         await self._handle_event(OnGuildJoinABC, guild) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_remove(self, guild: discord.Guild): | ||||
|         self._logger.trace(__name__, f'Received on_guild_remove:\n\t{guild}') | ||||
|         self._logger.trace(__name__, f"Received on_guild_remove:\n\t{guild}") | ||||
|         await self._handle_event(OnGuildRemoveABC, guild) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_update(self, before: discord.Guild, after: discord.Guild): | ||||
|         self._logger.trace(__name__, f'Received on_guild_update:\n\t{before}\n\t{after}') | ||||
|         self._logger.trace(__name__, f"Received on_guild_update:\n\t{before}\n\t{after}") | ||||
|         await self._handle_event(OnGuildUpdateABC, before, after) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_role_create(self, role: discord.Role): | ||||
|         self._logger.trace(__name__, f'Received on_guild_role_create:\n\t{role}') | ||||
|         self._logger.trace(__name__, f"Received on_guild_role_create:\n\t{role}") | ||||
|         await self._handle_event(OnGuildRoleCreateABC, role) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_role_delete(self, role: discord.Role): | ||||
|         self._logger.trace(__name__, f'Received on_guild_role_delete:\n\t{role}') | ||||
|         self._logger.trace(__name__, f"Received on_guild_role_delete:\n\t{role}") | ||||
|         await self._handle_event(OnGuildRoleDeleteABC, role) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_role_update(self, before: discord.Role, after: discord.Role): | ||||
|         self._logger.trace(__name__, f'Received on_guild_role_update:\n\t{before}\n\t{after}') | ||||
|         self._logger.trace(__name__, f"Received on_guild_role_update:\n\t{before}\n\t{after}") | ||||
|         await self._handle_event(OnGuildRoleUpdateABC, before, after) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_emojis_update(self, guild: discord.Guild, before: Sequence[discord.Emoji], after: Sequence[discord.Emoji]): | ||||
|         self._logger.trace(__name__, f'Received on_guild_emojis_update:\n\t{guild}\n\t{before}\n\t{after}') | ||||
|     async def on_guild_emojis_update( | ||||
|         self, guild: discord.Guild, before: Sequence[discord.Emoji], after: Sequence[discord.Emoji] | ||||
|     ): | ||||
|         self._logger.trace(__name__, f"Received on_guild_emojis_update:\n\t{guild}\n\t{before}\n\t{after}") | ||||
|         await self._handle_event(OnGuildEmojisUpdateABC, guild, before, after) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_available(self, guild: discord.Guild): | ||||
|         self._logger.trace(__name__, f'Received on_guild_available:\n\t{guild}') | ||||
|         self._logger.trace(__name__, f"Received on_guild_available:\n\t{guild}") | ||||
|         await self._handle_event(OnGuildAvailableABC, guild) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_guild_unavailable(self, guild: discord.Guild): | ||||
|         self._logger.trace(__name__, f'Received on_guild_unavailable:\n\t{guild}') | ||||
|         self._logger.trace(__name__, f"Received on_guild_unavailable:\n\t{guild}") | ||||
|         await self._handle_event(OnGuildUnavailableABC, guild) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_voice_state_update(self, member: discord.Member, before: discord.VoiceState, after: discord.VoiceState): | ||||
|         self._logger.trace(__name__, f'Received on_voice_state_update:\n\t{member}\n\t{before}\n\t{after}') | ||||
|     async def on_voice_state_update( | ||||
|         self, member: discord.Member, before: discord.VoiceState, after: discord.VoiceState | ||||
|     ): | ||||
|         self._logger.trace(__name__, f"Received on_voice_state_update:\n\t{member}\n\t{before}\n\t{after}") | ||||
|         await self._handle_event(OnVoiceStateUpdateABC, member, before, after) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_member_ban(self, guild: discord.Guild, user: discord.User): | ||||
|         self._logger.trace(__name__, f'Received on_member_ban:\n\t{guild}\n\t{user}') | ||||
|         self._logger.trace(__name__, f"Received on_member_ban:\n\t{guild}\n\t{user}") | ||||
|         await self._handle_event(OnMemberBanABC, guild, user) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_member_unban(self, guild: discord.Guild, user: discord.User): | ||||
|         self._logger.trace(__name__, f'Received on_member_unban:\n\t{guild}\n\t{user}') | ||||
|         self._logger.trace(__name__, f"Received on_member_unban:\n\t{guild}\n\t{user}") | ||||
|         await self._handle_event(OnMemberUnbanABC, guild, user) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_invite_create(self, invite: discord.Invite): | ||||
|         self._logger.trace(__name__, f'Received on_invite_create:\n\t{invite}') | ||||
|         self._logger.trace(__name__, f"Received on_invite_create:\n\t{invite}") | ||||
|         await self._handle_event(OnInviteCreateABC, invite) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_invite_delete(self, invite: discord.Invite): | ||||
|         self._logger.trace(__name__, f'Received on_invite_create:\n\t{invite}') | ||||
|         self._logger.trace(__name__, f"Received on_invite_create:\n\t{invite}") | ||||
|         await self._handle_event(OnInviteDeleteABC, invite) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_group_join(self, channel: discord.GroupChannel, user: discord.User): | ||||
|         self._logger.trace(__name__, f'Received on_group_join:\n\t{channel}\n\t{user}') | ||||
|         self._logger.trace(__name__, f"Received on_group_join:\n\t{channel}\n\t{user}") | ||||
|         await self._handle_event(OnGroupJoinABC, channel, user) | ||||
|  | ||||
|     @commands.Cog.listener() | ||||
|     async def on_group_remove(self, channel: discord.GroupChannel, user: discord.User): | ||||
|         self._logger.trace(__name__, f'Received on_group_remove:\n\t{channel}\n\t{user}') | ||||
|         self._logger.trace(__name__, f"Received on_group_remove:\n\t{channel}\n\t{user}") | ||||
|         await self._handle_event(OnGroupRemoveABC, channel, user) | ||||
|   | ||||
| @@ -7,153 +7,207 @@ from discord.ext import commands | ||||
|  | ||||
|  | ||||
| class DiscordServiceABC(ABC): | ||||
|  | ||||
|     def __init__(self): | ||||
|         ABC.__init__(self) | ||||
|  | ||||
|     @abstractmethod | ||||
|     def init(self, bot: commands.Bot): pass | ||||
|     def init(self, bot: commands.Bot): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_connect(self): pass | ||||
|     async def on_connect(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_command(self): pass | ||||
|     async def on_command(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_command_error(self): pass | ||||
|     async def on_command_error(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_command_completion(self): pass | ||||
|     async def on_command_completion(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_disconnect(self): pass | ||||
|     async def on_disconnect(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_error(self, event: str, *args, **kwargs): pass | ||||
|     async def on_error(self, event: str, *args, **kwargs): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_ready(self): pass | ||||
|     async def on_ready(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_resume(self): pass | ||||
|     async def on_resume(self): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_error(self, event: str, *args, **kwargs): pass | ||||
|     async def on_error(self, event: str, *args, **kwargs): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_typing(self, channel: discord.abc.Messageable, user: Union[discord.User, discord.Member], when: datetime): pass | ||||
|     async def on_typing( | ||||
|         self, channel: discord.abc.Messageable, user: Union[discord.User, discord.Member], when: datetime | ||||
|     ): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_message(self, message: discord.Message): pass | ||||
|     async def on_message(self, message: discord.Message): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_message_delete(self, message: discord.Message): pass | ||||
|     async def on_message_delete(self, message: discord.Message): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_bulk_message_delete(self, messages: list[discord.Message]): pass | ||||
|     async def on_bulk_message_delete(self, messages: list[discord.Message]): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_message_edit(self, before: discord.Message, after: discord.Message): pass | ||||
|     async def on_message_edit(self, before: discord.Message, after: discord.Message): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_reaction_add(self, reaction: discord.Reaction, user: discord.User): pass | ||||
|     async def on_reaction_add(self, reaction: discord.Reaction, user: discord.User): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_reaction_remove(self, reaction: discord.Reaction, user: discord.User): pass | ||||
|     async def on_reaction_remove(self, reaction: discord.Reaction, user: discord.User): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_reaction_clear(self, message: discord.Message, reactions: list[discord.Reaction]): pass | ||||
|     async def on_reaction_clear(self, message: discord.Message, reactions: list[discord.Reaction]): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_reaction_clear_emoji(self, reaction: discord.Reaction): pass | ||||
|     async def on_reaction_clear_emoji(self, reaction: discord.Reaction): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_private_channel_delete(self, channel: discord.abc.PrivateChannel): pass | ||||
|     async def on_private_channel_delete(self, channel: discord.abc.PrivateChannel): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_private_channel_create(self, channel: discord.abc.PrivateChannel): pass | ||||
|     async def on_private_channel_create(self, channel: discord.abc.PrivateChannel): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_private_channel_update(self, before: discord.GroupChannel, after: discord.GroupChannel): pass | ||||
|     async def on_private_channel_update(self, before: discord.GroupChannel, after: discord.GroupChannel): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_private_channel_pins_update(self, channel: discord.abc.PrivateChannel, list_pin: Optional[datetime]): pass | ||||
|     async def on_private_channel_pins_update(self, channel: discord.abc.PrivateChannel, list_pin: Optional[datetime]): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_channel_delete(self, channel: discord.abc.GuildChannel): pass | ||||
|     async def on_guild_channel_delete(self, channel: discord.abc.GuildChannel): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_channel_create(self, channel: discord.abc.GuildChannel): pass | ||||
|     async def on_guild_channel_create(self, channel: discord.abc.GuildChannel): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_channel_update(self, before: discord.abc.GuildChannel, after: discord.abc.GuildChannel): pass | ||||
|     async def on_guild_channel_update(self, before: discord.abc.GuildChannel, after: discord.abc.GuildChannel): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_channel_pins_update(self, channel: discord.abc.GuildChannel, list_pin: Optional[datetime]): pass | ||||
|     async def on_guild_channel_pins_update(self, channel: discord.abc.GuildChannel, list_pin: Optional[datetime]): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_integrations_update(self, guild: discord.Guild): pass | ||||
|     async def on_guild_integrations_update(self, guild: discord.Guild): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_webhooks_update(self, channel: discord.abc.GuildChannel): pass | ||||
|     async def on_webhooks_update(self, channel: discord.abc.GuildChannel): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_member_join(self, member: discord.Member): pass | ||||
|     async def on_member_join(self, member: discord.Member): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_member_remove(self, member: discord.Member): pass | ||||
|     async def on_member_remove(self, member: discord.Member): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_member_update(self, before: discord.Member, after: discord.Member): pass | ||||
|     async def on_member_update(self, before: discord.Member, after: discord.Member): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_user_update(self, before: discord.User, after: discord.User): pass | ||||
|     async def on_user_update(self, before: discord.User, after: discord.User): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_join(self, guild: discord.Guild): pass | ||||
|     async def on_guild_join(self, guild: discord.Guild): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_remove(self, guild: discord.Guild): pass | ||||
|     async def on_guild_remove(self, guild: discord.Guild): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_update(self, before: discord.Guild, after: discord.Guild): pass | ||||
|     async def on_guild_update(self, before: discord.Guild, after: discord.Guild): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_role_create(self, role: discord.Role): pass | ||||
|     async def on_guild_role_create(self, role: discord.Role): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_role_delete(self, role: discord.Role): pass | ||||
|     async def on_guild_role_delete(self, role: discord.Role): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_role_update(self, before: discord.Role, after: discord.Role): pass | ||||
|     async def on_guild_role_update(self, before: discord.Role, after: discord.Role): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_emojis_update(self, guild: discord.Guild, before: Sequence[discord.Emoji], after: Sequence[discord.Emoji]): pass | ||||
|     async def on_guild_emojis_update( | ||||
|         self, guild: discord.Guild, before: Sequence[discord.Emoji], after: Sequence[discord.Emoji] | ||||
|     ): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_available(self, guild: discord.Guild): pass | ||||
|     async def on_guild_available(self, guild: discord.Guild): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_guild_unavailable(self, guild: discord.Guild): pass | ||||
|     async def on_guild_unavailable(self, guild: discord.Guild): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_voice_state_update(self, member: discord.Member, before: discord.VoiceState, after: discord.VoiceState): pass | ||||
|     async def on_voice_state_update( | ||||
|         self, member: discord.Member, before: discord.VoiceState, after: discord.VoiceState | ||||
|     ): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_member_ban(self, guild: discord.Guild, user: discord.User): pass | ||||
|     async def on_member_ban(self, guild: discord.Guild, user: discord.User): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_member_unban(self, guild: discord.Guild, user: discord.User): pass | ||||
|     async def on_member_unban(self, guild: discord.Guild, user: discord.User): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_invite_create(self, invite: discord.Invite): pass | ||||
|     async def on_invite_create(self, invite: discord.Invite): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_invite_delete(self, invite: discord.Invite): pass | ||||
|     async def on_invite_delete(self, invite: discord.Invite): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_group_join(self, chhanel: discord.GroupChannel, user: discord.User): pass | ||||
|     async def on_group_join(self, chhanel: discord.GroupChannel, user: discord.User): | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     async def on_group_remove(self, chhanel: discord.GroupChannel, user: discord.User): pass | ||||
|     async def on_group_remove(self, chhanel: discord.GroupChannel, user: discord.User): | ||||
|         pass | ||||
|   | ||||
		Reference in New Issue
	
	Block a user