при выполнении 'm!mode computer' or 'm!mode player'
;or
просто вернет первую строку с True
в качестве логического значения, то есть любую непустую строку;поэтому по умолчанию он будет первым (здесь 'm!mode computer'
).
Вам необходимо проверить, что содержимое начинается с 'm!mode '
и что следующее «слово» точно соответствует любому из ваших вариантов:
async def AgainstWho():
global mode
await client.send_message(message.channel, content='Play against the computer or another player?\n')
mode = await client.wait_for_message(check=lambda m: return m.content.startswith('m!mode ') and m.content.split(' ')[1] in ('player', 'computer'))
if mode == 'm!mode computer':
mode = 1
if mode == 'm!mode player':
mode = 2
Это проверяет только первые два «слова» команды.«Игрок m! mode» будет работать;но то же самое можно сказать и о «игроке m! mode».Если вы хотите избежать такого поведения и понизить его до строгих командных вызовов;Вы также можете проверить, что len(m.content.split(' ')) == 2
.
Кроме того, избегайте использования global
.Передайте переменную в качестве аргумента функции или сделайте ее методом объекта с переменной в качестве атрибута.