diff options
| author | Adelyn Breelove <[email protected]> | 2019-01-21 08:52:33 -0700 |
|---|---|---|
| committer | Adelyn Breelove <[email protected]> | 2019-01-21 08:52:33 -0700 |
| commit | c3d6e15bb89d4a93a2fa486db6c8e126baf4da2e (patch) | |
| tree | 3fe6679ff4520899bab9ab9fb96145efd614a3a3 /lib/models/channel/message/embed.ml | |
| parent | swap order of fields in example bot to reflect correct ordering (diff) | |
| download | disml-c3d6e15bb89d4a93a2fa486db6c8e126baf4da2e.tar.xz disml-c3d6e15bb89d4a93a2fa486db6c8e126baf4da2e.zip | |
folder restructure
Diffstat (limited to 'lib/models/channel/message/embed.ml')
| -rw-r--r-- | lib/models/channel/message/embed.ml | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/lib/models/channel/message/embed.ml b/lib/models/channel/message/embed.ml new file mode 100644 index 0000000..9f9aacd --- /dev/null +++ b/lib/models/channel/message/embed.ml @@ -0,0 +1,121 @@ +open Core + +type footer = { + text: string; + icon_url: string option [@default None]; + proxy_icon_url: string option [@default None]; +} [@@deriving sexp, yojson] + +type image = { + url: string option [@default None]; + proxy_url: string option [@default None]; + height: int option [@default None]; + width: int option [@default None]; +} [@@deriving sexp, yojson] + +type video = { + url: string option [@default None]; + height: int option [@default None]; + width: int option [@default None]; +} [@@deriving sexp, yojson] + +type provider = { + name: string option [@default None]; + url: string option [@default None]; +} [@@deriving sexp, yojson] + +type author = { + name: string option [@default None]; + url: string option [@default None]; + icon_url: string option [@default None]; + proxy_icon_url: string option [@default None]; +} [@@deriving sexp, yojson] + +type field = { + name: string; + value: string; + inline: bool [@default false]; +} [@@deriving sexp, yojson] + +type t = { + title: string option [@default None]; + kind: string option [@default None][@key "type"]; + description: string option [@default None]; + url: string option [@default None]; + timestamp: string option [@default None]; + colour: int option [@default None][@key "color"]; + footer: footer option [@default None]; + image: image option [@default None]; + thumbnail: image option [@default None]; + video: video option [@default None]; + provider: provider option [@default None]; + author: author option [@default None]; + fields: field list [@default []]; +} [@@deriving sexp, yojson { strict = false }] + +let default = { + title = None; + kind = None; + description = None; + url = None; + timestamp = None; + colour = None; + footer = None; + image = None; + thumbnail = None; + video = None; + provider = None; + author = None; + fields = []; +} + +let default_footer = { + text = ""; + icon_url = None; + proxy_icon_url = None; +} + +let default_image = { + url = None; + proxy_url = None; + height = None; + width = None; +} + +let default_video = { + url = None; + width = None; + height = None; +} + +let default_provider = { + name = None; + url = None; +} + +let default_author = { + name = None; + url = None; + icon_url = None; + proxy_icon_url = None; +} + +let title v e = { e with title = Some v } +let description v e = { e with description = Some v } +let url v e = { e with url = Some v } +let timestamp v e = { e with timestamp = Some v } +let colour v e = { e with colour = Some v } +let color v e = { e with colour = Some v } +let footer f e = { e with footer = Some (f default_footer) } +let image v e = { e with image = Some { default_image with url = Some v } } +let thumbnail v e = { e with thumbnail = Some { default_image with url = Some v } } +let author f e = { e with author = Some (f default_author) } +let field (name, value, inline) e = { e with fields = { name; value; inline; }::e.fields } +let fields l e = { e with fields = List.map ~f:(fun (name, value, inline) -> { name; value; inline; }) l } + +let footer_text v f : footer = { f with text = v } +let footer_icon v f : footer = { f with icon_url = Some v } + +let author_name v a : author = { a with name = Some v } +let author_url v a : author = { a with url = Some v } +let author_icon v a : author = { a with icon_url = Some v }
\ No newline at end of file |