Added logic to handle max message xp per hour #168
This commit is contained in:
		@@ -6,7 +6,7 @@ from discord import VoiceChannel
 | 
			
		||||
from discord.ext import commands
 | 
			
		||||
from discord.ext.commands import Context
 | 
			
		||||
 | 
			
		||||
from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC
 | 
			
		||||
from bot_core.abc.client_utils_abc import ClientUtilsABC
 | 
			
		||||
from bot_core.abc.message_service_abc import MessageServiceABC
 | 
			
		||||
from bot_core.helper.command_checks import CommandChecks
 | 
			
		||||
from bot_core.logging.command_logger import CommandLogger
 | 
			
		||||
@@ -21,7 +21,7 @@ class AFKCommand(DiscordCommandABC):
 | 
			
		||||
            config: ConfigurationABC,
 | 
			
		||||
            message_service: MessageServiceABC,
 | 
			
		||||
            bot: DiscordBotServiceABC,
 | 
			
		||||
            client_utils: ClientUtilsServiceABC,
 | 
			
		||||
            client_utils: ClientUtilsABC,
 | 
			
		||||
            translate: TranslatePipe
 | 
			
		||||
    ):
 | 
			
		||||
        DiscordCommandABC.__init__(self)
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ from discord import app_commands
 | 
			
		||||
from discord.ext import commands
 | 
			
		||||
from discord.ext.commands import Context
 | 
			
		||||
 | 
			
		||||
from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC
 | 
			
		||||
from bot_core.abc.client_utils_abc import ClientUtilsABC
 | 
			
		||||
from bot_core.abc.message_service_abc import MessageServiceABC
 | 
			
		||||
from bot_core.helper.command_checks import CommandChecks
 | 
			
		||||
from bot_core.logging.command_logger import CommandLogger
 | 
			
		||||
@@ -23,7 +23,7 @@ class HelpCommand(DiscordCommandABC):
 | 
			
		||||
            logger: CommandLogger,
 | 
			
		||||
            message_service: MessageServiceABC,
 | 
			
		||||
            bot: DiscordBotServiceABC,
 | 
			
		||||
            client_utils: ClientUtilsServiceABC
 | 
			
		||||
            client_utils: ClientUtilsABC
 | 
			
		||||
    ):
 | 
			
		||||
        DiscordCommandABC.__init__(self)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ 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.client_utils_abc import ClientUtilsABC
 | 
			
		||||
from bot_core.abc.message_service_abc import MessageServiceABC
 | 
			
		||||
from bot_core.helper.command_checks import CommandChecks
 | 
			
		||||
from bot_core.logging.command_logger import CommandLogger
 | 
			
		||||
@@ -23,7 +23,7 @@ class InfoCommand(DiscordCommandABC):
 | 
			
		||||
            logger: CommandLogger,
 | 
			
		||||
            message_service: MessageServiceABC,
 | 
			
		||||
            bot: DiscordBotServiceABC,
 | 
			
		||||
            client_utils: ClientUtilsServiceABC,
 | 
			
		||||
            client_utils: ClientUtilsABC,
 | 
			
		||||
            translate: TranslatePipe
 | 
			
		||||
    ):
 | 
			
		||||
        DiscordCommandABC.__init__(self)
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ from cpl_translation import TranslatePipe
 | 
			
		||||
from discord.ext import commands
 | 
			
		||||
from discord.ext.commands import Context
 | 
			
		||||
 | 
			
		||||
from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC
 | 
			
		||||
from bot_core.abc.client_utils_abc import ClientUtilsABC
 | 
			
		||||
from bot_core.abc.message_service_abc import MessageServiceABC
 | 
			
		||||
from bot_core.helper.command_checks import CommandChecks
 | 
			
		||||
from bot_core.logging.command_logger import CommandLogger
 | 
			
		||||
@@ -22,7 +22,7 @@ class PingCommand(DiscordCommandABC):
 | 
			
		||||
            logger: CommandLogger,
 | 
			
		||||
            message_service: MessageServiceABC,
 | 
			
		||||
            bot: DiscordBotServiceABC,
 | 
			
		||||
            client_utils: ClientUtilsServiceABC,
 | 
			
		||||
            client_utils: ClientUtilsABC,
 | 
			
		||||
            translate: TranslatePipe,
 | 
			
		||||
            permissions: PermissionServiceABC,
 | 
			
		||||
            base_helper: BaseHelperABC,
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ from cpl_translation import TranslatePipe
 | 
			
		||||
from discord.ext import commands
 | 
			
		||||
from discord.ext.commands import Context
 | 
			
		||||
 | 
			
		||||
from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC
 | 
			
		||||
from bot_core.abc.client_utils_abc import ClientUtilsABC
 | 
			
		||||
from bot_core.abc.message_service_abc import MessageServiceABC
 | 
			
		||||
from bot_core.configuration.server_settings import ServerSettings
 | 
			
		||||
from bot_core.helper.command_checks import CommandChecks
 | 
			
		||||
@@ -22,7 +22,7 @@ class PurgeCommand(DiscordCommandABC):
 | 
			
		||||
            config: ConfigurationABC,
 | 
			
		||||
            message_service: MessageServiceABC,
 | 
			
		||||
            permissions: PermissionServiceABC,
 | 
			
		||||
            client_utils: ClientUtilsServiceABC,
 | 
			
		||||
            client_utils: ClientUtilsABC,
 | 
			
		||||
            translate: TranslatePipe
 | 
			
		||||
    ):
 | 
			
		||||
        DiscordCommandABC.__init__(self)
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ from discord import app_commands
 | 
			
		||||
from discord.ext import commands
 | 
			
		||||
from discord.ext.commands import Context
 | 
			
		||||
 | 
			
		||||
from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC
 | 
			
		||||
from bot_core.abc.client_utils_abc import ClientUtilsABC
 | 
			
		||||
from bot_core.abc.message_service_abc import MessageServiceABC
 | 
			
		||||
from bot_core.helper.command_checks import CommandChecks
 | 
			
		||||
from bot_core.logging.command_logger import CommandLogger
 | 
			
		||||
@@ -31,7 +31,7 @@ class UserGroup(DiscordCommandABC):
 | 
			
		||||
            logger: CommandLogger,
 | 
			
		||||
            message_service: MessageServiceABC,
 | 
			
		||||
            bot: DiscordBotServiceABC,
 | 
			
		||||
            client_utils: ClientUtilsServiceABC,
 | 
			
		||||
            client_utils: ClientUtilsABC,
 | 
			
		||||
            permissions: PermissionServiceABC,
 | 
			
		||||
            servers: ServerRepositoryABC,
 | 
			
		||||
            db: DatabaseContextABC,
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@ from cpl_discord.service import DiscordBotServiceABC
 | 
			
		||||
from bot_core.helper.event_checks import EventChecks
 | 
			
		||||
from bot_core.helper.log_message_helper import LogMessageHelper
 | 
			
		||||
from bot_core.logging.message_logger import MessageLogger
 | 
			
		||||
from bot_core.service.client_utils_service import ClientUtilsService
 | 
			
		||||
from bot_data.abc.client_repository_abc import ClientRepositoryABC
 | 
			
		||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
 | 
			
		||||
from bot_data.abc.user_repository_abc import UserRepositoryABC
 | 
			
		||||
@@ -22,6 +23,7 @@ class BaseOnMessageEvent(OnMessageABC):
 | 
			
		||||
            self,
 | 
			
		||||
            logger: MessageLogger,
 | 
			
		||||
            bhs: BaseHelperABC,
 | 
			
		||||
            client_utils: ClientUtilsService,
 | 
			
		||||
            db: DatabaseContextABC,
 | 
			
		||||
            bot: DiscordBotServiceABC,
 | 
			
		||||
            users: UserRepositoryABC,
 | 
			
		||||
@@ -31,6 +33,8 @@ class BaseOnMessageEvent(OnMessageABC):
 | 
			
		||||
        OnMessageABC.__init__(self)
 | 
			
		||||
        self._logger = logger
 | 
			
		||||
        self._base_helper = bhs
 | 
			
		||||
        self._client_utils = client_utils
 | 
			
		||||
        self._bot = bot
 | 
			
		||||
        self._db = db
 | 
			
		||||
        self._bot = bot
 | 
			
		||||
        self._users = users
 | 
			
		||||
@@ -64,6 +68,9 @@ class BaseOnMessageEvent(OnMessageABC):
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        settings: BaseServerSettings = self._base_helper.get_config(message.guild.id)
 | 
			
		||||
        if self._client_utils.is_message_xp_count_by_hour_higher_that_max_message_count_per_hour(message.created_at, user, settings):
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        old_xp = user.xp
 | 
			
		||||
        user.xp += settings.xp_per_message
 | 
			
		||||
        self._users.update_user(user)
 | 
			
		||||
@@ -71,6 +78,8 @@ class BaseOnMessageEvent(OnMessageABC):
 | 
			
		||||
 | 
			
		||||
        self._logger.debug(__name__, f'User {user} sent message. xp: from {old_xp} to {user.xp}')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @EventChecks.check_is_ready()
 | 
			
		||||
    async def on_message(self, message: discord.Message):
 | 
			
		||||
        self._logger.debug(__name__, f'Module {type(self)} started')
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,11 @@
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
 | 
			
		||||
from cpl_core.database.context import DatabaseContextABC
 | 
			
		||||
from cpl_core.logging import LoggerABC
 | 
			
		||||
from cpl_discord.service import DiscordBotServiceABC
 | 
			
		||||
from discord import RawReactionActionEvent
 | 
			
		||||
 | 
			
		||||
from bot_core.abc.client_utils_abc import ClientUtilsABC
 | 
			
		||||
from bot_core.helper.log_message_helper import LogMessageHelper
 | 
			
		||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
 | 
			
		||||
from bot_data.abc.user_repository_abc import UserRepositoryABC
 | 
			
		||||
@@ -19,6 +22,7 @@ class BaseReactionHandler:
 | 
			
		||||
            servers: ServerRepositoryABC,
 | 
			
		||||
            users: UserRepositoryABC,
 | 
			
		||||
            base_helper: BaseHelperABC,
 | 
			
		||||
            client_utils: ClientUtilsABC,
 | 
			
		||||
            db: DatabaseContextABC,
 | 
			
		||||
    ):
 | 
			
		||||
        self._logger = logger
 | 
			
		||||
@@ -26,6 +30,7 @@ class BaseReactionHandler:
 | 
			
		||||
        self._servers = servers
 | 
			
		||||
        self._users = users
 | 
			
		||||
        self._base_helper = base_helper
 | 
			
		||||
        self._client_utils = client_utils
 | 
			
		||||
        self._db = db
 | 
			
		||||
 | 
			
		||||
    async def handle(self, payload: RawReactionActionEvent, r_type=None) -> None:
 | 
			
		||||
@@ -59,6 +64,11 @@ class BaseReactionHandler:
 | 
			
		||||
        settings: BaseServerSettings = self._base_helper.get_config(guild.id)
 | 
			
		||||
 | 
			
		||||
        if r_type == 'add':
 | 
			
		||||
            if self._client_utils.is_message_xp_count_by_hour_higher_that_max_message_count_per_hour(
 | 
			
		||||
                    datetime.now(), user, settings, is_reaction=True
 | 
			
		||||
            ):
 | 
			
		||||
                return
 | 
			
		||||
 | 
			
		||||
            user.xp += settings.xp_per_reaction
 | 
			
		||||
            self._users.update_user(user)
 | 
			
		||||
            self._db.save_changes()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user