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 {