From 94a9b4d03c390b247140f4dc11fa25208a142758 Mon Sep 17 00:00:00 2001 From: Danial Raza Date: Tue, 28 Oct 2025 15:54:22 +0100 Subject: [PATCH] fix(Message): update `pinnable` to use `PinMessages` (#11202) * fix(Message): update `pinnable` to use `PinMessages` * refactor: use bitwise OR Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> * fix: check if in voice based channel for pinnable * Update packages/discord.js/src/structures/Message.js * Update packages/discord.js/src/structures/Message.js Co-authored-by: Almeida * Update packages/discord.js/src/structures/Message.js Co-authored-by: Almeida --------- Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> Co-authored-by: Almeida --- packages/discord.js/src/structures/Message.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/discord.js/src/structures/Message.js b/packages/discord.js/src/structures/Message.js index fd49f1d72..0879b5231 100644 --- a/packages/discord.js/src/structures/Message.js +++ b/packages/discord.js/src/structures/Message.js @@ -799,12 +799,15 @@ class Message extends Base { */ get pinnable() { const { channel } = this; - return Boolean( - !this.system && - (!this.guild || - (channel?.viewable && - channel?.permissionsFor(this.client.user)?.has(PermissionFlagsBits.ManageMessages, false))), - ); + + if (this.system) return false; + if (!this.guild) return true; + if (!channel || channel.isVoiceBased() || !channel.viewable) return false; + + const permissions = channel.permissionsFor(this.client.user); + if (!permissions) return false; + + return permissions.has(PermissionFlagsBits.ReadMessageHistory | PermissionFlagsBits.PinMessages); } /**