diff --git a/internal/discord_utils/date_strings.go b/internal/discord_utils/date_strings.go new file mode 100644 index 0000000..f55d808 --- /dev/null +++ b/internal/discord_utils/date_strings.go @@ -0,0 +1,64 @@ +package discord_utils + +import ( + "fmt" + "time" +) + +func ParseDateString(inTime time.Time) string { + d := time.Now().Sub(inTime) + s := int64(d.Seconds()) + days := s / 86400 + s = s - (days * 86400) + hours := s / 3600 + s = s - (hours * 3600) + minutes := s / 60 + seconds := s - (minutes * 60) + dateString := "" + if days != 0 { + dateString += fmt.Sprintf("%v days ", days) + } + if hours != 0 { + dateString += fmt.Sprintf("%v hours ", hours) + } + if minutes != 0 { + dateString += fmt.Sprintf("%v minutes ", minutes) + } + if seconds != 0 { + dateString += fmt.Sprintf("%v seconds ", seconds) + } + if dateString != "" { + dateString += " ago." + } else { + dateString = "Now" + } + stamp := inTime.Format("2006-01-02 15:04:05") + return fmt.Sprintf("%v\n%v", dateString, stamp) +} + +func ParseDurationString(inDur time.Duration) string { + s := int64(inDur.Seconds()) + days := s / 86400 + s = s - (days * 86400) + hours := s / 3600 + s = s - (hours * 3600) + minutes := s / 60 + seconds := s - (minutes * 60) + durString := "" + if days != 0 { + durString += fmt.Sprintf("%v days ", days) + } + if hours != 0 { + durString += fmt.Sprintf("%v hours ", hours) + } + if minutes != 0 { + durString += fmt.Sprintf("%v minutes ", minutes) + } + if seconds != 0 { + durString += fmt.Sprintf("%v seconds ", seconds) + } + if durString == "" { + durString = "0 seconds" + } + return fmt.Sprintf("%v", durString) +} diff --git a/internal/discord_utils/snowflake.go b/internal/discord_utils/snowflake.go new file mode 100644 index 0000000..d521086 --- /dev/null +++ b/internal/discord_utils/snowflake.go @@ -0,0 +1,32 @@ +package discord_utils + +import "time" + +type Snowflake struct { + CreationTime time.Time + WorkerID int8 + ProcessID int8 + Increment int16 +} + +func ParseSnowflake(s int64) Snowflake { + const ( + DISCORD_EPOCH = 1420070400000 + TIME_BITS_LOC = 22 + WORKER_ID_LOC = 17 + WORKER_ID_MASK = 0x3E0000 + PROCESS_ID_LOC = 12 + PROCESS_ID_MASK = 0x1F000 + INCREMENT_MASK = 0xFFF + ) + creationTime := time.Unix(((s>>TIME_BITS_LOC)+DISCORD_EPOCH)/1000.0, 0) + workerID := (s & WORKER_ID_MASK) >> WORKER_ID_LOC + processID := (s & PROCESS_ID_MASK) >> PROCESS_ID_LOC + increment := s & INCREMENT_MASK + return Snowflake{ + CreationTime: creationTime, + WorkerID: int8(workerID), + ProcessID: int8(processID), + Increment: int16(increment), + } +} diff --git a/internal/exts/utils/utils.go b/internal/exts/utils/utils.go index 215e6a7..9a2a2a8 100644 --- a/internal/exts/utils/utils.go +++ b/internal/exts/utils/utils.go @@ -9,7 +9,7 @@ import ( "github.com/bwmarrin/discordgo" "github.com/dustinpianalto/disgoman" - "github.com/dustinpianalto/goff/internal/discord_utils" + "github.com/dustinpianalto/geeksbot/internal/discord_utils" ) var PingCommand = &disgoman.Command{