@@ -37,6 +37,7 @@ type CommandsTableRow struct {
37
37
38
38
var CmdsCache = cache .New ()
39
39
var RolesCache = cache .New ()
40
+ var GuildMetaCache = cache .New ()
40
41
41
42
func NewDB (cfg * config.Config ) (* sql.DB , error ) {
42
43
db , err := sql .Open ("sqlite3" , cfg .DBPath )
@@ -253,3 +254,35 @@ func GetRolebyGuildid(db *sql.DB, guildid int64) ([]string, error) {
253
254
RolesCache .Set (fmt .Sprintf ("%d" , guildid ), roles , 90 * time .Minute )
254
255
return roles , nil
255
256
}
257
+
258
+ // Add row to Roles table
259
+ func AddRole (db * sql.DB , guildid int64 , roleid string ) error {
260
+ sql := `INSERT INTO ApprovedRoles (guildid, roleid) VALUES (?, ?)`
261
+ _ , err := db .Exec (sql , guildid , roleid )
262
+ if err != nil {
263
+ return fmt .Errorf ("Error adding role: %v" , err )
264
+ }
265
+
266
+ log .Printf ("Added role %s to guild %d" , roleid , guildid )
267
+ return nil
268
+ }
269
+
270
+ // Lookup guild from guildid
271
+ func LookupGuild (db * sql.DB , guildid int64 ) (* GuildMetaRow , error ) {
272
+ // Check GuildMetaCache by guildid
273
+ if val , ok := GuildMetaCache .Get (fmt .Sprintf ("%d" , guildid )); ok {
274
+ return val .(* GuildMetaRow ), nil
275
+ }
276
+ sqlselect := `SELECT guildid, source, name, owner, textchan FROM GuildMetadata WHERE guildid = ?`
277
+ row := db .QueryRow (sqlselect , guildid )
278
+ guild := & GuildMetaRow {}
279
+ if err := row .Scan (& guild .Guildid , & guild .Source , & guild .Name , & guild .Owner , & guild .Textchan ); err != nil {
280
+ if err == sql .ErrNoRows {
281
+ return nil , nil
282
+ }
283
+ return nil , err
284
+ }
285
+
286
+ GuildMetaCache .Set (fmt .Sprintf ("%d" , guildid ), guild , 45 * time .Minute )
287
+ return guild , nil
288
+ }
0 commit comments