“LoginFailure: Improper token has been passed” / TokenInvalid
含义: Discord 拒绝了机器人用于登录的令牌。确切的消息取决于所用的库:- discord.py:
discord.errors.LoginFailure: Improper token has been passed. - discord.js v14:
Error [TokenInvalid]: An invalid token was provided. - 旧版 discord.js:
Error [TOKEN_INVALID]: An invalid token was provided. - 其他库: 登录时返回 HTTP
401 Unauthorized。
- 令牌在 Discord 开发者门户中被重新生成或撤销。生成新令牌会立即使旧令牌在所有使用它的地方失效。
- 令牌字符串中不小心复制进了多余的空格或引号。
- 代码读取了错误的环境变量,或者 Square Cloud 上没有设置该变量。
- 前往开发者门户 → 你的应用 → Bot → Reset Token。
- 在应用的环境变量中更新令牌(控制面板的 Settings → Environment Variables,或使用
squarecloud app env set)。切勿将令牌提交到会被上传到 zip 中的文件里。 - 仔细检查该值周围是否有多余的空格或引号。
- 更新库版本(
discord.js@latest或pip install -U discord.py)。 - 重启应用,让它加载新的值。
“Used disallowed intents” / Message Content Intent
含义: 机器人登录成功并显示在线,但会忽略所有消息,或者网关以 “used disallowed intents” 拒绝连接。 发生原因: 自 2022 年起,Message Content 成为特权 intent。如果没有在两处都明确启用它,消息内容将为空(或者如果你的代码声明了一个该应用未启用的 intent,网关连接会被拒绝)。 如何在两处都修复:- Discord 开发者门户 → 你的应用 → Bot → Privileged Gateway Intents → 启用 Message Content Intent。
- 同时在代码中声明它:
- 重启应用。
一旦机器人加入的服务器超过 100 个,特权 intents(包括 Message Content)还需要在同一个开发者门户页面申请 Discord 的审批。
Lavalink connection closed with code 1006
含义: 机器人的 Lavalink 客户端异常关闭了 WebSocket 连接,代码为 1006,通常之前还会出现 “Unexpected server response: 400”。 发生原因: 这是版本不匹配导致的。Lavalink v4 基于 REST,与为 v3 构建的客户端封装库不兼容,因此握手失败,连接以 1006 关闭。 如何修复:- 使机器人的 Lavalink 客户端封装库版本与 Lavalink 服务器的主版本保持一致(v3 客户端配 v3 服务器,v4 客户端配 v4 服务器)。
- 在 Square Cloud 上,Lavalink 服务器本身绑定端口
80,但你的机器人必须通过边缘节点的端口443并设置secure: true来连接它。 - 修复版本不匹配问题后,重启 Lavalink 应用和机器人应用两者。
机器人在本地正常运行,但部署后离线
含义: 机器人在你本机运行时登录正常,但部署后离线(或反复重启)。 最常见的发生原因:- 网关层的连接不稳定,且没有重连处理。
- 你本地测试的依赖版本与依赖文件中的版本冲突或不兼容。
- 机器人因超出 RAM 或 CPU,或因向 Discord API 发送过多请求而被停止。这种情况下日志中会出现一行
[SQUARE-SHIELD],你也会收到一封邮件:参见状态表。
- 首先查看控制面板中的应用日志,它们会显示实际的崩溃原因。
- 添加错误处理程序,避免瞬时错误使进程崩溃:discord.js 中的
process.on("unhandledRejection", ...)和client.on("error", ...),discord.py 中的等效处理方式。 - 在
squarecloud.app中添加AUTORESTART=true,让 Square Cloud 在机器人崩溃后重启它。该选项默认关闭,并且只会在AUTORESTART中列出的情况下重启。它能让机器人在瞬时错误中保持存活,但永远无法修复无效的令牌、语法错误或缺失的依赖:这些仍需要在代码中修复。 - 留意 Discord API 速率限制(429):全局限制约为每个机器人令牌每秒 50 个请求,各路由还有更严格的限制(例如频道创建/编辑大约每个频道每 10 分钟允许 2 次更改)。请积极使用缓存,使用能遵循
X-RateLimit-Remaining/X-RateLimit-Reset-After响应头的异步队列,并对批量发送使用 webhook。持续向 Discord 发送过多请求的机器人会以ABUSE_REQUESTS被停止。
相关指南
- Discord 机器人托管教程:从零开始设置并部署机器人。
- 环境变量:把令牌存放在代码之外。
- 应用无法启动:上传错误、缺失模块以及其他启动失败。

