diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 361ca62..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,32 +0,0 @@ -version: "3" - -services: -# goff-db: -# image: postgres -# ports: -# - "5432:5432" -# volumes: -# - "${PWD}/postgres.conf:/etc/postgresql/postgresql.conf" -# - "goff-db:/var/lib/postgresql/data:rw" -# env_file: ${PWD}/.env - - goff: - build: - context: . - dockerfile: "${PWD}/Dockerfile" - env_file: ${PWD}/.env - logging: - driver: awslogs - options: - awslogs-region: us-east-1 - awslogs-group: "/docker/goff/production" -# depends_on: -# - goff-db - environment: - - DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}?sslmode=disable -# links: -# - goff-db:goff.db - -#volumes: -# goff-db: -# external: true \ No newline at end of file diff --git a/docker-dev.yml b/docker-dev.yml deleted file mode 100644 index 15da14d..0000000 --- a/docker-dev.yml +++ /dev/null @@ -1,32 +0,0 @@ -version: "3" - -services: -# goff-db: -# image: postgres -# ports: -# - "5432:5432" -# volumes: -# - "${PWD}/postgres.conf:/etc/postgresql/postgresql.conf" -# - "goff-db:/var/lib/postgresql/data:rw" -# env_file: ${PWD}/.env - - goff: - build: - context: . - dockerfile: "${PWD}/Dockerfile" - env_file: ${PWD}/.env -# logging: -# driver: awslogs -# options: -# awslogs-region: us-east-1 -# awslogs-group: "/docker/goff/production" -# depends_on: -# - goff-db - environment: - - DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}?sslmode=disable -# links: -# - goff-db:goff.db - -#volumes: -# goff-db: -# external: true diff --git a/events/member_events.go b/events/member_events.go index ebc0755..b56e7b9 100644 --- a/events/member_events.go +++ b/events/member_events.go @@ -133,3 +133,34 @@ func OnGuildMemberRemoveLogging(s *discordgo.Session, member *discordgo.GuildMem } s.ChannelMessageSendEmbed(channelID, embed) } + +func AddMemberToDatabase(s *discordgo.Session, m *discordgo.GuildMemberAdd) { + defer func() { + if r := recover(); r != nil { + log.Println("Recovered from panic in AddMemberToDatabase", r) + } + }() + queryString := `INSERT INTO users (id, banned, logging, is_active, is_staff, is_admin) + VALUES ($1, false, false, true, false, false)` + _, err := utils.Database.Exec(queryString, m.User.ID) + if err != nil { + log.Println(fmt.Errorf("error inserting %s into database: %w", m.User.ID, err)) + return + } + log.Printf("New User: %s\n", m.User.ID) +} + +func MarkMemberInactive(s *discordgo.Session, m *discordgo.GuildMemberRemove) { + defer func() { + if r := recover(); r != nil { + log.Println("Recovered from panic in MarkMemberInactive") + } + }() + queryString := `UPDATE users SET is_active = false WHERE id = $1` + _, err := utils.Database.Exec(queryString, m.User.ID) + if err != nil { + log.Println(fmt.Errorf("error marking %s as inactive: %w", m.User.ID, err)) + return + } + log.Println("User left: %s") +} diff --git a/exts/init.go b/exts/init.go index dfcda31..30e3317 100644 --- a/exts/init.go +++ b/exts/init.go @@ -15,7 +15,7 @@ func AddCommandHandlers(h *disgoman.CommandManager) { // run - function to run - func(anpan.Context, []string) / CommandRunFunc _ = h.AddCommand(&disgoman.Command{ Name: "ping", - Aliases: nil, + Aliases: []string{" "}, Description: "Check the bot's ping", OwnerOnly: false, Hidden: false, diff --git a/guild.go b/guild.go new file mode 100644 index 0000000..b58e704 --- /dev/null +++ b/guild.go @@ -0,0 +1,22 @@ +package main + +import "database/sql" + +type Guild struct { + ID string + WelcomeMessage string + GoodbyeMessage string + LoggingChannel string + WelcomeChannel string + PuzzleChannel string + PuzzleRole sql.NullString +} + +type GuildService interface { + Guild(id string) (*Guild, error) + Guilds() ([]*Guild, error) + CreateGuild(g *Guild) error + DeleteGuild(g *Guild) error + GuildUsers(g *Guild) ([]*User, error) + UpdateGuild(g *Guild) error +} diff --git a/utils/database.go b/postgres/database.go similarity index 99% rename from utils/database.go rename to postgres/database.go index 88d0aed..eb94b1b 100644 --- a/utils/database.go +++ b/postgres/database.go @@ -1,4 +1,4 @@ -package utils +package postgres import ( "database/sql" diff --git a/utils/postfixes.go b/postgres/postfixes.go similarity index 99% rename from utils/postfixes.go rename to postgres/postfixes.go index 0e324af..ad0a62e 100644 --- a/utils/postfixes.go +++ b/postgres/postfixes.go @@ -1,4 +1,4 @@ -package utils +package postgres import "log" diff --git a/postgres/user.go b/postgres/user.go new file mode 100644 index 0000000..a35f48b --- /dev/null +++ b/postgres/user.go @@ -0,0 +1,37 @@ +package postgres + +import ( + "database/sql" + + "github.com/dustinpianalto/goff" +) + +type UserService struct { + DB *sql.DB +} + +func (s *UserService) User(id string) (*goff.User, error) { + var u goff.User + queryString := `SELECT id, banned, logging, steam_id, is_active, is_staff, is_admin + FROM users WHERE id=$1` + row := s.DB.QueryRow(queryString, id) + if err := row.Scan(&u.ID, &u.Banned, &u.Logging, &u.SteamID, &u.IsActive, &u.IsStaff, &u.IsAdmin); err != nil { + return nil, err + } + var guilds []string + queryString = `SELECT guild_id from x_users_guilds WHERE user_id=$1` + rows, err := s.DB.Query(queryString, id) + if err != nil { + return nil, err + } + for rows.Next() { + var guildID string + err = rows.Scan(&guildID) + if err != nil { + return nil, err + } + guilds = append(guilds, guildID) + } + u.Guilds = guilds + return &u, nil +} diff --git a/user-data.sh b/user-data.sh deleted file mode 100644 index ec26ade..0000000 --- a/user-data.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -/usr/local/bin/docker-compose build || exit -/usr/local/bin/docker-compose up -d \ No newline at end of file diff --git a/user.go b/user.go new file mode 100644 index 0000000..04b860e --- /dev/null +++ b/user.go @@ -0,0 +1,22 @@ +package main + +type User struct { + ID string + Banned bool + Logging bool + SteamID string + IsActive bool + IsStaff bool + IsAdmin bool + Guilds []string +} + +type UserService interface { + User(id string) (*User, error) + CreateUser(u *User) error + DeleteUser(u *User) error + MarkUserInactive(u *User) error + AddUserToGuild(u *User, g *Guild) error + RemoveUserFromGuild(u *User, g *Guild) error + UpdateUser(u *User) error +} diff --git a/utils/types.go b/utils/types.go index 06bc2d1..d121cc2 100644 --- a/utils/types.go +++ b/utils/types.go @@ -11,3 +11,14 @@ type Guild struct { PuzzleChannel string PuzzleRole sql.NullString } + +type User struct { + ID string + Banned bool + Logging bool + SteamID string + IsActive bool + IsStaff bool + IsAdmin bool + Guilds []string +}