То, что происходит, - это строковое представление (т.е. при печати или вставке в строку) объекта-члена - это имя пользователя + дискриминатор. Но когда вы используете объект-член в инструкции, он не преобразует его в строку.
Есть несколько способов go об этом:
if str(member) in ["person1#1234", "person2#2345"]:
print(f"Unable to ban {member.display_name}")
else:
# other code
И это будет проверка члена как строки. Альтернативой может быть использование идентификатора (который более «безопасен», поскольку идентификаторы никогда не меняются, но пользователи могут изменять свое имя и дискриминатор).
if member.id in [112233445566778899, 223344556677889900]:
print(f"Unable to ban {member.display_name}")
else:
# other code
Еще одна вещь, на которую следует обратить внимание, это то, что когда бот редактирует роли, пытается изменить имя пользователя или выгнать / заблокировать кого-то, и этот человек имеет более высокие привилегии, чем бот (то есть владелец сервера), тогда он выдаст ошибку Forbidden
, так как она недостаточно высока в иерархия для выполнения действия.
И последнее, что есть в вашем выражении if, вы проверяете member == "person#1234" or "person2#2345"
, что на простом английском sh имеет смысл. Однако, когда интерпретатор оценивает операторы, он выполняет их отдельно:
if member == "person1#1234"
- OR
if "person2#2345"
Из-за этой второй части он всегда будет оцениваться как True
и будет только False
, если объект None
, но поскольку строка не None
, это будет True
.
Надеюсь, что это имело смысл.
Ссылки: