discord.py开发Discord机器人如何遍历列表逐个输出加密货币排名
解决方法
你原来的get_top10函数没有返回值,仅把结果打印在本地控制台,所以调用get_top10()拿到的是None,无法给Discord推送内容。只需要修改两处代码即可实现需求:
1. 修改get_top10函数,返回结果列表而非直接打印
把函数末尾的打印逻辑替换为返回排序后的前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} # 直接返回结果列表,不在本地打印 return sorted(top10_rank_to_slug.items())[:10]
2. 修改Discord指令逻辑,遍历列表逐个发送
拿到返回的列表后循环遍历,每条内容单独调用发送接口:
@client.command() @commands.check(check_channel) async def top10(ctx): top10_list = get_top10() for rank, name in top10_list: # 可自行调整输出格式,比如加表情、特殊符号美化 await ctx.send(f"{rank}. {name}") client.run(token)
如果需要优化体验,可以额外添加异常捕获逻辑,避免接口请求失败时机器人无响应或者抛出报错。
内容的提问来源于stack exchange,提问作者w4ss
相关产品推荐
相关产品推荐

