Я работаю над диссон-ботом для базовой модерации, который выполняет kick , ban и mute , по крайней мере, на данный момент. Но проблема в том, что другие участники тоже могут его использовать. Я хочу только несколько указанных ролей, которые могут его использовать.
Теперь я начал как это:
Но любой член может использовать команды тогда. Итак, попытался следовать этому = Система разрешений для Discord.py Bot и завершил работу с этим:
Который приземляет меня с этой ошибкой:; -;
raise MissingRequiredArgument(‘ is a required argument that is missing.’.format(param)) discord.ext.commands.errors.MissingRequiredArgument: member is a required argument that is missing.
Кроме того, context.message.author.server_premission.administrator я не только хочу, чтобы роли с правами администратора использовали эту команду. Я также хочу, чтобы несколько других ролей имели несколько пермисов, таких как manage message , manage roles и т. Д., Чтобы использовать их для командования.
Как сделать ошибки на русском языке | discord.py
Заранее спасибо за помощь! Кроме того, извините, если я пропустил что-то глупое или глупое; -;
Источник: question-it.com
Проверка разрешения Discord.py Bot
Но любой член может использовать команды тогда. Итак, попробовали следовать этому: = Система разрешений для Discord.py Bot и в итоге:
Из-за меня эта ошибка:;
raise MissingRequiredArgument(‘ is a required argument that is missing.’.format(param))
discord.ext.commands.errors.MissingRequiredArgument: member is a required argument that is missing.
Кроме того, помимо context.message.author.server_premission.administrator я не только хочу, чтобы роли с Admin perm могли использовать эту команду. Я также хочу, чтобы несколько других ролей имели несколько perms, таких как manage message , manage roles и т.д., Чтобы использовать команду. Заранее спасибо за помощь! Кроме того, извините, если я пропустил что-то глупое или глупое;
Источник: progi.pro
Система разрешений для Discord.py Bot
Я нахожусь в процессе создания диска-спора с использованием discord.py и asyncio. У бота есть команды, такие как kick и ban которые, очевидно, не должны быть доступны для обычных пользователей. Я хочу создать простую систему, которая будет определять, какие разрешения для роли пользователя использует ctx.message.author чтобы получить пользователя, который отправил команду.
Я не хочу, чтобы бот обнаруживал определенное имя роли, поскольку они различаются для разных серверов. Я также предпочитаю не иметь нескольких файлов для бота, чтобы он был простым. Я видел документацию discord.py и другие источники, но ни один из них не содержит примеров того, как реализовать различные методы, о которых они говорят. Например, вот одна команда от моего бота:
Коги DISCORD PYTHON за 10 минут | Сogs
async def kick(ctx, userName: discord.User): if True: #ctx.message.author.Permissions.administrator await BSL.kick(userName) else: permission_error = str(‘Sorry ‘ + ctx.message.author + ‘ you do not have permissions to do that!’) await BSL.send_message(ctx.message.channel, permission_error)
Если выражение if else является моей попыткой сделать это самостоятельно. #ctx.message.author.Permissions.administrator закомментирован, поскольку он не работает и заменен True для целей тестирования. Благодарим вас за любую помощь и предложения заранее.
user9123 04 фев. 2018, в 22:11
Поделиться
Поделиться:
python-asyncio
2 ответа
Лучший ответ
Permissions — это имя класса. Чтобы получить разрешения авторов сообщений, вы должны получить доступ к свойству server_permissions автора.
if ctx.message.author.server_permissions.administrator: # you could also use server_permissions.kick_members
Обновить: Лучшим способом проверки прав человека, вызывающего команды, является использование функции проверки расширения commands , в has_permissions проверка has_permissions . Например, если вы хотите, чтобы открыть команду только для людей, которые имели либо manage_roles разрешения или ban_members разрешение, вы могли бы написать команду:
Patrick Haugh 04 фев. 2018, в 18:27
Поделиться
Я знаю, что первоначальный вопрос не упоминает об этом, но есть ли способ проверить идентификатор автора сообщения, чтобы я мог иметь доступ ко всем командам независимо от роли?
user9123 04 фев. 2018, в 22:12
Member является подклассом User , поэтому вы можете просто сделать author.id
Patrick Haugh 04 фев. 2018, в 22:14
Я получил эту ошибку: File «C:UsersAdministratorDesktopdicordBot.py», line 25, in clear if ctx.message.author.server_permissions.administrator or ctx.message.author.id(‘344812358868402176’): TypeError: ‘str’ object is not callable
user9123 04 фев. 2018, в 22:35
author.id вернет идентификатор. Вы должны сделать author.id == ‘123. ‘
Patrick Haugh 04 фев. 2018, в 22:37
user9123 04 фев. 2018, в 22:41
Я исправил проблему, и теперь все работает именно так, как я хотел. Спасибо за помощь. Принят ответ 🙂
user9123 04 фев. 2018, в 22:45
Показать ещё 4 комментария
Советы подсказывают, что принятый ответ может не работать:
- Могут возникнуть проблемы с совместимостью с версией библиотеки discord.py и версиями перезаписи, которые остаются не устаревшими, не устаревшими и все еще используются.
- Бот должен также проверить его собственные разрешения, чтобы исключить одну причину ошибки.
- Если есть ошибка или права для самого бота недействительны, бот должен что-то сказать, правильно?
- Что-то должно быть реализовано, чтобы бот не пытался работать с этой командой в контексте DM или группы. Это почти всегда ошибка.
Я предлагаю следующее решение (предполагая, что вы используете расширение команды):
Источник: overcoder.net