75 lines
1.3 KiB
Go
75 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/diamondburned/arikawa/v3/discord"
|
|
"github.com/georgysavva/scany/pgxscan"
|
|
)
|
|
|
|
type Guild struct {
|
|
ID uint64
|
|
Channels map[string]discord.Snowflake
|
|
Redirects map[string]discord.Snowflake
|
|
IgnoredChannels []uint64
|
|
BannedSystems []string
|
|
KeyRoles []uint64
|
|
IgnoredUsers []uint64
|
|
}
|
|
|
|
type Invite struct {
|
|
GuildID uint64
|
|
Code string
|
|
Name string
|
|
}
|
|
|
|
type WatchlistEntry struct {
|
|
GuildID uint64
|
|
UserID uint64
|
|
Moderator uint64
|
|
Added time.Time
|
|
Reason string
|
|
}
|
|
|
|
type GuildsExport struct {
|
|
Guilds []Guild
|
|
Invites []Invite
|
|
Watchlist []WatchlistEntry
|
|
}
|
|
|
|
func exportGuilds() error {
|
|
var guilds []Guild
|
|
err := pgxscan.Select(ctx, conn, &guilds, "SELECT * FROM guilds")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var invites []Invite
|
|
err = pgxscan.Select(ctx, conn, &invites, "SELECT * FROM invites")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var watchlist []WatchlistEntry
|
|
err = pgxscan.Select(ctx, conn, &watchlist, "SELECT * FROM watchlist")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
b, err := json.Marshal(GuildsExport{guilds, invites, watchlist})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
filename := fmt.Sprintf("guilds-%v.json", time.Now().Unix())
|
|
|
|
err = os.WriteFile(filename, b, 0o755)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|