Added info command
This commit is contained in:
		| @@ -7,6 +7,7 @@ from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum | ||||
|  | ||||
| from modules.base.command.afk_command import AFKCommand | ||||
| from modules.base.command.help_command import HelpCommand | ||||
| from modules.base.command.info_command import InfoCommand | ||||
| from modules.base.command.ping_command import PingCommand | ||||
| from modules.base.command.purge_command import PurgeCommand | ||||
| from modules.base.events.base_on_member_join_event import BaseOnMemberJoinEvent | ||||
| @@ -33,6 +34,7 @@ class StartupDiscordExtension(StartupExtensionABC): | ||||
|         """ commands """ | ||||
|         dc.add_command(AFKCommand) | ||||
|         dc.add_command(HelpCommand) | ||||
|         dc.add_command(InfoCommand) | ||||
|         dc.add_command(PingCommand) | ||||
|         dc.add_command(PurgeCommand) | ||||
|         """ events """ | ||||
|   | ||||
| @@ -12,7 +12,22 @@ | ||||
|       "purge_message": "Na gut..., ich lösche alle Nachrichten wenns sein muss.", | ||||
|       "afk_command_channel_missing_message": "Zu unfähig einem Sprachkanal beizutreten?", | ||||
|       "afk_command_move_message": "Ich verschiebe dich ja schon... (◔_◔)", | ||||
|       "pong": "Pong" | ||||
|       "pong": "Pong", | ||||
|       "user_info": { | ||||
|         "title": "Gismo", | ||||
|         "description": "Informationen über mich", | ||||
|         "fields": { | ||||
|           "version": "Version", | ||||
|           "ontime": "Ontime", | ||||
|           "sent_message_count": "Gesendete Nachrichten", | ||||
|           "received_message_count": "Empfangene Nachrichten", | ||||
|           "deleted_message_count": "Gelöschte Nachrichten", | ||||
|           "received_command_count": "Empfangene Befehle", | ||||
|           "moved_users_count": "Verschobene Benutzer", | ||||
|           "modules": "Module" | ||||
|         }, | ||||
|         "footer": "" | ||||
|       } | ||||
|     }, | ||||
|     "boot_log": { | ||||
|       "login_message": "Ich bin on the line :D\nDer Scheiß hat {} Sekunden gedauert" | ||||
|   | ||||
							
								
								
									
										25
									
								
								src/bot_core/model/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/bot_core/model/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
|  | ||||
| """ | ||||
| gismo sh-edraft Gismo | ||||
| ~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| sh-edraft Dicord bot Gismo | ||||
|  | ||||
| :copyright: (c) 2021 - 2022 sh-edraft.de | ||||
| :license: MIT, see LICENSE for more details. | ||||
|  | ||||
| """ | ||||
|  | ||||
| __title__ = 'gismo_core.model' | ||||
| __author__ = 'Sven Heidemann' | ||||
| __license__ = 'MIT' | ||||
| __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' | ||||
| __version__ = '0.4.2' | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| # imports | ||||
|  | ||||
| VersionInfo = namedtuple('VersionInfo', 'major minor micro') | ||||
| version_info = VersionInfo(major='0', minor='4', micro='2') | ||||
							
								
								
									
										58
									
								
								src/bot_core/model/embed_description.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/bot_core/model/embed_description.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| from bot_core.model.embed_description_field import EmbedDescriptionField | ||||
|  | ||||
|  | ||||
| class EmbedDescription: | ||||
|  | ||||
|     def __init__( | ||||
|             self, | ||||
|             title: str = None, | ||||
|             description: str = None, | ||||
|             url: str = None, | ||||
|             color: str = None, | ||||
|             fields: list[EmbedDescriptionField] = None, | ||||
|             footer: str = None | ||||
|     ): | ||||
|         self._title = title | ||||
|         self._description = description | ||||
|         self._url = url | ||||
|         self._color = color | ||||
|         self._fields = fields | ||||
|         self._footer = footer | ||||
|  | ||||
|     @property | ||||
|     def title(self) -> str: | ||||
|         return self._title | ||||
|  | ||||
|     @title.setter | ||||
|     def title(self, value: str): | ||||
|         self._title = value | ||||
|  | ||||
|     @property | ||||
|     def description(self) -> str: | ||||
|         return self._description | ||||
|  | ||||
|     @description.setter | ||||
|     def description(self, value: str): | ||||
|         self._description = value | ||||
|  | ||||
|     @property | ||||
|     def url(self) -> str: | ||||
|         return self._url | ||||
|  | ||||
|     @property | ||||
|     def color(self) -> str: | ||||
|         return self._color | ||||
|  | ||||
|     @property | ||||
|     def fields(self) -> list[EmbedDescriptionField]: | ||||
|         return self._fields | ||||
|  | ||||
|     @fields.setter | ||||
|     def fields(self, value: list[EmbedDescriptionField]): | ||||
|         self._fields = value | ||||
|  | ||||
|     @property | ||||
|     def footer(self) -> str: | ||||
|         return self._footer | ||||
|  | ||||
|  | ||||
							
								
								
									
										27
									
								
								src/bot_core/model/embed_description_field.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/bot_core/model/embed_description_field.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| class EmbedDescriptionField: | ||||
|  | ||||
|     def __init__( | ||||
|             self, | ||||
|             name: str, | ||||
|             value: str, | ||||
|             inline: bool | ||||
|     ): | ||||
|         self._name = name | ||||
|         self._value = value | ||||
|         self._inline = inline | ||||
|  | ||||
|     @property | ||||
|     def name(self) -> str: | ||||
|         return self._name | ||||
|  | ||||
|     @property | ||||
|     def value(self) -> str: | ||||
|         return self._value | ||||
|  | ||||
|     @value.setter | ||||
|     def value(self, value: str): | ||||
|         self._value = value | ||||
|  | ||||
|     @property | ||||
|     def inline(self) -> bool: | ||||
|         return self._inline | ||||
							
								
								
									
										23
									
								
								src/bot_core/service/embed_service.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/bot_core/service/embed_service.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| import discord | ||||
|  | ||||
| from bot_core.model.embed_description import EmbedDescription | ||||
|  | ||||
|  | ||||
| class EmbedService: | ||||
|  | ||||
|     @staticmethod | ||||
|     def get_embed(description: EmbedDescription) -> discord.Embed: | ||||
|         embed = discord.Embed( | ||||
|             title=description.title, | ||||
|             url=description.url, | ||||
|             description=description.description, | ||||
|             color=int(description.color, 16) | ||||
|         ) | ||||
|  | ||||
|         for field in description.fields: | ||||
|             embed.add_field(name=field.name, value=field.value, inline=field.inline) | ||||
|  | ||||
|         if description.footer is not None: | ||||
|             embed.set_footer(text=description.footer) | ||||
|  | ||||
|         return embed | ||||
							
								
								
									
										91
									
								
								src/modules/base/command/info_command.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								src/modules/base/command/info_command.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,91 @@ | ||||
| from datetime import datetime | ||||
|  | ||||
| from cpl_core.configuration import ConfigurationABC | ||||
| from cpl_core.logging import LoggerABC | ||||
| from cpl_discord.command import DiscordCommandABC | ||||
| from cpl_discord.service import DiscordBotServiceABC | ||||
| from cpl_query.extension import List | ||||
| from cpl_translation import TranslatePipe | ||||
| from discord.ext import commands | ||||
| from discord.ext.commands import Context | ||||
|  | ||||
| import bot | ||||
| from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC | ||||
| from bot_core.abc.message_service_abc import MessageServiceABC | ||||
| from bot_core.model.embed_description import EmbedDescription | ||||
| from bot_core.model.embed_description_field import EmbedDescriptionField | ||||
| from bot_core.service.embed_service import EmbedService | ||||
| from modules.base.configuration.base_server_settings import BaseServerSettings | ||||
|  | ||||
|  | ||||
| class InfoCommand(DiscordCommandABC): | ||||
|  | ||||
|     def __init__( | ||||
|             self, | ||||
|             config: ConfigurationABC, | ||||
|             logger: LoggerABC, | ||||
|             message_service: MessageServiceABC, | ||||
|             bot: DiscordBotServiceABC, | ||||
|             client_utils: ClientUtilsServiceABC, | ||||
|             translate: TranslatePipe | ||||
|     ): | ||||
|         DiscordCommandABC.__init__(self) | ||||
|  | ||||
|         self._config = config | ||||
|         self._logger = logger | ||||
|         self._message_service = message_service | ||||
|         self._bot = bot | ||||
|         self._client_utils = client_utils | ||||
|         self._t = translate | ||||
|  | ||||
|         self._logger.trace(__name__, f'Loaded command service: {type(self).__name__}') | ||||
|  | ||||
|     @commands.command() | ||||
|     async def info(self, ctx: Context): | ||||
|         self._logger.debug(__name__, f'Received command info {ctx}') | ||||
|         self._client_utils.received_command(ctx.guild.id) | ||||
|         client = self._client_utils.get_client(self._bot.user.id, ctx.guild.id) | ||||
|         settings: BaseServerSettings = self._config.get_configuration(f'BaseServerSettings_{ctx.guild.id}') | ||||
|  | ||||
|         embed_description = EmbedDescription( | ||||
|             self._t.transform('modules.base.user_info.title'), | ||||
|             self._t.transform('modules.base.user_info.description'), | ||||
|             '', | ||||
|             'ef9d0d', | ||||
|             List(EmbedDescriptionField), | ||||
|             self._t.transform('modules.base.user_info.footer'), | ||||
|         ) | ||||
|  | ||||
|         embed_description.fields.append( | ||||
|             EmbedDescriptionField(self._t.transform('modules.base.user_info.fields.version'), bot.__version__, True) | ||||
|         ) | ||||
|         start_time = self._config.get_configuration('Bot_StartTime') | ||||
|         ontime = round((datetime.now() - datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S.%f')).total_seconds() / 3600, 2) | ||||
|         embed_description.fields.append( | ||||
|             EmbedDescriptionField(self._t.transform('modules.base.user_info.fields.ontime'), f'{ontime}h', True) | ||||
|         ) | ||||
|         embed_description.fields.append( | ||||
|             EmbedDescriptionField(self._t.transform('modules.base.user_info.fields.sent_message_count'), client.sent_message_count, True) | ||||
|         ) | ||||
|         embed_description.fields.append( | ||||
|             EmbedDescriptionField(self._t.transform('modules.base.user_info.fields.received_message_count'), client.received_message_count, True) | ||||
|         ) | ||||
|         embed_description.fields.append( | ||||
|             EmbedDescriptionField(self._t.transform('modules.base.user_info.fields.deleted_message_count'), client.deleted_message_count, True) | ||||
|         ) | ||||
|         embed_description.fields.append( | ||||
|             EmbedDescriptionField(self._t.transform('modules.base.user_info.fields.received_command_count'), client.received_command_count, True) | ||||
|         ) | ||||
|         embed_description.fields.append( | ||||
|             EmbedDescriptionField(self._t.transform('modules.base.user_info.fields.moved_users_count'), client.moved_users_count, False) | ||||
|         ) | ||||
|         modules = ['Base', 'BootLog', 'Database', 'Permission'] | ||||
|         embed_description.fields.append( | ||||
|             EmbedDescriptionField(self._t.transform('modules.base.user_info.fields.modules'), '\n'.join(modules), False) | ||||
|         ) | ||||
|  | ||||
|         await self._message_service.send_ctx_msg( | ||||
|             ctx, | ||||
|             EmbedService.get_embed(embed_description) | ||||
|         ) | ||||
|         self._logger.trace(__name__, f'Finished info command') | ||||
| @@ -1,94 +0,0 @@ | ||||
| from datetime import datetime | ||||
|  | ||||
| from cpl_core.configuration import ConfigurationABC | ||||
| from cpl_core.logging import LoggerABC | ||||
| from cpl_discord.command import DiscordCommandABC | ||||
| from cpl_discord.service import DiscordBotServiceABC | ||||
| from cpl_query.extension import List | ||||
| from discord.ext import commands | ||||
| from discord.ext.commands import Context | ||||
|  | ||||
| import bot | ||||
| from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC | ||||
| from bot_core.abc.message_service_abc import MessageServiceABC | ||||
| from modules.base.configuration.base_server_settings import BaseServerSettings | ||||
|  | ||||
|  | ||||
| class InfoCommandService(DiscordCommandABC): | ||||
|  | ||||
|     def __init__( | ||||
|             self, | ||||
|             config: ConfigurationABC, | ||||
|             logger: LoggerABC, | ||||
|             message_service: MessageServiceABC, | ||||
|             bot: DiscordBotServiceABC, | ||||
|             client_utils: ClientUtilsServiceABC | ||||
|     ): | ||||
|         DiscordCommandABC.__init__(self) | ||||
|  | ||||
|         self._config = config | ||||
|         self._logger = logger | ||||
|         self._message_service = message_service | ||||
|         self._bot = bot | ||||
|         self._client_utils = client_utils | ||||
|  | ||||
|         self._logger.trace(__name__, f'Loaded command service: {type(self).__name__}') | ||||
|  | ||||
|     @commands.command() | ||||
|     async def info(self, ctx: Context): | ||||
|         # | ||||
|         # Todo: Use native embeds!!! | ||||
|         # | ||||
|         self._logger.debug(__name__, f'Received command info {ctx}') | ||||
|         self._client_utils.received_command(ctx.guild.id) | ||||
|         client = self._client_utils.get_client(self._bot.user.id, ctx.guild.id) | ||||
|         settings: BaseServerSettings = self._config.get_configuration(f'BaseServerSettings_{ctx.guild.id}') | ||||
|  | ||||
|         embed_description = EmbedDescription( | ||||
|             settings.info_command_message.embed_description.title, | ||||
|             settings.info_command_message.embed_description.description, | ||||
|             settings.info_command_message.embed_description.url, | ||||
|             settings.info_command_message.embed_description.color, | ||||
|             List(EmbedDescriptionField), | ||||
|             settings.info_command_message.embed_description.footer | ||||
|         ) | ||||
|  | ||||
|         for i in range(len(settings.info_command_message.embed_description.fields)): | ||||
|             settings_field = settings.info_command_message.embed_description.fields[i] | ||||
|             field = EmbedDescriptionField(settings_field.name, settings_field.value, settings_field.inline) | ||||
|  | ||||
|             if settings_field.value == '$version': | ||||
|                 field.value = bot.__version__ | ||||
|  | ||||
|             elif settings_field.value == '$ontime': | ||||
|                 start_time = self._config.get_configuration('Bot_StartTime') | ||||
|                 ontime = round((datetime.now() - datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S.%f')).total_seconds()/3600, 2) | ||||
|                 field.value = f'{ontime}h' | ||||
|  | ||||
|             elif settings_field.value == '$sent_message_count': | ||||
|                 field.value = client.sent_message_count | ||||
|  | ||||
|             elif settings_field.value == '$received_message_count': | ||||
|                 field.value = client.received_message_count | ||||
|  | ||||
|             elif settings_field.value == '$deleted_message_count': | ||||
|                 field.value = client.deleted_message_count | ||||
|  | ||||
|             elif settings_field.value == '$received_command_count': | ||||
|                 field.value = client.received_command_count | ||||
|  | ||||
|             elif settings_field.value == '$moved_users_count': | ||||
|                 field.value = client.moved_users_count | ||||
|  | ||||
|             elif settings_field.value == '$modules': | ||||
|                 field.value = '' | ||||
|                 for module in ModuleABC.__subclasses__(): | ||||
|                     field.value += f'{module.__name__}\n' | ||||
|  | ||||
|             embed_description.fields.append(field) | ||||
|  | ||||
|         await self._message_service.send_ctx_msg( | ||||
|             ctx, | ||||
|             EmbedService.get_embed(embed_description) | ||||
|         ) | ||||
|         self._logger.trace(__name__, f'Finished info command') | ||||
		Reference in New Issue
	
	Block a user