From bb78120283b671d1926c8707a17a9d4d515aafdd Mon Sep 17 00:00:00 2001 From: X-Classified Date: Sat, 12 Dec 2020 13:40:39 -0800 Subject: [PATCH] fix(Message): #system non-zero message types are not guaranteed to be system (#5108) * fix(Message): #system not all nonzero message types are system * feat(Message): introduce system message types * refactor(Constants): change SystemMessageTypes to be exclusionary * fix(Constants): only need to check if type exists Co-authored-by: Jan <66554238+Vaporox@users.noreply.github.com> * fix(Constants): lint * fix(Typings): add SystemMessageTypees to Constants Co-authored-by: Jan <66554238+Vaporox@users.noreply.github.com> --- src/structures/Message.js | 4 ++-- src/util/Constants.js | 8 ++++++++ typings/index.d.ts | 3 +++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/structures/Message.js b/src/structures/Message.js index 3f420e322c27..63494f9df500 100644 --- a/src/structures/Message.js +++ b/src/structures/Message.js @@ -10,7 +10,7 @@ const ReactionCollector = require('./ReactionCollector'); const { Error, TypeError } = require('../errors'); const ReactionManager = require('../managers/ReactionManager'); const Collection = require('../util/Collection'); -const { MessageTypes } = require('../util/Constants'); +const { MessageTypes, SystemMessageTypes } = require('../util/Constants'); const MessageFlags = require('../util/MessageFlags'); const Permissions = require('../util/Permissions'); const SnowflakeUtil = require('../util/Snowflake'); @@ -62,7 +62,7 @@ class Message extends Base { * Whether or not this message was sent by Discord, not actually a user (e.g. pin notifications) * @type {?boolean} */ - this.system = data.type !== 0; + this.system = SystemMessageTypes.includes(this.type); } else if (typeof this.type !== 'string') { this.system = null; this.type = null; diff --git a/src/util/Constants.js b/src/util/Constants.js index 1d84a51eb200..84a1599f27e5 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -429,6 +429,14 @@ exports.MessageTypes = [ 'REPLY', ]; +/** + * The types of messages that are `System`. The available types are `MessageTypes` excluding: + * * DEFAULT + * * REPLY + * @typedef {string} SystemMessageType + */ +exports.SystemMessageTypes = exports.MessageTypes.filter(type => type && type !== 'DEFAULT' && type !== 'REPLY'); + /** * Bots cannot set a `CUSTOM_STATUS`, it is only for custom statuses received from users * The type of an activity of a users presence, e.g. `PLAYING`. Here are the available types: diff --git a/typings/index.d.ts b/typings/index.d.ts index 11c0190b2f78..1806074be46c 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -516,6 +516,7 @@ declare module 'discord.js' { BIG: 2; }; MessageTypes: MessageType[]; + SystemMessageTypes: SystemMessageType[]; ActivityTypes: ActivityType[]; ExplicitContentFilterLevels: ExplicitContentFilterLevel[]; DefaultMessageNotifications: DefaultMessageNotifications[]; @@ -3147,6 +3148,8 @@ declare module 'discord.js' { type SystemChannelFlagsResolvable = BitFieldResolvable; + type SystemMessageType = Exclude; + type TargetUser = number; interface TypingData {