diff --git a/message.go b/message.go index 8966c16..9e33dd2 100644 --- a/message.go +++ b/message.go @@ -19,8 +19,8 @@ type Message struct { ID string `json:"id"` ChannelID string `json:"channel_id"` Content string `json:"content"` - Timestamp string `json:"timestamp"` - EditedTimestamp string `json:"edited_timestamp"` + Timestamp Timestamp `json:"timestamp"` + EditedTimestamp Timestamp `json:"edited_timestamp"` MentionRoles []string `json:"mention_roles"` Tts bool `json:"tts"` MentionEveryone bool `json:"mention_everyone"` diff --git a/structs.go b/structs.go index c375fef..1b77403 100644 --- a/structs.go +++ b/structs.go @@ -140,17 +140,17 @@ type ICEServer struct { // A Invite stores all data related to a specific Discord Guild or Channel invite. type Invite struct { - Guild *Guild `json:"guild"` - Channel *Channel `json:"channel"` - Inviter *User `json:"inviter"` - Code string `json:"code"` - CreatedAt string `json:"created_at"` // TODO make timestamp - MaxAge int `json:"max_age"` - Uses int `json:"uses"` - MaxUses int `json:"max_uses"` - XkcdPass string `json:"xkcdpass"` - Revoked bool `json:"revoked"` - Temporary bool `json:"temporary"` + Guild *Guild `json:"guild"` + Channel *Channel `json:"channel"` + Inviter *User `json:"inviter"` + Code string `json:"code"` + CreatedAt Timestamp `json:"created_at"` + MaxAge int `json:"max_age"` + Uses int `json:"uses"` + MaxUses int `json:"max_uses"` + XkcdPass string `json:"xkcdpass"` + Revoked bool `json:"revoked"` + Temporary bool `json:"temporary"` } // A Channel holds all data related to an individual Discord channel. @@ -207,7 +207,7 @@ type Guild struct { AfkChannelID string `json:"afk_channel_id"` EmbedChannelID string `json:"embed_channel_id"` OwnerID string `json:"owner_id"` - JoinedAt string `json:"joined_at"` // make this a timestamp + JoinedAt Timestamp `json:"joined_at"` Splash string `json:"splash"` AfkTimeout int `json:"afk_timeout"` VerificationLevel VerificationLevel `json:"verification_level"` diff --git a/types.go b/types.go new file mode 100644 index 0000000..24f52c4 --- /dev/null +++ b/types.go @@ -0,0 +1,23 @@ +// Discordgo - Discord bindings for Go +// Available at https://github.com/bwmarrin/discordgo + +// Copyright 2015-2016 Bruce Marriner . All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file contains custom types, currently only a timestamp wrapper. + +package discordgo + +import ( + "time" +) + +// Timestamp stores a timestamp, as sent by the Discord API. +type Timestamp string + +// Parse parses a timestamp string into a time.Time object. +// The only time this can fail is if Discord changes their timestamp format. +func (t Timestamp) Parse() (time.Time, error) { + return time.Parse(time.RFC3339, string(t)) +} diff --git a/types_test.go b/types_test.go new file mode 100644 index 0000000..1d03aa3 --- /dev/null +++ b/types_test.go @@ -0,0 +1,24 @@ +package discordgo + +import ( + "testing" + "time" +) + +func TestTimestampParse(t *testing.T) { + ts, err := Timestamp("2016-03-24T23:15:59.605000+00:00").Parse() + if err != nil { + t.Fatal(err) + } + if ts.Year() != 2016 || ts.Month() != time.March || ts.Day() != 24 { + t.Error("Incorrect date") + } + if ts.Hour() != 23 || ts.Minute() != 15 || ts.Second() != 59 { + t.Error("Incorrect time") + } + + _, offset := ts.Zone() + if offset != 0 { + t.Error("Incorrect timezone") + } +}