From 30d38d6d20303c094dfa044909b73e372268f685 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 2 Jul 2019 10:05:26 +0000 Subject: [PATCH] updaye database , and model --- config/config.yml | 10 ++--- models/discord/discord.go | 6 ++- models/models.go | 6 +-- pkg/config/config.go | 26 +++---------- pkg/svc/discord/events.go | 81 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 95 insertions(+), 34 deletions(-) diff --git a/config/config.yml b/config/config.yml index abd86f1..f620185 100644 --- a/config/config.yml +++ b/config/config.yml @@ -1,13 +1,9 @@ port: 10230 database: - dbname: '' + dbname: dorisbot host: localhost - port: 26257 - user: root + port: 5432 + user: postgres pass: '' - ssl_mode: require - ssl_ca: './ca.crt' - ssl_crt: './client.crt' - ssl_key: './client.key' discord: bot_token: '' diff --git a/models/discord/discord.go b/models/discord/discord.go index 4217a5b..8b52e76 100644 --- a/models/discord/discord.go +++ b/models/discord/discord.go @@ -1,6 +1,7 @@ package discord import ( + "database/sql" "dorisbot/models" pubmodel "dorisbot/models/public" "errors" @@ -69,6 +70,9 @@ func GetDiscordServerByID(id string) (ds *DiscordServerModel, err error) { ds = &DiscordServerModel{} query := `select "id", "name", "permission", "owner", "ctime", "mtime" from discord.server where "id" = $1` err = db.Get(ds, query, id) + if err == sql.ErrNoRows { + return nil, nil + } return } @@ -156,7 +160,7 @@ func (p *DiscordServerModel) GetRole(roleID string) (role *DiscordManageRoleMode role = &DiscordManageRoleModel{} query := `select "server", "role_id", "role_name", "ctime", "mtime" from "discord"."manage_role" where "server" = $1 and "rold_id" = $2` err = db.Get(role, query, p.ID, roleID) - if err != nil { + if err != nil && err != sql.ErrNoRows { return nil, err } return diff --git a/models/models.go b/models/models.go index aa78158..1060b75 100644 --- a/models/models.go +++ b/models/models.go @@ -20,16 +20,12 @@ var x *sqlx.DB // NewDB - func NewDB(conf *config.Database) (*sqlx.DB, error) { var err error - connStr := fmt.Sprintf("dbname=%s user=%s password=%s host=%s port=%d sslmode=%s sslrootcert=%s sslcert=%s sslkey=%s", + connStr := fmt.Sprintf("dbname=%s user=%s password=%s host=%s port=%d sslmode=disable", conf.DBName, conf.User, conf.Pass, conf.Host, conf.Port, - conf.SSLMode, - conf.SSLCa, - conf.SSLCrt, - conf.SSLKey, ) log.Println("DB Connstr :: ", connStr) diff --git a/pkg/config/config.go b/pkg/config/config.go index 6037832..a5f58c3 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -12,15 +12,11 @@ import ( // Database struct type Database struct { - DBName string `yaml:"dbname"` - Host string `yaml:"host"` - Port int `yaml:"port"` - User string `yaml:"user"` - Pass string `yaml:"pass"` - SSLCa string `yaml:"ssl_ca"` - SSLCrt string `yaml:"ssl_crt"` - SSLKey string `yaml:"ssl_key"` - SSLMode string `yaml:"ssl_mode"` + DBName string `yaml:"dbname"` + Host string `yaml:"host"` + Port int `yaml:"port"` + User string `yaml:"user"` + Pass string `yaml:"pass"` } // Discord struct @@ -76,17 +72,5 @@ func LoadConfig(p ...string) (err error) { return err } - if exists := utils.CheckExists(conf.Database.SSLCa, false); !exists { - return errors.New("ssl ca file not exists") - } - - if exists := utils.CheckExists(conf.Database.SSLCrt, false); !exists { - return errors.New("ssl crt file not exists") - } - - if exists := utils.CheckExists(conf.Database.SSLKey, false); !exists { - return errors.New("ssl key file not exists") - } - return } diff --git a/pkg/svc/discord/events.go b/pkg/svc/discord/events.go index 0a9aee2..3e1b6b7 100644 --- a/pkg/svc/discord/events.go +++ b/pkg/svc/discord/events.go @@ -2,6 +2,7 @@ package discord import ( dsmodel "dorisbot/models/discord" + pubmodel "dorisbot/models/public" "log" "github.com/bwmarrin/discordgo" @@ -35,6 +36,86 @@ func messageCreateEvt(s *discordgo.Session, evt *discordgo.MessageCreate) { return } + // discord server not init + if server == nil { + cmds, err := pubmodel.GetGlobalCommand(cmd) + if err != nil { + log.Println("get command fail :: ", err) + return + } + if len(cmds) == 0 { + log.Printf("no command found {%s}\n", cmd) + return + } + c := cmds[0] + if c.RequireInit { + log.Printf("{%s} require init server\n", cmd) + return + } + + if c.RequireManage { + ginfo, err := s.Guild(guildID) + if err != nil { + log.Println("get guild info err :: ", err) + return + } + if ginfo.OwnerID != uid { + log.Printf("{%s} require manage permission\n", cmd) + return + } + } + + // TODO: command parser + } else { + cmds, err := pubmodel.GetCommandByPlatformBinding(cmd, server.ID, "discord") + if err != nil { + log.Println("get command err :: ", err) + return + } + if len(cmds) == 0 { + log.Printf("no command found {%s}\n", cmd) + return + } + c := cmds[0] + + // TODO: check user role group + if c.RequireManage && server.Owner != uid { + roles, err := server.GetRoleList() + if err != nil { + log.Println("get server role err :: ", err) + return + } + rolePass := false + if len(roles) > 0 { + uinfo, err := s.GuildMember(guildID, uid) + if err != nil { + log.Println("get guild user info err :: ", err) + return + } + if len(uinfo.Roles) > 0 { + allPass := false + for _, it := range roles { + if allPass { + break + } + for _, rid := range uinfo.Roles { + if it.RoleID == rid { + rolePass = true + break + } + } + } + } + } + if !rolePass { + log.Printf("{%s} require manage role\n", cmd) + return + } + } + + // TODO: command parser + } + } func guildMemberAddEvt(s *discordgo.Session, evt *discordgo.GuildMemberAdd) {}