如何让Discord Python Bot访问字典内的列表
Discord Bot 数据库泄露查询命令优化
原代码问题修正
先修正原代码里的几个明显错误:
- URL中的
{term}未做字符串格式化,直接请求会失败 json.loads(r)写法错误,应改用r.json()(更简洁)或json.loads(r.text)discord.Embed("FUCK")参数格式错误,需指定title或description参数
修改后完整代码
import requests import discord from discord import Context from discord.ext import commands @commands.hybrid_command( name="database", description="查询数据库泄露信息", ) async def leak(self, context: Context, term=None): headers = { "X-RapidAPI-Key": "aefc8d7af6msh49bcfed5a24016dp1a349ejsn8958ff298cf1", "X-RapidAPI-Host": "breachdirectory.p.rapidapi.com" } if term is None: em = discord.Embed(title="错误", description="请输入要查询的邮箱或关键词") await context.send(embed=em) return # 格式化请求URL,替换查询关键词 url = f"https://breachdirectory.p.rapidapi.com/?func=auto&term={term}" try: r = requests.get(url, headers=headers) r.raise_for_status() # 检查请求是否成功 data = r.json() # 检查API返回状态 if not data.get("success"): em = discord.Embed(title="查询失败", description="API返回错误,请稍后重试") await context.send(embed=em) return # 获取JSON字典内的结果列表 results = data.get("result", []) if not results: em = discord.Embed(title="查询结果", description="未找到相关泄露信息") await context.send(embed=em) return # 构建消息卡片展示内容 em = discord.Embed(title=f"数据库泄露查询结果(关键词:{term})", color=discord.Color.red()) for idx, item in enumerate(results, 1): email = item.get("email", "未知邮箱") sources = ", ".join(item.get("sources", [])) or "未知来源" em.add_field( name=f"结果 {idx}", value=f"邮箱:{email}\n泄露来源:{sources}", inline=False ) await context.send(embed=em) except requests.exceptions.RequestException as e: em = discord.Embed(title="请求失败", description=f"网络错误:{str(e)}") await context.send(embed=em)
核心逻辑说明
- 访问字典内的列表:API返回的JSON是字典结构,其中
result键对应的值就是目标结果列表,通过data.get("result", [])可以安全获取该列表(键不存在时返回空列表)。 - 遍历列表展示内容:用
for循环遍历列表中的每个元素,提取email和sources字段,将内容添加到消息卡片的字段中,最终发送给用户。 - 异常处理:添加请求异常捕获,避免Bot因网络问题或API错误崩溃。
内容的提问来源于stack exchange,提问作者paeri
相关产品推荐
相关产品推荐

