Discord 机器人集成允许您通过 Discord 提供代理或团队,使用 discord.py 库来处理 Discord 事件和发送消息。

设置步骤

设置与配置

1

先决条件

请确保您拥有以下条件:

  • Python 3.7+
  • 一个拥有服务器管理权限的 Discord 账户
  • 所需的 Python 包(将在后续步骤中安装)
2

创建 Discord 应用

  1. 前往 Discord 开发者门户
  2. 点击“New Application”(新建应用)
  3. 提供一个应用名称(例如,“My Agno Bot”)
  4. 接受开发者服务条款
  5. 点击“Create”(创建)
3

创建 Bot 用户

  1. 在您的应用设置中,导航至“Bot”部分
  2. 点击“Add Bot”(添加 Bot)
  3. 通过点击“Yes, do it!”(是的,就这么做!)进行确认
  4. 在“Token”部分下,点击“Copy”(复制)以复制您的 Bot 令牌
  5. 将此令牌安全地保存起来(稍后需要用到)
4

配置 Bot 权限和意图

  1. 在 Bot 设置中,向下滚动至“Privileged Gateway Intents”(特权网关意图)
  2. 启用以下意图:
    • Presence Intent (可选,用于用户状态)
    • Server Members Intent (用于成员相关的事件)
    • Message Content Intent (读取消息内容必需)
  3. 在“Bot Permissions”(Bot 权限)下,确保您的 Bot 具有:
    • Send Messages(发送消息)
    • Read Message History(读取消息历史)
    • Create Public Threads(创建公开话题)
    • Use Slash Commands(使用斜杠命令)(可选)
5

设置环境变量

在项目根目录下创建一个 .envrc 文件,其中包含以下内容,将占位符替换为您真实的 Bot 令牌:

export DISCORD_BOT_TOKEN="your_bot_token_here"

在 Discord 开发者门户的“Bot” > “Token”下找到您的 Bot 令牌。

确保您的 shell 已加载此文件(例如,通过使用 direnv allow)。

6

安装所需包

安装必要的 Python 包:

pip install discord.py agno
7

将 Bot 邀请到您的 Discord 服务器

  1. 在您的应用设置中,前往“OAuth2” > “URL Generator”(URL 生成器)
  2. 在“Scopes”(范围)下,选择:
    • bot
    • applications.commands (如果使用斜杠命令)
  3. 在“Bot Permissions”(Bot 权限)下,选择您的 Bot 所需的权限:
    • Send Messages(发送消息)
    • Create Public Threads(创建公开话题)
    • Read Message History(读取消息历史)
    • Attach Files(附加文件)
    • Embed Links(嵌入链接)
    • Use External Emojis(使用外部表情符号)(可选)
  4. 复制生成的 URL,在浏览器中访问它,并选择您想添加 Bot 的服务器
8

测试您的 Bot

  1. 启动您的 Bot 应用
  2. 前往您的 Discord 服务器
  3. 在您的 Bot 有权访问的任何频道中发送一条消息
  4. 您的 Bot 应该会自动创建一个话题并进行回复
  5. 如果您使用的是媒体 Bot,尝试上传图片或文件来测试媒体处理

示例用法

创建一个代理,用 DiscordClient 包装它,然后运行它:

from agno.agent import Agent
from agno.app.discord import DiscordClient
from agno.models.openai import OpenAIChat

basic_agent = Agent(
    name="Basic Agent",
    model=OpenAIChat(id="gpt-4o"),
    add_history_to_messages=True,
    num_history_responses=3,
    add_datetime_to_instructions=True,
)

discord_agent = DiscordClient(basic_agent)
if __name__ == "__main__":
    discord_agent.serve()

核心组件

  • DiscordClient: 使用 discord.py 为 Discord 集成包装 Agno 代理/团队。
  • DiscordClient.serve: 使用提供的令牌启动 Discord 机器人客户端。

DiscordClient

Agno Discord 机器人应用程序的主入口点。

初始化参数

参数类型默认值描述
agentOptional[Agent]NoneAgno Agent 实例。
teamOptional[Team]NoneAgno Team 实例。

请提供 agentteam,但不要同时提供。

事件处理

Discord 机器人会自动处理各种 Discord 事件:

消息事件

  • 描述: 处理用户的所有传入消息
  • 媒体支持: 处理图像、视频、音频文件和文档
  • 线程: 自动为对话创建线程
  • 功能:
    • 为每次对话自动创建线程
    • 媒体处理和转发给代理
    • 对超过 1500 个字符的响应进行消息拆分
    • 支持推理内容显示
    • 使用用户名和消息 URL 丰富上下文

支持的媒体类型

  • 图像: 直接处理 URL 以进行图像分析
  • 视频: 下载并处理视频内容
  • 音频: 基于 URL 的音频处理
  • 文件: 下载并处理文档附件

环境变量

确保设置了以下环境变量:

export DISCORD_BOT_TOKEN="your-discord-bot-token"

消息处理

机器人通过以下工作流程处理消息:

  1. 消息接收: 从 Discord 频道接收消息
  2. 媒体处理: 下载并处理任何附加媒体
  3. 线程管理: 为对话创建或使用现有线程
  4. 代理/团队执行: 将消息和媒体转发给配置的代理或团队
  5. 响应处理: 将响应发送回 Discord,如有必要则拆分长消息
  6. 推理显示: 在可用时以斜体显示推理内容

功能

自动创建线程

  • 为用户的每条第一条消息创建一个新线程
  • 在线程内维护对话上下文
  • 使用格式: {username}'s thread

媒体支持

  • 图像: 作为带有 URL 的 Image 对象传递
  • 视频: 下载并作为带有内容的 Video 对象传递
  • 音频: 作为带有 URL 的 Audio 对象传递
  • 文件: 下载并作为带有内容的 File 对象传递

消息格式化

  • 长消息(>1500 个字符)会被自动拆分
  • 推理内容将以斜体显示
  • 拆分消息的批次编号: [1/3] 消息内容

测试集成

  1. 设置您的 Discord 机器人令牌: export DISCORD_BOT_TOKEN="your-token"
  2. 运行您的应用程序: python your_discord_bot.py
  3. 将机器人邀请到您的 Discord 服务器
  4. 在机器人有访问权限的任何频道中发送消息
  5. 机器人将自动创建线程并响应