Не зная вашего полного кода, этот фрагмент кажется близким к достижению того, что вы хотите сделать, это всего лишь второе 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")
Я надеюсь, что смогу помочь!