Discord Bot问题:如何在Embed中显示所有Fortnite皮肤历史日期
解决方案
问题出在你每次循环都会覆盖fecha变量,最终只保留了最后一个日期的时间戳。要展示所有日期,需要先收集所有日期,再统一插入到Embed中。
修改后的代码如下:
from datetime import datetime # 若你用的是dateutil的isoparse,替换成from dateutil.parser import isoparse import requests import discord @bot.command() async def skin(ctx): response = requests.get("https://fortnite-api.com/v2/cosmetics/br/search/all?language=es&name=palito%20de%20pescado%20de%20gominola&searchLanguage=es") historialSKIN = response.json() # 初始化列表存储所有日期时间戳 fechas = [] for item in historialSKIN["data"]: for datestr in item['shopHistory']: # 转换为时间戳并添加到列表,用isoparse的话就换成int(isoparse(datestr).timestamp()) fecha_timestamp = int(datetime.fromisoformat(datestr).timestamp()) fechas.append(str(fecha_timestamp)) # 将所有日期用换行拼接成字符串,在Embed中逐行显示 fechas_str = '\n'.join(fechas) embed = discord.Embed(title="皮肤上架历史", description=f"所有上架时间戳:\n{fechas_str}") embed.add_field(name="皮肤名称", value="Palito de pescado de gominola", inline=False) await ctx.send(embed=embed)
关键修改点:
- 新增
fechas列表,用来收集每一个日期的时间戳,避免变量被循环覆盖 - 循环时用
append将每个时间戳添加到列表中 - 用
'\n'.join(fechas)把列表元素转成换行分隔的字符串,确保所有日期都能在Embed中显示 - 优化了变量命名,提升代码可读性
如果想展示更友好的日期格式(而非时间戳),可以把转换逻辑改成:
fecha_formateada = datetime.fromisoformat(datestr).strftime("%Y-%m-%d %H:%M:%S") fechas.append(fecha_formateada)
内容的提问来源于stack exchange,提问作者juancarlos5487
相关产品推荐
相关产品推荐

