         embeds = DiscordEmbed.embedsFromArray(messageObject.get("embeds", or: JSONArray()))
         id = Snowflake(messageObject["id"] as? String) ?? 0
         mentionEveryone = messageObject.get("mention_everyone", or: false)
-        mentionRoles = messageObject.get("mention_roles", or: [String]())
+        mentionRoles = messageObject.get("mention_roles", or: [String]()).flatMap(Snowflake.init)
         mentions = DiscordUser.usersFromArray(messageObject.get("mentions", or: JSONArray()))
         nonce = Snowflake(messageObject["nonce"] as? String) ?? 0
         pinned = messageObject.get("pinned", or: false)

    public let mentionEveryone: Bool

    /// List of snowflake ids of roles that were mentioned in this message.
    public let mentionRoles: [String]

    /// List of users that were mentioned in this message.
    public let mentions: [DiscordUser]


    func createDataForSending() -> Either<Data, (boundary: String, body: Data)> {
        if let file = files.first {
            var fields: [String: Any] = [
                "content": content,
                "tts": tts,
            ]

            if let embed = embeds.first {
                fields["embed"] = embed.json
            }

            let encoded = JSON.encodeJSON(fields) ?? ""

            return .right(createMultipartBody(fields: ["payload_json": encoded], file: file))
        } else {
            let messageObject: [String: Any] = [
                "content": content,
