Discord 机器人集成允许您通过 Discord 提供代理或团队,使用 discord.py 库来处理 Discord 事件和发送消息。
设置步骤
设置与配置
先决条件
请确保您拥有以下条件:
- Python 3.7+
- 一个拥有服务器管理权限的 Discord 账户
- 所需的 Python 包(将在后续步骤中安装)
创建 Discord 应用
- 前往 Discord 开发者门户
- 点击“New Application”(新建应用)
- 提供一个应用名称(例如,“My Agno Bot”)
- 接受开发者服务条款
- 点击“Create”(创建)
创建 Bot 用户
- 在您的应用设置中,导航至“Bot”部分
- 点击“Add Bot”(添加 Bot)
- 通过点击“Yes, do it!”(是的,就这么做!)进行确认
- 在“Token”部分下,点击“Copy”(复制)以复制您的 Bot 令牌
- 将此令牌安全地保存起来(稍后需要用到)
配置 Bot 权限和意图
- 在 Bot 设置中,向下滚动至“Privileged Gateway Intents”(特权网关意图)
- 启用以下意图:
- Presence Intent (可选,用于用户状态)
- Server Members Intent (用于成员相关的事件)
- Message Content Intent (读取消息内容必需)
- 在“Bot Permissions”(Bot 权限)下,确保您的 Bot 具有:
- Send Messages(发送消息)
- Read Message History(读取消息历史)
- Create Public Threads(创建公开话题)
- Use Slash Commands(使用斜杠命令)(可选)
设置环境变量
在项目根目录下创建一个 .envrc
文件,其中包含以下内容,将占位符替换为您真实的 Bot 令牌:
export DISCORD_BOT_TOKEN="your_bot_token_here"
在 Discord 开发者门户的“Bot” > “Token”下找到您的 Bot 令牌。
确保您的 shell 已加载此文件(例如,通过使用 direnv allow
)。
安装所需包
安装必要的 Python 包:
pip install discord.py agno
将 Bot 邀请到您的 Discord 服务器
- 在您的应用设置中,前往“OAuth2” > “URL Generator”(URL 生成器)
- 在“Scopes”(范围)下,选择:
bot
applications.commands
(如果使用斜杠命令)
- 在“Bot Permissions”(Bot 权限)下,选择您的 Bot 所需的权限:
- Send Messages(发送消息)
- Create Public Threads(创建公开话题)
- Read Message History(读取消息历史)
- Attach Files(附加文件)
- Embed Links(嵌入链接)
- Use External Emojis(使用外部表情符号)(可选)
- 复制生成的 URL,在浏览器中访问它,并选择您想添加 Bot 的服务器
测试您的 Bot
- 启动您的 Bot 应用
- 前往您的 Discord 服务器
- 在您的 Bot 有权访问的任何频道中发送一条消息
- 您的 Bot 应该会自动创建一个话题并进行回复
- 如果您使用的是媒体 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 机器人应用程序的主入口点。
初始化参数
参数 | 类型 | 默认值 | 描述 |
---|
agent | Optional[Agent] | None | Agno Agent 实例。 |
team | Optional[Team] | None | Agno Team 实例。 |
请提供 agent
或 team
,但不要同时提供。
事件处理
Discord 机器人会自动处理各种 Discord 事件:
消息事件
- 描述: 处理用户的所有传入消息
- 媒体支持: 处理图像、视频、音频文件和文档
- 线程: 自动为对话创建线程
- 功能:
- 为每次对话自动创建线程
- 媒体处理和转发给代理
- 对超过 1500 个字符的响应进行消息拆分
- 支持推理内容显示
- 使用用户名和消息 URL 丰富上下文
支持的媒体类型
- 图像: 直接处理 URL 以进行图像分析
- 视频: 下载并处理视频内容
- 音频: 基于 URL 的音频处理
- 文件: 下载并处理文档附件
环境变量
确保设置了以下环境变量:
export DISCORD_BOT_TOKEN="your-discord-bot-token"
消息处理
机器人通过以下工作流程处理消息:
- 消息接收: 从 Discord 频道接收消息
- 媒体处理: 下载并处理任何附加媒体
- 线程管理: 为对话创建或使用现有线程
- 代理/团队执行: 将消息和媒体转发给配置的代理或团队
- 响应处理: 将响应发送回 Discord,如有必要则拆分长消息
- 推理显示: 在可用时以斜体显示推理内容
自动创建线程
- 为用户的每条第一条消息创建一个新线程
- 在线程内维护对话上下文
- 使用格式:
{username}'s thread
媒体支持
- 图像: 作为带有 URL 的
Image
对象传递
- 视频: 下载并作为带有内容的
Video
对象传递
- 音频: 作为带有 URL 的
Audio
对象传递
- 文件: 下载并作为带有内容的
File
对象传递
消息格式化
- 长消息(>1500 个字符)会被自动拆分
- 推理内容将以斜体显示
- 拆分消息的批次编号:
[1/3] 消息内容
测试集成
- 设置您的 Discord 机器人令牌:
export DISCORD_BOT_TOKEN="your-token"
- 运行您的应用程序:
python your_discord_bot.py
- 将机器人邀请到您的 Discord 服务器
- 在机器人有访问权限的任何频道中发送消息
- 机器人将自动创建线程并响应
Responses are generated using AI and may contain mistakes.