@Ddddfev

Как сделать команду которую может использовать только владелец сервера?

Сижу и не понимаю как сделать команду только для овнера сервера... Помогите пожалуйста
@client.command() 
@commands.has_guild_permissions(# что вписывать сюда)
async def blacklist(ctx, user_id: int):
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Читаем доки на has_guild_permissions().
Similar to has_permissions(), but operates on guild wide permissions instead of the current channel permissions.


"Работает похоже на has_permissions()"? Окей, тыц по ссылке.
A check() that is added that checks if the member has all of the permissions necessary.
Note that this check operates on the current channel permissions, not the guild wide permissions.
The permissions passed in must be exactly like the properties shown under discord.Permissions.

И пример кода
@bot.command()
@commands.has_permissions(manage_messages=True)  # имя параметра должно быть взято из discord.Permissions
async def test(ctx):
    await ctx.send('You can manage messages.')

Тыц по ссылке discord.Permissions, видим большоооой список разрешений. Читаем внимательно, owner нет, но в самом верху есть administrator.
Значит, нужно has_guild_permissions(administrator=True).

Делов на две минуты.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
Для владельца могут быть отдельные команды и готовой проверки нет, нужно пилить кастомную.

Владельца можно получить из ctx.guild.owner_id
# checks.py
from discord.ext import commands
def is_owner():
    async def predicate(ctx: commands.Context) -> bool:
        return ctx.author.id == ctx.guild.owner_id:
    return commands.check(predicate)


и используем аналогично дискордовским
@bot.command()
@checks.is_owner()
async def test(ctx):
    await ctx.send('You can manage messages.')
Ответ написан
Комментировать
Viji
@Viji
DevOps Engineer
на линуксе работаете?

Тогда
import os
import sys

def check_user_id():
    uid = os.getuid()  
    print(f"Current user's UID: {uid}")

    if uid != 10:
        print("User ID is not 10. Vihodim...")
        return False
    else:
        print("User ID is 10. Vpered...")
        return True

if not check_user_id():
    print("Neverniy userd <> 10")
    sys.exit(1) 
else:
    print("Idem dalshe")
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы