在Replit运行Discord Bot脚本提示传入无效Token错误如何解决
报错触发原因
该报错是Discord身份验证未通过导致的,核心原因是传入的机器人令牌(Token)无效,最终抛出discord.errors.LoginFailure: Improper token has been passed异常,常见的无效场景包括:
- 代码中
bot.run('TOKEN')里的TOKEN是占位字符串,没有替换成Discord开发者后台生成的真实令牌 - 复制令牌时多带入了空格、换行符等多余字符
- 误将应用的客户端密钥(Client Secret)、OAuth2授权码当做机器人令牌传入
- 机器人令牌已经在开发者后台重置,代码中使用的是已失效的旧令牌
- 如果通过Replit的环境变量读取令牌,可能是环境变量名填写错误、变量值配置错误
解决方法
按以下步骤逐一排查即可修复:
- 确认已替换代码中的
TOKEN占位符,不要直接将字符串TOKEN作为bot.run的参数 - 进入Discord开发者平台对应应用的「Bot」页面,点击「Reset Token」重新生成令牌,完整复制生成的新令牌,注意不要多复制或漏复制字符
- 在Replit平台运行时不要将令牌直接写在代码中(避免泄露),推荐将令牌存入Replit的Secret(环境变量)面板,调用参考代码如下:
import os @bot.event async def on_ready(): print("Bot Online!") await bot.change_presence(activity = discord.Activity(type = discord.ActivityType.watching, name = "!help")) # 提前在Replit的Secrets面板添加变量:变量名设为DISCORD_BOT_TOKEN,值填你复制的真实令牌 bot.run(os.getenv('DISCORD_BOT_TOKEN'))
- 确认你复制的是「Bot」页面的专属令牌,不是应用「General Information」页面的Client Secret,二者功能完全不同,混用必然触发验证失败
- 运行前可添加一行打印代码校验令牌是否正确读取:
print(os.getenv('DISCORD_BOT_TOKEN')),确认输出内容和Discord后台生成的令牌完全一致
内容的提问来源于stack exchange,提问作者squishy
相关产品推荐
相关产品推荐

