
人工智能AI AgentMCP 服务工具调用GUI 自动化语音数字人交互助手【免费下载链接】airi 自托管、归你拥有的 Grok 风格 AI 伴侣与 waifu / 赛博生命灵魂容器目标是接近 Neuro-sama 的高度支持实时语音聊天、Minecraft 和 Factorio 游玩支持 Web / macOS / Windows。项目地址https://gitcode.com/moeru-ai/airi点击查看免费下载本文以 docs/content/zh-Hans/docs/integrations/discord.md 为骨架结合integrations/discord-bot模块的源码系统讲解如何在 Discord 服务器中运行 AIRI 的文本与语音机器人。读完本文你将掌握 Discord 应用与 Bot 的创建、本地凭据配置、机器人启动方式以及文本消息、语音频道交互背后的完整调用链。概述机器人如何连接 Discord 与 AIRIDiscord 机器人proj-airi/discord-bot是一个独立于 AIRI 主程序运行的集成模块负责连接 Discord 服务器中的消息频道与语音频道并将收到的内容转发给已配置的模型服务生成回复。从源码结构看它由三层组成参见 integrations/discord-bot/src 目录入口层index.ts 创建DiscordAdapter并启动进程适配层airi-adapter.ts 同时维护 Discord 客户端与 AIRI 服务端通道ServerChannel双向转发事件能力层commands 下注册斜杠命令VoiceManager 负责语音频道的进出、音频采集与播放。其中 AIRI 侧连接通过proj-airi/server-sdk提供的Client即ServerChannel建立默认连接地址为ws://localhost:6121/ws默认 token 为abcd均可通过环境变量覆盖。该客户端实现了模块握手module:authenticate→extension:module:announce与心跳保活机制详见 client.ts。前提条件在启动机器人之前需要满足以下条件仓库根目录依赖已安装执行pnpm i。在 Discord Developer Portal 创建应用Application并生成 Bot。在 Bot 设置页的Privileged Gateway Intents区域开启两个特权意图Server Members IntentMessage Content Intent已准备聊天模型如 OpenAI 兼容接口与语音服务的凭据。::: warning 凭据安全 Discord Bot Token、Client ID 和模型 API Key 只应保存在本地.env.local文件中。不要提交、截图或发送这些配置。Token 丢失或泄露时应立即在开发者控制台点击 Reset Token 重置并同步更新本地.env.local。 :::配置文件与参数说明仓库为integrations/discord-bot提供了模板环境文件 .env。首次配置时执行cp integrations/discord-bot/.env integrations/discord-bot/.env.local然后编辑integrations/discord-bot/.env.local逐项填写凭据。完整变量清单如下变量用途说明DISCORD_TOKENDiscord Bot Token在开发者控制台 Bot 标签页生成必填DISCORD_BOT_CLIENT_IDBot 的应用 Client ID用于注册斜杠命令必填OPENAI_MODEL聊天模型名经createOpenAI创建客户端后用于生成回复OPENAI_API_BASE_URL聊天模型 API 端点兼容 OpenAI 协议的服务地址OPENAI_API_KEY聊天模型 API Key必填OPENAI_STT_API_BASE_URL语音转文字STT端点语音频道对话时把用户语音转成文本OPENAI_STT_API_KEYSTT 服务 Key必填OPENAI_STT_MODELSTT 模型名传给generateTranscription见 tts.tsELEVENLABS_API_KEYElevenLabs TTS Key用于生成机器人语音回复ELEVENLABS_API_BASE_URLElevenLabs 端点默认指向官方服务可自托管替换环境变量的加载机制启动脚本见 package.json通过tsx的两个参数实现分层加载start: tsx --env-file.env --env-file-if-exists.env.local src/index.ts即先加载模板.env若存在.env.local则覆盖前者——这保证了凭据只存在于本地文件不会污染仓库。src/index.ts中通过node:process的env读取配置并提供了以下默认值discordToken: env.DISCORD_TOKEN || , // 无 token 时等待 UI 下发的动态配置 airiToken: env.AIRI_TOKEN || abcd, // 连接 AIRI 服务端的认证 token airiUrl: env.AIRI_URL || ws://localhost:6121/ws,启动机器人配置完成后在仓库根目录执行pnpm -F proj-airi/discord-bot start启动过程参见 airi-adapter.ts 的start()若环境变量中存在DISCORD_TOKEN则调用discordClient.login(token)登录 Discord登录成功后触发ClientReady自动调用registerCommands注册斜杠命令到 Bot 的 Application同时ServerChannel自动连接 AIRI 服务端并完成握手进程监听SIGINT/SIGTERM信号在退出前调用adapter.stop()销毁 Discord 客户端并关闭 AIRI 通道实现优雅停机。如果未设置DISCORD_TOKEN日志会提示Discord token not provided. Waiting for configuration from UI.此时机器人保持等待直到通过 AIRI 的界面下发配置见下文动态配置一节。文本消息处理流程机器人对文本消息的响应逻辑位于 airi-adapter.ts 的MessageCreate事件处理器中完整链路如下触发条件消息作者不是机器人且满足被提及或私信DM二者其一清洗文本提及场景下用/!?\d/g正则剥离 mention 前缀只保留实际发言内容会话隔离根据上下文计算sessionId频道消息 →discord-guild-${guildId}私信 →discord-dm-${userId}上下文增强将channelId、guildId、guildName、guildMemberid/nickname/displayName封装为Discord元数据该类型定义见 events.ts并通过ContextUpdateStrategy.AppendSelf追加一段消息来自 Discord 频道 X的提示发送给 AIRI通过airiClient.send()发出input:text事件携带messagePrefix形如(From Discord user 昵称 on server 服务器名):与上述元数据。AIRI 生成回复后机器人通过监听output:gen-ai:chat:message事件取回结果再写回 Discord 频道。值得注意的是代码针对 Discord 单条消息2000 字符上限做了分段处理优先在 2000 字符内的最后一个换行处分段其次退化为最后一个空格剩余内容循环发送。语音频道交互Summon 流程语音对话是 Discord 集成最具特色的能力全部逻辑集中在 summon.ts 的VoiceManager中。加入语音频道用户执行/summon斜杠命令命令定义见 index.ts描述为Summons the bot to your voice channel校验调用者是否处于语音频道未加入则回复Please join a voice channel first.调用joinVoiceChannel建立连接selfDeaf: false、selfMute: false并等待Ready或Signalling状态超时 20 秒建立成功后回复Joined: ${channel.name}.并注册stateChange、error、speaking监听通过setSelfVoice尝试解除静音/耳麦关闭需要DeafenMembers权限失败仅记录日志、不中断流程。连接状态机对断线也有自愈逻辑进入Disconnected时先尝试 5 秒内回到Signalling/Connecting若失败则判定为真实断连并清理连接与监听器。语音采集与转写每个发言的成员会被订阅音频流处理管线如下connection.receiver.subscribe(userId)拿到 Opus 音频流OpusDecoder 基于opusscript将 Opus 帧解码为 PCM采样率 16kHz 单声道常量见 audio.ts该取值与 picovoice 组件兼容AudioMonitor 以最多 10MB 的环形缓冲收集 PCM 数据在speakingStopped或流结束时取出整段音频convertOpusToWav 为 PCM 拼装标准 44 字节 WAV 头RIFF/WAVE/fmt/data生成可提交的 WAV 文件转写采用1.5 秒静默防抖DEBOUNCE_TRANSCRIPTION_THRESHOLD 1500用户停止说话 1.5 秒后才触发转写避免把一句话切成多段openaiTranscribe 将 WAV 以Blob形式提交给 OpenAI 兼容的 STT 接口返回文本后会过滤[BLANK_AUDIO]等无效结果转写文本通过input:text:voice与input:text两个事件发送给 AIRI同时携带 Discord 上下文。值得一提的备选方案tts.ts中还保留了本地转写的transcribe()实现使用huggingface/transformers加载Xenova/whisper-medium.en模型音频会先重采样到 16kHz、转为 32 位浮点再送入 Whisper——适合希望完全离线运行 STT 的场景。回复播放与抢话打断AIRI 返回语音回复后playAudioStream()创建AudioPlayer并将音频流包装为AudioResource播放。为避免与用户同时说话代码实现了一套音量感知的抢话打断机制机器人播放期间持续监听用户音频的 PCM 采样取Int16Array归一化后的最大振幅维护 30 帧滑动窗口计算平均音量当平均音量超过阈值0.05SPEAKING_THRESHOLD判定用户正在说话立即调用cleanupAudioPlayer停止当前播放让出话语权播放器在noSubscriber时采用Pause行为避免无人订阅时直接销毁资源。动态配置通过 AIRI 界面远程管理机器人除环境变量外适配器还监听了module:configure事件airi-adapter.ts 的setupEventHandlers()允许从 AIRI 的界面实时下发 Discord 配置而不必重启进程。其行为规则如下下发的配置机器人行为enabled: false若已就绪则destroy()客户端停止运行enabled: true但无token记录警告并停止当前客户端token 变化或客户端未就绪先销毁旧连接再用新 token 重新login()module:configure处理期间通过isReconnecting标志防重入避免配置风暴导致的并发冲突。这一设计意味着DISCORD_TOKEN既可以用.env.local提供也可以在运行时由界面注入二者互为补充。注意事项权限最小化邀请机器人加入服务器前确认应用权限仅覆盖所需的频道与能力。机器人至少需要读取消息、发送消息、加入语音频道、订阅音频的权限setSelfVoice的静音操作还需要DeafenMembers权限缺失时仅跳过不影响主流程。凭据管理不要将 Bot Token 或其他服务凭据提交到仓库。.env.local已被视为本地专属文件其余成员应各自执行cp .env .env.local后独立填写。Token 轮换Token 丢失或泄露时到开发者控制台点击 Reset Token 重新生成并同步更新.env.local或通过 AIRI 界面重新下发。运行环境本文描述的启动方式适用于本地开发环境默认连接ws://localhost:6121/ws若 AIRI 服务端运行在其他地址请通过AIRI_URL/AIRI_TOKEN环境变量调整。赞分享人工智能AI AgentMCP 服务工具调用GUI 自动化语音数字人交互助手【免费下载链接】airi 自托管、归你拥有的 Grok 风格 AI 伴侣与 waifu / 赛博生命灵魂容器目标是接近 Neuro-sama 的高度支持实时语音聊天、Minecraft 和 Factorio 游玩支持 Web / macOS / Windows。项目地址https://gitcode.com/moeru-ai/airi点击查看免费下载相关推荐如何用 Wand-Enhancer 免费解锁 WeMod Pro从本地构建到完成修补的完整指南如何用 Wand Enhancer 免费解锁 WeMod Pro从本地构建到完成修补的完整指南 Wand Enhancer 是一个开源的 WeMod 本地修补桌面应用前端AI 应用AIRI Discord 机器人集成实战语音与文本双向对话的配置、部署与源码解析AIRI Discord 机器人集成实战语音与文本双向对话的配置、部署与源码解析 导读 本文基于 AIRI 仓库中的官方文档 docs/content/ko/人工智能AI AgentMCP 服务工具调用GUI 自动化语音数字人交互助手后端在 Olares 上将 OpenClaw 接入 Discord机器人创建、频道配置与账户配对完整指南在 Olares 上将 OpenClaw 接入 Discord机器人创建、频道配置与账户配对完整指南 本指南基于 Olares 文档《将 OpenClaw 与云原生后端运维上一篇gdsfactory企业级应用Google、Meta等公司的成功案例解析下一篇Metallb开发工具配置Vim编辑器插件与设置推荐创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考