You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord旧机器人!rank命令报错:Missing discriminator及字体警告

问题分析与解决办法

问题描述

恢复旧Discord机器人后,启动正常,但执行生成用户卡片的!rank命令时报错,当初开发时无此问题,报错信息如下:

(process:6848): Pango-WARNING **: 18:49:10.209: 无法加载字体 "Manrope Bold Not-Rotated 36px",将 fallback 到 "Sans Bold Not-Rotated 36px",输出效果可能很丑。
(node:6848) UnhandledPromiseRejectionWarning: Error: Missing discriminator!
在 Rank.build (D:\Новая папка (4)\discord_bot\node_modules\canvacord\src\Rank.js:511:53)
在 processTicksAndRejections (internal/process/task_queues.js:97:5)
(node:6)Orange
Author water手动)在 [ Prepare:未处理的Promise拒绝。该错误要么是因为在没有catch块的async函数中抛出异常,要么是因为拒绝了一个未用.catch()处理的Promise。
要在未处理的Promise拒绝时终止Node.js进程,请使用CLI标志 --unhandled-rejections=strict。(拒绝ID: 1)
(node:6848) [DEP0018] DeprecationWarning: 未处理的Promise拒绝已被弃用。未来,未处理的Promise拒绝将导致Node.js进程以非零退出码终止。

核心错误与修复

1. Missing discriminator! 错误

这是Canvacord库构建Rank卡片时,找不到用户的鉴别器(即用户名后#开头的四位数字)导致的,原因及解决:

  • 版本不兼容:新版Discord.js已移除discriminator字段(适配Discord无鉴别器用户名系统),但旧版Canvacord仍依赖该字段。升级Canvacord到最新版:
    npm install canvacord@latest
    
  • 代码兼容处理:如果升级后仍报错,手动给Rank实例传入鉴别器(兼容新旧用户系统):
    const rank = new canvacord.Rank()
      .setUser(user)
      .setDiscriminator(user.discriminator ?? '') // 无鉴别器时用空字符串替代
      // 其他卡片配置...
    

2. 字体加载警告

系统未安装Manrope字体导致,两种解决方式:

  • 下载安装Manrope字体到本地系统;
  • 替换为系统自带字体,比如:
    const rank = new canvacord.Rank()
      .setFont('Sans') // 用系统默认Sans字体替代
      // 其他卡片配置...
    

3. 未处理的Promise拒绝

给rank.build()添加错误捕获,避免进程崩溃:

rank.build()
  .then(data => {
    // 发送生成好的卡片逻辑
  })
  .catch(err => {
    console.error('生成Rank卡片失败:', err);
    // 给用户发送错误提示消息
  });

内容的提问来源于stack exchange,提问作者Fufulupa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:12:44