Merge pull request 'Als Admin möchte ich, dass bei Erstellung einer AutoRollen Regel die Reaktion automatisch hinzugefügt wird #259' (#263) from #259 into 1.0.1
Reviewed-on: sh-edraft.de/kd_discord_bot#263 Reviewed-by: Ebola-Chan <nick.jungmann@gmail.com> Closes #259
This commit is contained in:
commit
5a312bf660
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user