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

如何制作可发送HTTP请求并返回Embed的Discord斜杠命令机器人

实现Discord斜杠命令机器人方案

所需模块

  • discord.py:核心库,用于构建Discord机器人并处理斜杠命令交互
  • requests:发送HTTP请求获取外部数据
  • python-dotenv(可选):安全管理机器人令牌等敏感配置

分步实现

1. 前置准备

  • 在Discord开发者平台创建机器人应用,获取机器人令牌,开启消息内容特权和应用命令权限
  • 安装依赖:
pip install discord.py requests python-dotenv

2. 基础代码结构

import discord
from discord import app_commands
import requests
from dotenv import load_dotenv
import os

# 加载环境变量(令牌)
load_dotenv()

# 初始化客户端与命令树
intents = discord.Intents.default()
client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client)

3. 实现斜杠命令逻辑

@tree.command(name="findsomething", description="根据输入内容查询信息")
@app_commands.describe(something="要查询的内容(必填)")
async def find_something(interaction: discord.Interaction, something: str):
    # 存储用户输入的参数
    search_query = something

    # 发送HTTP请求(替换为你的目标API地址)
    try:
        api_response = requests.get(f"https://your-api-url.com/search?query={search_query}")
        api_response.raise_for_status()
        response_data = api_response.json()
    except requests.exceptions.RequestException as err:
        await interaction.response.send_message(f"请求失败:{str(err)}", ephemeral=True)
        return

    # 构建Discord Embed消息
    result_embed = discord.Embed(
        title=f"查询结果:{search_query}",
        color=discord.Color.green()
    )

    # 遍历响应数据并填充Embed(根据你的API返回结构调整)
    if isinstance(response_data, list) and len(response_data) > 0:
        for item in response_data:
            # 示例:假设每个结果项包含name和detail字段,按需修改
            result_embed.add_field(
                name=item.get("name", "未知名称"),
                value=item.get("detail", "无详细信息"),
                inline=False
            )
    else:
        result_embed.description = "未找到匹配的结果"

    # 回复用户
    await interaction.response.send_message(embed=result_embed)

4. 启动机器人并同步命令

@client.event
async def on_ready():
    # 全局同步命令(生效需等待1-2小时),测试时建议指定服务器同步
    await tree.sync()
    # 测试用:同步到指定服务器,替换为你的服务器ID
    # await tree.sync(guild=discord.Object(id=123456789012345678))
    print(f"机器人已登录:{client.user}")

# 启动机器人
client.run(os.getenv("DISCORD_TOKEN"))

关键注意事项

  • 令牌不要硬编码,用.env文件存储,格式为DISCORD_TOKEN=你的机器人令牌
  • 必须根据目标API的实际响应结构调整数据遍历和Embed填充逻辑
  • 异常处理不可少,避免因网络问题或API错误导致机器人崩溃
  • 服务器级命令同步会立即生效,适合开发测试;全局同步需等待Discord审核生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:52:15