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

Canvas与discord.js开发的Discord欢迎卡文字显示为▯问题咨询

Discord Canvas欢迎卡片文字显示占位符故障解决方案

文字显示「▯」占位符的核心原因是渲染所用字体在运行环境中缺失、或字体不支持待渲染字符的字符集:

  1. 你代码中指定了Arial字体,若代码部署的服务器/容器环境未预装Arial字体,会导致所有文字渲染失败
  2. 若新成员昵称包含中文、小语种、特殊符号、Emoji等Arial原生不支持的字符,也会出现占位符

修复步骤

  • 步骤1:准备多语言兼容字体
    下载支持全字符集的开源字体(如Noto Sans系列,支持绝大多数语言、特殊符号与Emoji),将字体文件放到项目目录下,例如./fonts/NotoSans-Regular.ttf、./fonts/NotoColorEmoji.ttf
  • 步骤2:注册自定义字体
    在代码初始化阶段(创建Canvas实例前)注册本地字体,无需依赖系统预装字体:
    const { registerFont, createCanvas } = require('canvas');
    // 注册自定义字体,family字段可自定义,后续渲染时直接用该名称即可
    registerFont('./fonts/NotoSans-Regular.ttf', { family: 'NotoSans' });
    registerFont('./fonts/NotoColorEmoji.ttf', { family: 'NotoEmoji' });
    
  • 步骤3:替换渲染字体配置
    将原代码中所有Arial字体替换为你注册的字体,可添加多个字体作为兜底:
    // 原120px Arial替换为
    ctx.font = '120px "NotoSans", "NotoEmoji", sans-serif';
    // 原60px Arial替换为
    ctx.font = '60px "NotoSans", "NotoEmoji", sans-serif';
    
  • 可选兼容优化(适配高版本discord.js)
    若你使用v13及以上版本的discord.js,附件发送写法需要调整为files参数形式,避免图片发送失败:
    // 原发送代码替换为
    member.guild.channels.cache.get("873169519881900033").send({
      content: `Hey <@${id}>Welkom in **${member.guild.name}**!`,
      files: [attachment]
    })
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 10:36:01