discord.py AttributeError: у объекта 'str' нет атрибута 'id' - PullRequest
0 голосов
/ 23 декабря 2018

так что дело в том, что я создаю несогласного бота на python с помощью python.py, и я делаю команду отключить кого-либо, поместив его идентификатор пользователя в файл json.

@client.command()
async def mute(user):
with open("muted.json", 'r') as f:
    data = json.load(f)
if not user.id in data:
    data[user.id] = {}
else:
    await client.send_message(message.channel, "The user is already muted")

В «если не user.id в данных:» говорится, что «AttributeError: у объекта 'str' нет атрибута 'id'" Как я могу это исправить?

1 Ответ

0 голосов
/ 23 декабря 2018

По умолчанию все аргументы команд являются строками.Если вы хотите, чтобы библиотека преобразовывала их для вас, вы должны указать, к какому типу вы хотите преобразовать их, предоставив converter с аннотацией типа.Если вы хотите сослаться на message, который вызвал команду, вы также должны указать либритару передать контекст вызова в обратный вызов команды.

@client.command(pass_context=True)
async def mute(ctx, user: discord.User):
    with open("muted.json", 'r') as f:
        data = json.load(f)
    if not user.id in data:
        data[user.id] = {}
    else:
        await client.send_message(message.channel, "The user is already muted")

Это стоитотмечая, что эта команда на самом деле ничего не делает.Он создает словарь из файла, изменяет его, а затем удаляет его, когда функция завершается.Вместо этого у вас должен быть словарь уровня модуля data, который загружается один раз, а затем сохраняется при каждом его изменении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...