Compare commits
	
		
			3 Commits
		
	
	
		
			7ba0247519
			...
			5a312bf660
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5a312bf660 | |||
| 657a8fa586 | |||
| 3c8a092f40 | 
@@ -2,9 +2,11 @@ from abc import ABC, abstractmethod
 | 
				
			|||||||
from datetime import datetime
 | 
					from datetime import datetime
 | 
				
			||||||
from typing import Callable
 | 
					from typing import Callable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import discord
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension import List
 | 
				
			||||||
from discord.ext.commands import Context
 | 
					from discord.ext.commands import Context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from bot_data.model.auto_role_rule import AutoRoleRule
 | 
				
			||||||
from bot_data.model.user import User
 | 
					from bot_data.model.user import User
 | 
				
			||||||
from modules.base.configuration.base_server_settings import BaseServerSettings
 | 
					from modules.base.configuration.base_server_settings import BaseServerSettings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -59,3 +61,9 @@ class ClientUtilsABC(ABC):
 | 
				
			|||||||
    @abstractmethod
 | 
					    @abstractmethod
 | 
				
			||||||
    def get_ontime_for_user(self, user: User) -> float:
 | 
					    def get_ontime_for_user(self, user: User) -> float:
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @abstractmethod
 | 
				
			||||||
 | 
					    async def react_to_message_by_auto_role_rule(
 | 
				
			||||||
 | 
					        self, discord_channel_id: int, discord_message_id: int, rule: AutoRoleRule, guild: discord.Guild
 | 
				
			||||||
 | 
					    ):
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,7 @@ from cpl_core.time import TimeFormatSettings
 | 
				
			|||||||
from cpl_discord.service import DiscordBotServiceABC
 | 
					from cpl_discord.service import DiscordBotServiceABC
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension import List
 | 
				
			||||||
from cpl_translation import TranslatePipe
 | 
					from cpl_translation import TranslatePipe
 | 
				
			||||||
 | 
					from discord import Guild
 | 
				
			||||||
from discord.ext.commands import Context
 | 
					from discord.ext.commands import Context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from bot_core.abc.client_utils_abc import ClientUtilsABC
 | 
					from bot_core.abc.client_utils_abc import ClientUtilsABC
 | 
				
			||||||
@@ -23,6 +24,7 @@ from bot_data.abc.user_joined_voice_channel_repository_abc import (
 | 
				
			|||||||
from bot_data.abc.user_message_count_per_hour_repository_abc import (
 | 
					from bot_data.abc.user_message_count_per_hour_repository_abc import (
 | 
				
			||||||
    UserMessageCountPerHourRepositoryABC,
 | 
					    UserMessageCountPerHourRepositoryABC,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					from bot_data.model.auto_role_rule import AutoRoleRule
 | 
				
			||||||
from bot_data.model.user import User
 | 
					from bot_data.model.user import User
 | 
				
			||||||
from bot_data.model.user_message_count_per_hour import UserMessageCountPerHour
 | 
					from bot_data.model.user_message_count_per_hour import UserMessageCountPerHour
 | 
				
			||||||
from modules.base.configuration.base_server_settings import BaseServerSettings
 | 
					from modules.base.configuration.base_server_settings import BaseServerSettings
 | 
				
			||||||
@@ -192,3 +194,27 @@ class ClientUtilsService(ClientUtilsABC):
 | 
				
			|||||||
            .sum(lambda join: (join.leaved_on - join.joined_on).total_seconds() / 3600),
 | 
					            .sum(lambda join: (join.leaved_on - join.joined_on).total_seconds() / 3600),
 | 
				
			||||||
            2,
 | 
					            2,
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async def react_to_message_by_auto_role_rule(
 | 
				
			||||||
 | 
					        self, discord_channel_id: int, discord_message_id: int, rule: AutoRoleRule, guild: discord.Guild
 | 
				
			||||||
 | 
					    ):
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            guild: Guild = self._bot.guilds.where(lambda g: g == guild).single()
 | 
				
			||||||
 | 
					            channel = guild.get_channel(discord_channel_id)
 | 
				
			||||||
 | 
					            message = await channel.fetch_message(discord_message_id)
 | 
				
			||||||
 | 
					            emoji = List(discord.Emoji, guild.emojis).where(lambda x: x.name == rule.emoji_name).single()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if emoji is None:
 | 
				
			||||||
 | 
					                self._logger.debug(__name__, f"Emoji {rule.emoji_name} not found")
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					            await message.add_reaction(emoji)
 | 
				
			||||||
 | 
					            self._logger.debug(
 | 
				
			||||||
 | 
					                __name__,
 | 
				
			||||||
 | 
					                f"Added reaction {rule.emoji_name} to message: {discord_message_id}",
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					        except Exception as e:
 | 
				
			||||||
 | 
					            self._logger.error(
 | 
				
			||||||
 | 
					                __name__,
 | 
				
			||||||
 | 
					                f"Cannot add reaction {rule.emoji_name} to message: {discord_message_id}",
 | 
				
			||||||
 | 
					                e,
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
from cpl_core.database.context import DatabaseContextABC
 | 
					from cpl_core.database.context import DatabaseContextABC
 | 
				
			||||||
 | 
					from cpl_discord.service import DiscordBotServiceABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from bot_core.abc.client_utils_abc import ClientUtilsABC
 | 
				
			||||||
from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
 | 
					from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
 | 
				
			||||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
 | 
					from bot_data.abc.server_repository_abc import ServerRepositoryABC
 | 
				
			||||||
from bot_data.model.auto_role_rule import AutoRoleRule
 | 
					from bot_data.model.auto_role_rule import AutoRoleRule
 | 
				
			||||||
@@ -10,15 +12,19 @@ from bot_graphql.abc.query_abc import QueryABC
 | 
				
			|||||||
class AutoRoleRuleMutation(QueryABC):
 | 
					class AutoRoleRuleMutation(QueryABC):
 | 
				
			||||||
    def __init__(
 | 
					    def __init__(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
 | 
					        bot: DiscordBotServiceABC,
 | 
				
			||||||
        servers: ServerRepositoryABC,
 | 
					        servers: ServerRepositoryABC,
 | 
				
			||||||
        auto_roles: AutoRoleRepositoryABC,
 | 
					        auto_roles: AutoRoleRepositoryABC,
 | 
				
			||||||
        db: DatabaseContextABC,
 | 
					        db: DatabaseContextABC,
 | 
				
			||||||
 | 
					        client_utils: ClientUtilsABC,
 | 
				
			||||||
    ):
 | 
					    ):
 | 
				
			||||||
        QueryABC.__init__(self, "AutoRoleRuleMutation")
 | 
					        QueryABC.__init__(self, "AutoRoleRuleMutation")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._bot = bot
 | 
				
			||||||
        self._servers = servers
 | 
					        self._servers = servers
 | 
				
			||||||
        self._auto_roles = auto_roles
 | 
					        self._auto_roles = auto_roles
 | 
				
			||||||
        self._db = db
 | 
					        self._db = db
 | 
				
			||||||
 | 
					        self._client_utils = client_utils
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.set_field("createAutoRoleRule", self.resolve_create_auto_role_rule)
 | 
					        self.set_field("createAutoRoleRule", self.resolve_create_auto_role_rule)
 | 
				
			||||||
        self.set_field("updateAutoRoleRule", self.resolve_update_auto_role_rule)
 | 
					        self.set_field("updateAutoRoleRule", self.resolve_update_auto_role_rule)
 | 
				
			||||||
@@ -40,6 +46,14 @@ class AutoRoleRuleMutation(QueryABC):
 | 
				
			|||||||
                and x.role_id == int(input["roleId"])
 | 
					                and x.role_id == int(input["roleId"])
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._bot.loop.create_task(
 | 
				
			||||||
 | 
					            self._client_utils.react_to_message_by_auto_role_rule(
 | 
				
			||||||
 | 
					                auto_role_rule.auto_role.discord_channel_id,
 | 
				
			||||||
 | 
					                auto_role_rule.auto_role.discord_message_id,
 | 
				
			||||||
 | 
					                auto_role_rule,
 | 
				
			||||||
 | 
					                self._bot.get_guild(auto_role_rule.auto_role.server.discord_id),
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        return self._auto_roles.get_auto_role_rules_by_auto_role_id(auto_role_rule.auto_role.id).where(get_new).last()
 | 
					        return self._auto_roles.get_auto_role_rules_by_auto_role_id(auto_role_rule.auto_role.id).where(get_new).last()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def resolve_update_auto_role_rule(self, *_, input: dict):
 | 
					    def resolve_update_auto_role_rule(self, *_, input: dict):
 | 
				
			||||||
@@ -53,6 +67,14 @@ class AutoRoleRuleMutation(QueryABC):
 | 
				
			|||||||
        self._db.save_changes()
 | 
					        self._db.save_changes()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        auto_role_rule = self._auto_roles.get_auto_role_rule_by_id(input["id"])
 | 
					        auto_role_rule = self._auto_roles.get_auto_role_rule_by_id(input["id"])
 | 
				
			||||||
 | 
					        self._bot.loop.create_task(
 | 
				
			||||||
 | 
					            self._client_utils.react_to_message_by_auto_role_rule(
 | 
				
			||||||
 | 
					                auto_role_rule.auto_role.discord_channel_id,
 | 
				
			||||||
 | 
					                auto_role_rule.auto_role.discord_message_id,
 | 
				
			||||||
 | 
					                auto_role_rule,
 | 
				
			||||||
 | 
					                self._bot.get_guild(auto_role_rule.auto_role.server.discord_id),
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        return auto_role_rule
 | 
					        return auto_role_rule
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def resolve_delete_auto_role_rule(self, *_, id: int):
 | 
					    def resolve_delete_auto_role_rule(self, *_, id: int):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ from cpl_discord.command import DiscordCommandABC
 | 
				
			|||||||
from cpl_discord.service import DiscordBotServiceABC
 | 
					from cpl_discord.service import DiscordBotServiceABC
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension import List
 | 
				
			||||||
from cpl_translation import TranslatePipe
 | 
					from cpl_translation import TranslatePipe
 | 
				
			||||||
from discord import app_commands, Guild
 | 
					from discord import app_commands
 | 
				
			||||||
from discord.ext import commands
 | 
					from discord.ext import commands
 | 
				
			||||||
from discord.ext.commands import Context
 | 
					from discord.ext.commands import Context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -312,26 +312,13 @@ class AutoRoleGroup(DiscordCommandABC):
 | 
				
			|||||||
            .where(lambda r: r.emoji_name == emoji.name and int(role_id) == role.id)
 | 
					            .where(lambda r: r.emoji_name == emoji.name and int(role_id) == role.id)
 | 
				
			||||||
            .single()
 | 
					            .single()
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        try:
 | 
					 | 
				
			||||||
            guild: Guild = self._bot.guilds.where(lambda g: g == ctx.guild).single()
 | 
					 | 
				
			||||||
            channel = guild.get_channel(auto_role_from_db.discord_channel_id)
 | 
					 | 
				
			||||||
            message = await channel.fetch_message(auto_role_from_db.discord_message_id)
 | 
					 | 
				
			||||||
            emoji = List(discord.Emoji, guild.emojis).where(lambda x: x.name == rule.emoji_name).single()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if emoji is None:
 | 
					        # as task to run in background
 | 
				
			||||||
                self._logger.debug(__name__, f"Emoji {rule.emoji_name} not found")
 | 
					        self._bot.loop.create_task(
 | 
				
			||||||
                return
 | 
					            await self._client_utils.react_to_message_by_auto_role_rule(
 | 
				
			||||||
            await message.add_reaction(emoji)
 | 
					                auto_role_from_db.discord_channel_id, auto_role_from_db.discord_message_id, rule, ctx.guild
 | 
				
			||||||
            self._logger.debug(
 | 
					 | 
				
			||||||
                __name__,
 | 
					 | 
				
			||||||
                f"Added reaction {rule.emoji_name} to message: {auto_role_from_db.discord_message_id}",
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        except Exception as e:
 | 
					 | 
				
			||||||
            self._logger.error(
 | 
					 | 
				
			||||||
                __name__,
 | 
					 | 
				
			||||||
                f"Cannot add reaction {rule.emoji_name} to message: {auto_role_from_db.discord_message_id}",
 | 
					 | 
				
			||||||
                e,
 | 
					 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await self._message_service.send_ctx_msg(
 | 
					        await self._message_service.send_ctx_msg(
 | 
				
			||||||
            ctx,
 | 
					            ctx,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -225,7 +225,7 @@ export class AutoRolesRulesComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
      })).subscribe(result => {
 | 
					      })).subscribe(result => {
 | 
				
			||||||
        this.isEditingNew = false;
 | 
					        this.isEditingNew = false;
 | 
				
			||||||
        this.spinner.hideSpinner();
 | 
					        this.spinner.hideSpinner();
 | 
				
			||||||
        this.toastService.success(this.translate.instant("view.server.auto_roles.rules.message.auto_role_rule_created"), this.translate.instant("view.server.auto_roles.rules.message.auto_role_rule_create_d", { id: result.autoRoleRule.createAutoRoleRule?.id }));
 | 
					        this.toastService.success(this.translate.instant("view.server.auto_roles.rules.message.auto_role_rule_create"), this.translate.instant("view.server.auto_roles.rules.message.auto_role_rule_create_d", { id: result.autoRoleRule.createAutoRoleRule?.id }));
 | 
				
			||||||
        this.loadNextPage();
 | 
					        this.loadNextPage();
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
      return;
 | 
					      return;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user