diff options
Diffstat (limited to 'lib/models/user')
| -rw-r--r-- | lib/models/user/activity.ml | 7 | ||||
| -rw-r--r-- | lib/models/user/activity.mli | 5 | ||||
| -rw-r--r-- | lib/models/user/presence.ml | 10 | ||||
| -rw-r--r-- | lib/models/user/user.ml | 20 | ||||
| -rw-r--r-- | lib/models/user/user.mli | 8 | ||||
| -rw-r--r-- | lib/models/user/user_t.ml | 13 |
6 files changed, 63 insertions, 0 deletions
diff --git a/lib/models/user/activity.ml b/lib/models/user/activity.ml new file mode 100644 index 0000000..8e6ff80 --- /dev/null +++ b/lib/models/user/activity.ml @@ -0,0 +1,7 @@ +open Core + +type t = { + name: string; + kind: int [@key "type"]; + url: string [@default ""]; +} [@@deriving sexp, yojson { strict = false}]
\ No newline at end of file diff --git a/lib/models/user/activity.mli b/lib/models/user/activity.mli new file mode 100644 index 0000000..53173b7 --- /dev/null +++ b/lib/models/user/activity.mli @@ -0,0 +1,5 @@ +type t = { + name: string; + kind: int; + url: string; +} [@@deriving sexp, yojson]
\ No newline at end of file diff --git a/lib/models/user/presence.ml b/lib/models/user/presence.ml new file mode 100644 index 0000000..ab245a7 --- /dev/null +++ b/lib/models/user/presence.ml @@ -0,0 +1,10 @@ +open Core + +type t = { + user: User_t.partial_user; + roles: Snowflake.t list; + game: Activity.t option [@default None]; + guild_id: Snowflake.t; + status: string; + activities: Activity.t list; +} [@@deriving sexp, yojson { strict = false}]
\ No newline at end of file diff --git a/lib/models/user/user.ml b/lib/models/user/user.ml new file mode 100644 index 0000000..bd6583c --- /dev/null +++ b/lib/models/user/user.ml @@ -0,0 +1,20 @@ +open Core +include User_t + +let tag user = + Printf.sprintf "%s#%s" user.username user.discriminator + +let mention user = + Printf.sprintf "<@%d>" user.id + +let default_avatar user = + let avatar = Int.of_string user.discriminator % 5 in + Endpoints.cdn_default_avatar avatar + +let face user = match user.avatar with + | Some avatar -> + let ext = if String.is_substring ~substring:"a_" avatar + then "gif" + else "png" in + Endpoints.cdn_avatar user.id avatar ext + | None -> default_avatar user
\ No newline at end of file diff --git a/lib/models/user/user.mli b/lib/models/user/user.mli new file mode 100644 index 0000000..2cc6184 --- /dev/null +++ b/lib/models/user/user.mli @@ -0,0 +1,8 @@ +include module type of User_t + +val tag : t -> string +val mention : t -> string +val default_avatar : t -> string +val face : t -> string +(* val private_channel : t -> Channel_t.t *) +(* val send : t -> Yojson.Safe.json Deferred.Or_error.t *)
\ No newline at end of file diff --git a/lib/models/user/user_t.ml b/lib/models/user/user_t.ml new file mode 100644 index 0000000..52dbaf4 --- /dev/null +++ b/lib/models/user/user_t.ml @@ -0,0 +1,13 @@ +open Core + +type partial_user = { + id: Snowflake.t; +} [@@deriving sexp, yojson { strict = false}] + +type t = { + id: Snowflake.t; + username: string; + discriminator: string; + avatar: string option [@default None]; + bot: bool [@default false]; +} [@@deriving sexp, yojson { strict = false }]
\ No newline at end of file |