You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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)

核心逻辑说明

  1. 访问字典内的列表:API返回的JSON是字典结构,其中result键对应的值就是目标结果列表,通过data.get("result", [])可以安全获取该列表(键不存在时返回空列表)。
  2. 遍历列表展示内容:用for循环遍历列表中的每个元素,提取email和sources字段,将内容添加到消息卡片的字段中,最终发送给用户。
  3. 异常处理:添加请求异常捕获,避免Bot因网络问题或API错误崩溃。

内容的提问来源于stack exchange,提问作者paeri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:45:40