Automattic / Automattic/node-canvas

Pango-Warning Fonts custom

Open
#2,399 0 comments 0 reactions 0 assignees View on GitHub
Text & Fonts
Dominant language
JavaScript
Stars
10.7k
Forks
1.2k
Avg merge
4d 8h
Merged PRs (30d)
1

Description

I have this error when i use my command for display my embed , i test multiple police and i have same warning

`(process:24588): Pango-WARNING **: 14:19:30.634: couldn't load font "Roboto Not-Rotated 60px", falling back to "Sans Not-Rotated 60px", expect ugly output.

(process:24588): Pango-WARNING **: 14:19:30.640: couldn't load font "Roboto Not-Rotated 24px", falling back to "Sans Not-Rotated 24px", expect ugly output.

(process:24588): Pango-WARNING **: 14:19:30.644: couldn't load font "Roboto Not-Rotated 50px", falling back to "Sans Not-Rotated 50px", expect ugly output.`

## Steps to Reproduce

```js
const { createCanvas, loadImage, registerFont } = require('canvas');
const path = require('path');
const fetch = require('node-fetch');
require('dotenv').config();
const { GUILD_ID, CHANNEL_MEMBER, CHANNEL_WELCOME, EMOJI_WELCOME } = process.env;
const { EmbedBuilder, AttachmentBuilder } = require('discord.js');

let cachedEmoji;

const fontPath = path.resolve(__dirname, '../../assets/fonts/Roboto-Regular.ttf');

try {
registerFont(fontPath, { family: 'Roboto' });
console.log('Font registered successfully');
} catch (error) {
console.error('Error registering font:', error);
}
const createWelcomeImage = async (member) => {
const canvas = createCanvas(400, 200);
const ctx = canvas.getContext('2d');

// Dégradé de fond
const gradient = ctx.createLinearGradient(0, 0, canvas.width, canvas.height);
gradient.addColorStop(0, '#36D1DC');
gradient.addColorStop(1, '#5B86E5');
ctx.fillStyle = gradient;
ctx.fillRect(0, 0, canvas.width, canvas.height);

// Avatar
let avatarBuffer;
try {
const avatarURL = member.user.displayAvatarURL({ format: 'png', size: 128 });
const response = await fetch(avatarURL);
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
avatarBuffer = await response.buffer();
} catch (error) {
console.error('Error fetching avatar, using default:', error);
const avatarCanvas = createCanvas(128, 128);
const avatarCtx = avatarCanvas.getContext('2d');
avatarCtx.fillStyle = '#CCCCCC';
avatarCtx.fillRect(0, 0, avatarCanvas.width, avatarCanvas.height);
avatarBuffer = avatarCanvas.toBuffer();
}

// Dessiner l'avatar
ctx.drawImage(await loadImage(avatarBuffer), 25, 36, 128, 128);

// Texte
ctx.fillStyle = '#FFFFFF';
ctx.textAlign = 'left';
ctx.font = '60px Roboto';
ctx.fillText('A bientôt', 160, 80);
ctx.font = '24px Roboto';
ctx.fillText('Sur le serveur Discord', 160, 120);
ctx.font = '50px Roboto';
ctx.fillText('Kokotti-TV', 160, 180);

return canvas.toBuffer();
};

module.exports = {
name: "guildMemberRemove",
once: false,
async execute(member, client) {
if (member.user.bot) return;

const updateChannelName = async () => {
const guild = client.guilds.cache.get(GUILD_ID);
if (!guild) return;

const channel = guild.channels.cache.get(CHANNEL_MEMBER);
if (!channel) return;

const memberCount = guild.memberCount;
await channel.setName(`『𝖪𝖮𝖪𝖮𝖬𝖤𝖬𝖡𝖱𝖤𝖲 - ${memberCount}』`);
};

const sendWelcomeEmbed = async () => {
const guild = client.guilds.cache.get(GUILD_ID);
if (!guild) return;

const welcomeChannel = guild.channels.cache.get(CHANNEL_WELCOME);
if (!welcomeChannel) return;

let welcomeImage;
try {
welcomeImage = await createWelcomeImage(member);
} catch (error) {
console.error('Error creating welcome image:', error);
}

const secondsElapsed = Math.floor((Date.now() - member.joinedTimestamp) / 1000);
const footerText = `Avait rejoint le serveur il y a ${secondsElapsed} seconde(s)`;

if (!cachedEmoji) {
cachedEmoji = client.emojis.cache.get(EMOJI_WELCOME);
}

const welcomeEmbed = new EmbedBuilder()
.setColor('#0099ff')
.setTitle('Un membre vient de partir... 🥹!')
.setDescription(`${cachedEmoji} Kobotti te souhaite un bon retour parmi nous ! ${member.user.username}`)
.setFooter({ text: footerText });

if (welcomeImage) {
const attachment = new AttachmentBuilder(welcomeImage, { name: 'welcome.png' });
welcomeEmbed.setImage('attachment://welcome.png');
await welcomeChannel.send({ embeds: [welcomeEmbed], files: [attachment] });
} else {
await welcomeChannel.send({ embeds: [welcomeEmbed] });
}
};

try {
await Promise.all([updateChannelName(), sendWelcomeEmbed()]);
} catch (error) {
console.error('Error in guildMemberRemove event:', error);
}
},
};

```

## Your Environment
* Version of node-canvas (output of `npm list canvas` or `yarn list canvas`):
* Environment (Node 20.12.1, discord.js v14.14.1, canvas v2.11.2):

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.