Browse Source

Timestamp type; a string with a Parse() function

Closes #204
uppfinnarn 7 years ago
parent
commit
0c11cae782
4 changed files with 58 additions and 14 deletions
  1. 2 2
      message.go
  2. 12 12
      structs.go
  3. 20 0
      types.go
  4. 24 0
      types_test.go

+ 2 - 2
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"`

+ 12 - 12
structs.go

@@ -137,17 +137,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.
@@ -204,7 +204,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"`

+ 20 - 0
types.go

@@ -0,0 +1,20 @@
+// Discordgo - Discord bindings for Go
+// Available at https://github.com/bwmarrin/discordgo
+
+// Copyright 2015-2016 Bruce Marriner <bruce@sqls.net>.  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"
+)
+
+type Timestamp string
+
+func (t Timestamp) Parse() (time.Time, error) {
+	return time.Parse("2006-01-02T15:04:05.000000-07:00", string(t))
+}

+ 24 - 0
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")
+	}
+}