Как мне сделать сообщение «disord api await» для A или B? - PullRequest
0 голосов
/ 05 февраля 2019

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

Я пробовал разные синтаксисы, такие как (content=('m!mode computer' or 'm!mode player')) и ни один из них не работает.

 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(content=('m!mode computer' or 'm!mode player'))
    if mode == 'm!mode computer':
      mode = 1
    if mode == 'm!mode player':
      mode = 2

Если пользователь вводит m!mode player, код ничего не делает, но m!mode computer работает отлично.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

при выполнении '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.Передайте переменную в качестве аргумента функции или сделайте ее методом объекта с переменной в качестве атрибута.

0 голосов
/ 05 февраля 2019
>>> 'm!mode computer' or 'm!mode player'
'm!mode computer'

Вот почему.Я предполагаю, что это discord.py, в соответствии с документами , что вы хотите, это:

mode = await client.wait_for_message(check=lambda m: return m.content.startswith('m!mode'))

или тому подобное.

...