无法获取 client.command 参数以通过 discord.py 中的键值解析 API 响应
Can not get client.command parameter to parse API response by key value in discord.py
我正在现有机器人上构建一个命令,它将搜索 API 并将棒球运动员的名字作为参数来查询 json 响应。我已经让所有东西在测试中正常工作,只是为了我的生活我无法弄清楚如何将结果限制为仅包含在 discord 中调用命令时传递的查询参数的结果。
例如:用户将键入 !card Adam Dunn,只有键“name”的值“Adam Dunn”会 return。目前,无论为参数键入什么内容,都会发送整个第一页结果,并且使用我的嵌入逻辑 运行ning,每个结果都会单独嵌入,这并不理想。
为了便于阅读,我只包含了相关的代码行,没有包含大量嵌入的结果。
它一定是非常简单的东西,但我想我只是盯着它看了太久才看到它。任何帮助将不胜感激,谢谢!
下面是命令为 运行:
时的控制台输出
这是我目前正在使用的代码:
async def card(ctx, *, player_name: str):
async with ctx.channel.typing():
async with aiohttp.ClientSession() as cs:
async with cs.get("https://website.items.json") as r:
data = await r.json()
listings = data["items"]
for k in listings:
if player_name == k["name"]
print()```
希望我没听错。如果用户没有给player_name
那么你就一直搜索什么都没有,如果没有给player_name
你就想结束。如果是这样的话。
将 player_name: str=None
的默认值设置为 None
然后在代码的开头检查它是否存在。
async def card(ctx, *, player_name: str=None):
if not player_name:
return await ctx.send('You must enter a player name')
# if there is a name do this
async with ctx.channel.typing():
async with aiohttp.ClientSession() as cs:
async with cs.get("https://theshownation.com/mlb20/apis/items.json") as r:
data = await r.json()
listings = data["items"]
for k in listings:
if player_name == k["name"]
print()```
更新:
我是个白痴。按预期工作,但因为我正在搜索的 player_name
不在结果的第一页上,所以它没有显示。当使用 API 结果第一页上的 player_name
时,它工作得很好。
这是分页问题,不是键值问题。
我正在现有机器人上构建一个命令,它将搜索 API 并将棒球运动员的名字作为参数来查询 json 响应。我已经让所有东西在测试中正常工作,只是为了我的生活我无法弄清楚如何将结果限制为仅包含在 discord 中调用命令时传递的查询参数的结果。
例如:用户将键入 !card Adam Dunn,只有键“name”的值“Adam Dunn”会 return。目前,无论为参数键入什么内容,都会发送整个第一页结果,并且使用我的嵌入逻辑 运行ning,每个结果都会单独嵌入,这并不理想。
为了便于阅读,我只包含了相关的代码行,没有包含大量嵌入的结果。
它一定是非常简单的东西,但我想我只是盯着它看了太久才看到它。任何帮助将不胜感激,谢谢!
下面是命令为 运行:
时的控制台输出这是我目前正在使用的代码:
async def card(ctx, *, player_name: str):
async with ctx.channel.typing():
async with aiohttp.ClientSession() as cs:
async with cs.get("https://website.items.json") as r:
data = await r.json()
listings = data["items"]
for k in listings:
if player_name == k["name"]
print()```
希望我没听错。如果用户没有给player_name
那么你就一直搜索什么都没有,如果没有给player_name
你就想结束。如果是这样的话。
将 player_name: str=None
的默认值设置为 None
然后在代码的开头检查它是否存在。
async def card(ctx, *, player_name: str=None):
if not player_name:
return await ctx.send('You must enter a player name')
# if there is a name do this
async with ctx.channel.typing():
async with aiohttp.ClientSession() as cs:
async with cs.get("https://theshownation.com/mlb20/apis/items.json") as r:
data = await r.json()
listings = data["items"]
for k in listings:
if player_name == k["name"]
print()```
更新:
我是个白痴。按预期工作,但因为我正在搜索的 player_name
不在结果的第一页上,所以它没有显示。当使用 API 结果第一页上的 player_name
时,它工作得很好。
这是分页问题,不是键值问题。