如何使A或B的Discord api等待消息?

时间:2019-02-05 07:27:25

标签: python discord discord.py

我正在尝试获取代码以获取用户输入,并且代码必须检查两个选项,但是代码仅注册了第一个选项。

我尝试了<?php // User's search query $apiEndpoint = 'https://api.transport.nsw.gov.au/v1/tp/'; $apiCall = 'stop_finder'; // Build the request parameters $params = array( 'outputFormat' => 'rapidJSON', 'type_sf' => 'any', 'name_sf' =>'Wynyard Station', 'coordOutputFormat' => 'EPSG:4326', 'TfNSWSF' => 'true' ); $url = $apiEndpoint . $apiCall . '?' . http_build_query($params); $response = file_get_contents($url); $json = json_decode($response, true); 之类的不同语法,但它们都不起作用。

(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可以正常工作。

2 个答案:

答案 0 :(得分:2)

>>> 'm!mode computer' or 'm!mode player'
'm!mode computer'

这就是为什么。我假设这是discord.py,according to the docs,您要的是这样:

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

之类的。

答案 1 :(得分:0)

进行'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 player'将起作用;但是“ m!mode播放器后面还有其他任何东西”也会如此。如果要避免这种行为并将其降低为严格的命令调用,请执行以下操作:您还可以检查len(m.content.split(' ')) == 2

此外,避免使用global。将变量作为参数传递给函数,或将其作为具有变量作为属性的对象的方法。