Added info command
This commit is contained in:
parent
255dabc90d
commit
89c2d192c8
@ -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.afk_command import AFKCommand
|
||||||
from modules.base.command.help_command import HelpCommand
|
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.ping_command import PingCommand
|
||||||
from modules.base.command.purge_command import PurgeCommand
|
from modules.base.command.purge_command import PurgeCommand
|
||||||
from modules.base.events.base_on_member_join_event import BaseOnMemberJoinEvent
|
from modules.base.events.base_on_member_join_event import BaseOnMemberJoinEvent
|
||||||
@ -33,6 +34,7 @@ class StartupDiscordExtension(StartupExtensionABC):
|
|||||||
""" commands """
|
""" commands """
|
||||||
dc.add_command(AFKCommand)
|
dc.add_command(AFKCommand)
|
||||||
dc.add_command(HelpCommand)
|
dc.add_command(HelpCommand)
|
||||||
|
dc.add_command(InfoCommand)
|
||||||
dc.add_command(PingCommand)
|
dc.add_command(PingCommand)
|
||||||
dc.add_command(PurgeCommand)
|
dc.add_command(PurgeCommand)
|
||||||
""" events """
|
""" events """
|
||||||
|
@ -12,7 +12,22 @@
|
|||||||
"purge_message": "Na gut..., ich lösche alle Nachrichten wenns sein muss.",
|
"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_channel_missing_message": "Zu unfähig einem Sprachkanal beizutreten?",
|
||||||
"afk_command_move_message": "Ich verschiebe dich ja schon... (◔_◔)",
|
"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": {
|
"boot_log": {
|
||||||
"login_message": "Ich bin on the line :D\nDer Scheiß hat {} Sekunden gedauert"
|
"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')
|
|
Loading…
Reference in New Issue
Block a user