/
guildrepo.go
121 lines (92 loc) · 2.22 KB
/
guildrepo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package repositories
import (
"errors"
"gorm.io/gorm"
)
const DEFAULT_PREFIX = "!"
type GuildModel struct {
gorm.Model
Snowflake string
Voicechannel string
Prefix string
Name string
Icon string
}
type GuildRepository struct {
db *gorm.DB
}
func NewGuildRepository(mysql *gorm.DB) *GuildRepository {
return &GuildRepository{
db: mysql,
}
}
func MigrateGuildRepo(g *GuildRepository) error {
return g.db.AutoMigrate(
&GuildModel{},
)
}
func (g *GuildRepository) LoadGuild(guildId, name, icon string) {
var model GuildModel
tx := g.db.First(&model, "snowflake = ?", guildId)
if errors.Is(tx.Error, gorm.ErrRecordNotFound) {
g.db.Create(&GuildModel{
Snowflake: guildId,
Prefix: DEFAULT_PREFIX,
Name: name,
Icon: icon,
})
} else {
model.Name = name
model.Icon = icon
g.db.Save(&model)
}
}
func (g *GuildRepository) GetVoiceChannels() map[string]string {
m := make(map[string]string)
var models []GuildModel
tx := g.db.Find(&models, "voicechannel != ''")
if tx.Error != nil {
return m
}
for i := range models {
m[models[i].Snowflake] = models[i].Voicechannel
}
return m
}
func (g *GuildRepository) UpdatePrefix(guildId, prefix string) {
g.db.Model(&GuildModel{}).Where("snowflake", guildId).Update("prefix", prefix)
}
func (g *GuildRepository) GetPrefix(guildId string) string {
var m GuildModel
tx := g.db.First(&m, "snowflake = ?", guildId)
if tx.Error != nil {
return DEFAULT_PREFIX
}
if m.Snowflake == "" {
return DEFAULT_PREFIX
}
return m.Prefix
}
func (g *GuildRepository) JoinVoiceChannel(guildId, channelId string) {
g.db.Model(&GuildModel{}).Where("snowflake = ?", guildId).UpdateColumn("voicechannel", channelId)
}
func (g *GuildRepository) GetVoiceChannel(guildId string) string {
var channelId string
tx := g.db.Model(&GuildModel{}).Where("snowflake = ?", guildId).Pluck("voicechannel", &channelId)
if tx.Error != nil {
return ""
}
return channelId
}
func (g *GuildRepository) GetGuilds() map[string]string {
m := make(map[string]string)
var models []GuildModel
tx := g.db.Find(&models, "voicechannel != ''")
if tx.Error != nil {
return m
}
for i := range models {
m[models[i].Snowflake] = models[i].Name
}
return m
}