如何使我的bot在discord.py中循环遍历列表并逐个显示元素



我有一个函数,可以获得按市值排名前10位的加密货币

import os 
import json
from requests import Session
def get_top10():
CMC_API_KEY=os.environ.get('CMC')
parameters={

'start':1,
'limit':5000
}
headers={
'Accepts':'application/json',
'X-CMC_PRO_API_KEY':CMC_API_KEY
}
session=Session()
session.headers.update(headers)

url='https://pro-api.coinmarketcap.com/v1/cryptocurrency/map'
response=session.get(url,params=parameters)
json_file=json.loads(response.text)['data']
top10_rank_to_slug = {d['rank']: d['slug'] for d in json_file}
top_10 = sorted(top10_rank_to_slug.items())[:10]
for rank,name in top_10:
print(rank,name)

但是为了将它传递给我的discord bot函数必须返回一个值而不是打印它我怎么能做到这一点(我想让bot循环遍历列表然后逐个返回项目我不希望bot只返回列表)

@client.command()
@commands.check(check_channel)
async def top10(ctx):
await ctx.send(get_top10())
client.run(token)

你建议我怎么做?

我想到的第一件事是返回字典,然后在发送消息时循环遍历字典。

import os 
import json
from requests import Session
def get_top10():
CMC_API_KEY=os.environ.get('CMC')
parameters={'start':1,
'limit':5000
}
headers={'Accepts':'application/json',
'X-CMC_PRO_API_KEY':CMC_API_KEY
}
session=Session()
session.headers.update(headers)

url='https://pro-api.coinmarketcap.com/v1/cryptocurrency/map'
response=session.get(url,params=parameters)
json_file=json.loads(response.text)['data']
top10_rank_to_slug = {d['rank']: d['slug'] for d in json_file}
top_10 = sorted(top10_rank_to_slug.items())[:10]
return top_10

然后你可以通过每个key:valueawait ctx.send字典:

@client.command()
@commands.check(check_channel)
async def top10(ctx):
top_10 = get_top_10()
for key in top_10:
await ctx.send(f"{key} is the key and {top_10[key]} is the value.")

client.run(token)

有许多其他的解决方案和方法可以做到这一点,但坦率地说,这是对代码干扰最小的,也是最容易理解的方法之一。

我想让bot循环遍历列表然后逐个返回项目我不想让bot只返回列表

我不一定知道你为什么特别想要上面的东西,但如果你分享了,我可能会以更合适的方式帮助你。另一个简单的解决方案是在函数中将字典转换为字符串,然后返回已经预格式化的字符串供bot发送。

最新更新