Skip to content

Commit ef4269f

Browse files
committed
feat(discord): add discord message and reaction models and service functions
1 parent 5e11f8c commit ef4269f

9 files changed

Lines changed: 164 additions & 3 deletions

File tree

discord/commands/ping.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ import (
88
)
99

1010
func Ping(args []string, s *discordgo.Session, m *discordgo.MessageCreate) {
11-
message, err := s.ChannelMessageSend(m.ChannelID, "Pong from "+config.Service.FormattedNameWithVersion()+"!")
11+
message, err := s.ChannelMessageSend(m.ChannelID, "Pong from "+"Sentinel v"+config.Service.Version+"!")
1212
if err == nil {
1313
delay := message.Timestamp.Sub(m.Timestamp).Milliseconds()
14-
s.ChannelMessageEdit(m.ChannelID, message.ID, "Pong from "+config.Service.FormattedNameWithVersion()+"! (**"+strconv.FormatInt(delay, 10)+"ms**)")
14+
s.ChannelMessageEdit(m.ChannelID, message.ID, "Pong from "+"Sentinel v"+config.Service.Version+"! (**"+strconv.FormatInt(delay, 10)+"ms**)")
1515
}
1616
}

discord/database/db.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"time"
66

77
"github.com/gaucho-racing/sentinel/discord/config"
8+
"github.com/gaucho-racing/sentinel/discord/model"
89
"github.com/gaucho-racing/sentinel/discord/pkg/logger"
910
"gorm.io/driver/postgres"
1011
"gorm.io/gorm"
@@ -28,7 +29,7 @@ func Init() {
2829
}
2930
} else {
3031
logger.SugarLogger.Infoln("Connected to database")
31-
db.AutoMigrate()
32+
db.AutoMigrate(&model.DiscordMessage{}, &model.DiscordReaction{})
3233
logger.SugarLogger.Infoln("AutoMigration complete")
3334
DB = db
3435
}

discord/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ require (
66
github.com/bk1031/rincon-go/v2 v2.0.0
77
github.com/bwmarrin/discordgo v0.29.0
88
github.com/fatih/color v1.19.0
9+
github.com/gaucho-racing/ulid-go v1.1.0
910
github.com/gin-contrib/cors v1.7.7
1011
github.com/gin-gonic/gin v1.12.0
1112
go.uber.org/zap v1.27.1

discord/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w=
1717
github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE=
1818
github.com/gabriel-vasile/mimetype v1.4.12 h1:e9hWvmLYvtp846tLHam2o++qitpguFiYCKbn0w9jyqw=
1919
github.com/gabriel-vasile/mimetype v1.4.12/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s=
20+
github.com/gaucho-racing/ulid-go v1.1.0 h1:x00XM8EjlegfhlLYIob+U8ba5iX0gDRUr8mgBsjCunk=
21+
github.com/gaucho-racing/ulid-go v1.1.0/go.mod h1:HwqoC27UtvXHrmhTO7K2GnXZ1VAeR6tg6EjrSEP5JUU=
2022
github.com/gin-contrib/cors v1.7.7 h1:Oh9joP463x7Mw72vhvJ61YQm8ODh9b04YR7vsOErD0Q=
2123
github.com/gin-contrib/cors v1.7.7/go.mod h1:K5tW0RkzJtWSiOdikXloy8VEZlgdVNpHNw8FpjUPNrE=
2224
github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=

discord/model/discord_message.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package model
2+
3+
import "time"
4+
5+
type DiscordMessage struct {
6+
ID string `json:"id" gorm:"primaryKey"`
7+
EntityID string `json:"entity_id"`
8+
DiscordUserID string `json:"discord_user_id" gorm:"index"`
9+
ChannelID string `json:"channel_id"`
10+
MessageID string `json:"message_id"`
11+
Content string `json:"content"`
12+
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
13+
}
14+
15+
func (DiscordMessage) TableName() string {
16+
return "discord_message"
17+
}

discord/model/discord_reaction.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package model
2+
3+
import "time"
4+
5+
type DiscordReaction struct {
6+
ID string `json:"id" gorm:"primaryKey"`
7+
EntityID string `json:"entity_id"`
8+
DiscordUserID string `json:"discord_user_id" gorm:"index"`
9+
ChannelID string `json:"channel_id"`
10+
MessageID string `json:"message_id"`
11+
Emoji string `json:"emoji"`
12+
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
13+
}
14+
15+
func (DiscordReaction) TableName() string {
16+
return "discord_reaction"
17+
}

discord/service/discord_message.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package service
2+
3+
import (
4+
"github.com/gaucho-racing/sentinel/discord/database"
5+
"github.com/gaucho-racing/sentinel/discord/model"
6+
"github.com/gaucho-racing/ulid-go"
7+
)
8+
9+
func GetAllDiscordMessages() ([]model.DiscordMessage, error) {
10+
var messages []model.DiscordMessage
11+
if err := database.DB.Find(&messages).Error; err != nil {
12+
return []model.DiscordMessage{}, err
13+
}
14+
return messages, nil
15+
}
16+
17+
func GetDiscordMessageByID(id string) (model.DiscordMessage, error) {
18+
var message model.DiscordMessage
19+
if err := database.DB.Where("id = ?", id).First(&message).Error; err != nil {
20+
return model.DiscordMessage{}, err
21+
}
22+
return message, nil
23+
}
24+
25+
func GetDiscordMessagesByDiscordUserID(discordUserID string) ([]model.DiscordMessage, error) {
26+
var messages []model.DiscordMessage
27+
if err := database.DB.Where("discord_user_id = ?", discordUserID).Find(&messages).Error; err != nil {
28+
return []model.DiscordMessage{}, err
29+
}
30+
return messages, nil
31+
}
32+
33+
func GetDiscordMessagesByEntityID(entityID string) ([]model.DiscordMessage, error) {
34+
var messages []model.DiscordMessage
35+
if err := database.DB.Where("entity_id = ?", entityID).Find(&messages).Error; err != nil {
36+
return []model.DiscordMessage{}, err
37+
}
38+
return messages, nil
39+
}
40+
41+
func CreateDiscordMessage(message model.DiscordMessage) (model.DiscordMessage, error) {
42+
if message.ID == "" {
43+
message.ID = ulid.Make().Prefixed("dmsg")
44+
}
45+
message.EntityID = GetEntityIDForDiscordUser(message.DiscordUserID)
46+
if err := database.DB.Create(&message).Error; err != nil {
47+
return model.DiscordMessage{}, err
48+
}
49+
return message, nil
50+
}
51+
52+
func DeleteDiscordMessage(id string) error {
53+
if err := database.DB.Where("id = ?", id).Delete(&model.DiscordMessage{}).Error; err != nil {
54+
return err
55+
}
56+
return nil
57+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package service
2+
3+
import (
4+
"github.com/gaucho-racing/sentinel/discord/database"
5+
"github.com/gaucho-racing/sentinel/discord/model"
6+
"github.com/gaucho-racing/ulid-go"
7+
)
8+
9+
func GetAllDiscordReactions() ([]model.DiscordReaction, error) {
10+
var reactions []model.DiscordReaction
11+
if err := database.DB.Find(&reactions).Error; err != nil {
12+
return []model.DiscordReaction{}, err
13+
}
14+
return reactions, nil
15+
}
16+
17+
func GetDiscordReactionByID(id string) (model.DiscordReaction, error) {
18+
var reaction model.DiscordReaction
19+
if err := database.DB.Where("id = ?", id).First(&reaction).Error; err != nil {
20+
return model.DiscordReaction{}, err
21+
}
22+
return reaction, nil
23+
}
24+
25+
func GetDiscordReactionsByDiscordUserID(discordUserID string) ([]model.DiscordReaction, error) {
26+
var reactions []model.DiscordReaction
27+
if err := database.DB.Where("discord_user_id = ?", discordUserID).Find(&reactions).Error; err != nil {
28+
return []model.DiscordReaction{}, err
29+
}
30+
return reactions, nil
31+
}
32+
33+
func GetDiscordReactionsByEntityID(entityID string) ([]model.DiscordReaction, error) {
34+
var reactions []model.DiscordReaction
35+
if err := database.DB.Where("entity_id = ?", entityID).Find(&reactions).Error; err != nil {
36+
return []model.DiscordReaction{}, err
37+
}
38+
return reactions, nil
39+
}
40+
41+
func CreateDiscordReaction(reaction model.DiscordReaction) (model.DiscordReaction, error) {
42+
if reaction.ID == "" {
43+
reaction.ID = ulid.Make().Prefixed("drxn")
44+
}
45+
reaction.EntityID = GetEntityIDForDiscordUser(reaction.DiscordUserID)
46+
if err := database.DB.Create(&reaction).Error; err != nil {
47+
return model.DiscordReaction{}, err
48+
}
49+
return reaction, nil
50+
}
51+
52+
func DeleteDiscordReaction(id string) error {
53+
if err := database.DB.Where("id = ?", id).Delete(&model.DiscordReaction{}).Error; err != nil {
54+
return err
55+
}
56+
return nil
57+
}

discord/service/entity.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package service
2+
3+
// GetEntityIDForDiscordUser resolves a Discord user ID to a Sentinel entity ID.
4+
// Returns "" if no mapping is found, allowing callers to persist records
5+
// with an empty entity_id that can be backfilled later.
6+
func GetEntityIDForDiscordUser(discordUserID string) string {
7+
// TODO: implement lookup via EntityExternalAuth
8+
return ""
9+
}

0 commit comments

Comments
 (0)