diff --git a/app/bot/cogs/app.py b/app/bot/cogs/app.py index a30b992..4689f05 100644 --- a/app/bot/cogs/app.py +++ b/app/bot/cogs/app.py @@ -110,6 +110,13 @@ except: JELLYFIN_EXTERNAL_URL = JELLYFIN_SERVER_URL print("Не удалось получить внешний URL-адрес Jellyfin. По умолчанию используется URL-адрес сервера.") +try: + DISCORD_SERVER_PERM = config.get(BOT_SECTION, "discord_perm") +except: + DISCORD_SERVER_PERM = None + print("Не удалось получить id роли для управления ботом. Возможна любая дичь.") + + if USE_PLEX and plex_configured: try: print("Подключение к Plex......") @@ -363,29 +370,29 @@ class app(commands.Cog): if deleted: print("Удален {} из базы данных, поскольку пользователь покинул сервер Discord.".format(email)) - @app_commands.checks.has_permissions(administrator=True) + @app_commands.checks.has_role(DISCORD_SERVER_PERM) @plex_commands.command(name="invite", description="Пригласить пользователя в Plex") async def plexinvite(self, interaction: discord.Interaction, email: str): await self.addtoplex(email, interaction.response) - @app_commands.checks.has_permissions(administrator=True) + @app_commands.checks.has_role(DISCORD_SERVER_PERM) @plex_commands.command(name="remove", description="Удаление пользователя из Plex") async def plexremove(self, interaction: discord.Interaction, email: str): await self.removefromplex(email, interaction.response) - @app_commands.checks.has_permissions(administrator=True) + @app_commands.checks.has_role(DISCORD_SERVER_PERM) @jellyfin_commands.command(name="invite", description="Пригласить пользователя в Jellyfin") async def jellyfininvite(self, interaction: discord.Interaction, username: str): password = jelly.generate_password(16) if await self.addtojellyfin(username, password, interaction.response): await embedcustom(interaction.response, "Пользователь Jellyfin создан!", {'Username': username, 'Password': f"||{password}||"}) - @app_commands.checks.has_permissions(administrator=True) + @app_commands.checks.has_role(DISCORD_SERVER_PERM) @jellyfin_commands.command(name="remove", description="Удаление пользователя из Jellyfin") async def jellyfinremove(self, interaction: discord.Interaction, username: str): await self.removefromjellyfin(username, interaction.response) - @app_commands.checks.has_permissions(administrator=True) + @app_commands.checks.has_role(DISCORD_SERVER_PERM) @membarr_commands.command(name="dbadd", description="Добавьте пользователя в базу данных Membarr") async def dbadd(self, interaction: discord.Interaction, member: discord.Member, email: str = "", jellyfin_username: str = ""): email = email.strip() @@ -403,7 +410,7 @@ class app(commands.Cog): await embedinfo(interaction.response, 'Произошла ошибка при добавлении этого пользователя в базу данных. Проверьте журналы Membarr для получения дополнительной информации.') print(e) - @app_commands.checks.has_permissions(administrator=True) + @app_commands.checks.has_role(DISCORD_SERVER_PERM) @membarr_commands.command(name="dbls", description="Посмотреть базу данных Memarr") async def dbls(self, interaction: discord.Interaction): @@ -437,7 +444,7 @@ class app(commands.Cog): await interaction.response.send_message(embed = embed, ephemeral=True) - @app_commands.checks.has_permissions(administrator=True) + @app_commands.checks.has_role(DISCORD_SERVER_PERM) @membarr_commands.command(name="dbrm", description="Удалить пользователя из базы данных Membarr") async def dbrm(self, interaction: discord.Interaction, position: int): embed = discord.Embed(title='База данных Memarr.') diff --git a/app/bot/helper/confighelper.py b/app/bot/helper/confighelper.py index c28dc5f..1a834fc 100644 --- a/app/bot/helper/confighelper.py +++ b/app/bot/helper/confighelper.py @@ -12,7 +12,7 @@ config = configparser.ConfigParser() CONFIG_KEYS = ['username', 'password', 'discord_bot_token', 'plex_user', 'plex_pass', 'plex_token', 'plex_base_url', 'plex_roles', 'plex_server_name', 'plex_libs', 'owner_id', 'channel_id', 'auto_remove_user', 'jellyfin_api_key', 'jellyfin_server_url', 'jellyfin_roles', - 'jellyfin_libs', 'plex_enabled', 'jellyfin_enabled', 'jellyfin_external_url'] + 'jellyfin_libs', 'plex_enabled', 'jellyfin_enabled', 'jellyfin_external_url', 'discord_perm'] # settings Discord_bot_token = "" @@ -29,6 +29,7 @@ jellyfin_libs = "" jellyfin_roles = None plex_configured = True jellyfin_configured = True +DISCORD_SERVER_PERM = "" switch = 0 @@ -153,6 +154,12 @@ except: print("Не удалось получить конфигурацию включения Plex. По умолчанию установлено значение False") USE_PLEX = False +try: + DISCORD_SERVER_PERM = config.get(BOT_SECTION, "discord_perm") +except: + DISCORD_SERVER_PERM = None + print("Не удалось получить id роли для управления ботом. Возможна любая дичь.") + def get_config(): """ Function to return current config diff --git a/run.py b/run.py index f437d91..50b5078 100644 --- a/run.py +++ b/run.py @@ -74,7 +74,7 @@ jellyfin_commands = app_commands.Group(name="jellyfinsettings", description="Mem @plex_commands.command(name="addrole", description="Роль для автоматического создания пользователя в Plex") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def plexroleadd(interaction: discord.Interaction, role: discord.Role): if len(plex_roles) <= maxroles: # Do not add roles multiple times. @@ -92,7 +92,7 @@ async def plexroleadd(interaction: discord.Interaction, role: discord.Role): @plex_commands.command(name="removerole", description="Прекратить создавать пользователй Plex с помощью ролей.") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def plexroleremove(interaction: discord.Interaction, role: discord.Role): if role.name not in plex_roles: await embederror(interaction.response, f"\"{role.name}\" больше не связана с Plex.") @@ -103,7 +103,7 @@ async def plexroleremove(interaction: discord.Interaction, role: discord.Role): @plex_commands.command(name="listroles", description="Список всех ролей, участники которых будут автоматически добавлены в Plex.") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def plexrolels(interaction: discord.Interaction): await interaction.response.send_message( "Следующие роли автоматически добавляются в Plex:\n" + @@ -112,7 +112,7 @@ async def plexrolels(interaction: discord.Interaction): @plex_commands.command(name="setup", description="Настройка интеграции с Plex") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def setupplex(interaction: discord.Interaction, username: str, password: str, server_name: str, base_url: str = "", save_token: bool = True): await interaction.response.defer() @@ -157,7 +157,7 @@ async def setupplex(interaction: discord.Interaction, username: str, password: s @jellyfin_commands.command(name="addrole", description="Добавление роли для автоматического добавления пользователей в Jellyfin") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def jellyroleadd(interaction: discord.Interaction, role: discord.Role): if len(jellyfin_roles) <= maxroles: # Do not add roles multiple times. @@ -176,7 +176,7 @@ async def jellyroleadd(interaction: discord.Interaction, role: discord.Role): @jellyfin_commands.command(name="removerole", description="Прекращение добавления пользователей с ролью в Jellyfin") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def jellyroleremove(interaction: discord.Interaction, role: discord.Role): if role.name not in jellyfin_roles: await embederror(interaction.response, f"\"{role.name}\" больше не связана с Jellyfin.") @@ -189,7 +189,7 @@ async def jellyroleremove(interaction: discord.Interaction, role: discord.Role): @jellyfin_commands.command(name="listroles", description="Список всех ролей, участники которых будут автоматически добавлены в Jellyfin.") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def jellyrolels(interaction: discord.Interaction): await interaction.response.send_message( "Следующие роли автоматически добавляются в Jellyfin:\n" + @@ -198,7 +198,7 @@ async def jellyrolels(interaction: discord.Interaction): @jellyfin_commands.command(name="setup", description="Настройка интеграции Jellyfin") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def setupjelly(interaction: discord.Interaction, server_url: str, api_key: str, external_url: str = None): await interaction.response.defer() # get rid of training slashes @@ -247,7 +247,7 @@ async def setupjelly(interaction: discord.Interaction, server_url: str, api_key: @plex_commands.command(name="setuplibs", description="Библиотеки настройки, к которым могут получить доступ новые пользователи") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def setupplexlibs(interaction: discord.Interaction, libraries: str): if not libraries: await embederror(interaction.response, "строка библиотек пуста.") @@ -264,7 +264,7 @@ async def setupplexlibs(interaction: discord.Interaction, libraries: str): @jellyfin_commands.command(name="setuplibs", description="Настройка библиотек, к которым могут получить доступ новые пользователи") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def setupjellylibs(interaction: discord.Interaction, libraries: str): if not libraries: await embederror(interaction.response, "строка библиотек пуста.") @@ -282,7 +282,7 @@ async def setupjellylibs(interaction: discord.Interaction, libraries: str): # Enable / Disable Plex integration @plex_commands.command(name="enable", description="Включение автоматического добавления пользователей в Plex") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def enableplex(interaction: discord.Interaction): if confighelper.USE_PLEX: await interaction.response.send_message("Plex уже включен.", ephemeral=True) @@ -296,7 +296,7 @@ async def enableplex(interaction: discord.Interaction): @plex_commands.command(name="disable", description="Отключение добавления пользователей в Plex") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def disableplex(interaction: discord.Interaction): if not confighelper.USE_PLEX: await interaction.response.send_message("Plex уже отключен.", ephemeral=True) @@ -311,7 +311,7 @@ async def disableplex(interaction: discord.Interaction): # Enable / Disable Jellyfin integration @jellyfin_commands.command(name="enable", description="Включение добавления пользователей в Jellyfin") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def enablejellyfin(interaction: discord.Interaction): if confighelper.USE_JELLYFIN: await interaction.response.send_message("Jellyfin уже включен.", ephemeral=True) @@ -326,7 +326,7 @@ async def enablejellyfin(interaction: discord.Interaction): @jellyfin_commands.command(name="disable", description="Отключение добавления пользователей в Jellyfin") -@app_commands.checks.has_permissions(administrator=True) +@app_commands.checks.has_role(DISCORD_SERVER_PERM) async def disablejellyfin(interaction: discord.Interaction): if not confighelper.USE_JELLYFIN: await interaction.response.send_message("Jellyfin уже отключен.", ephemeral=True)