Как создать диск-бот, который удаляет сообщения с вложениями, если у автора нет определенных ролей - PullRequest
0 голосов
/ 02 мая 2018

В основном как в вопросе. Я хочу создать бота, который будет удалять сообщение с вложением, если у автора сообщения нет бота или доверенной роли на моем сервере.

В настоящее время у меня есть это:

 **if message.attachments:
       if not "*roleID*" or "roleID" in [role.id for role in message.author.roles]:
           await client.delete_message(message)
           await client.send_message(message.channel, "Sorry mate only trusted members or bots can attach things to prevent spam")**

1 Ответ

0 голосов
/ 02 мая 2018

Не зная вашего полного кода, этот фрагмент кажется близким к достижению того, что вы хотите сделать, это всего лишь второе if условие, которое искажено и вызывает проблемы.

Если вы замените *roleID* и roleID соответствующими идентификаторами бота и доверенной роли, *roleID* всегда вернет True независимо от того, что вы вставили в строку, потому что она не пустая. Все, что правильно из or, в данный момент в значительной степени игнорируется, и оператор if всегда возвращает True, удаляя все сообщения, проходящие через этот фрагмент кода.

Еще одна вещь, которую стоит отметить, это то, что вы должны использовать понимание списка, которое вы создали для обеих roleID проверок, а не только для одной, так что вам придется сохранить это в переменной.

Попробуйте проверить, работает ли следующее:

if len(message.attachments) > 0:
    author_roles = [role.id for role in message.author.roles]
    # replace both botRoleId and trustedRoleID with the respective IDs (as strings, because role.id is a string as well)
    if "botRoleID" not in author_roles or "trustedRoleID" not in author_roles:
        await client.delete_message(message)
        await client.send_message(message.channel, "Sorry mate only trusted members or bots can attach things to prevent spam")

Я надеюсь, что смогу помочь!

...