135 lines
2.7 KiB
Go
135 lines
2.7 KiB
Go
package discord
|
|
|
|
import (
|
|
dsmodel "dorisbot/models/discord"
|
|
pubmodel "dorisbot/models/public"
|
|
"log"
|
|
|
|
"github.com/bwmarrin/discordgo"
|
|
)
|
|
|
|
func messageCreateEvt(s *discordgo.Session, evt *discordgo.MessageCreate) {
|
|
// skip bot message
|
|
if evt.Author.ID == client.ID {
|
|
return
|
|
}
|
|
if len(evt.Content) == 0 {
|
|
return
|
|
}
|
|
guildID := evt.GuildID
|
|
channelID := evt.ChannelID
|
|
uid := evt.Author.ID
|
|
_ = channelID
|
|
_ = uid
|
|
|
|
server, err := dsmodel.GetDiscordServerByID(guildID)
|
|
if err != nil {
|
|
log.Println("get server err :: ", err)
|
|
return
|
|
}
|
|
|
|
cmd, keyword, payload := parseTextMessage(evt.Content)
|
|
|
|
_ = cmd
|
|
_ = payload
|
|
if !keyword && server == nil {
|
|
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]
|
|
|
|
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) {}
|
|
|
|
func guildMemberRemoveEvt(s *discordgo.Session, evt *discordgo.GuildMemberRemove) {}
|
|
|
|
func rateLimitEvt(s *discordgo.Session, evt *discordgo.RateLimit) {}
|
|
|
|
func connectEvt(s *discordgo.Session, evt *discordgo.Connect) {
|
|
log.Println(":: Connect ::")
|
|
client.connected = true
|
|
}
|
|
|
|
func disconnectEvt(s *discordgo.Session, evt *discordgo.Disconnect) {
|
|
log.Println(":: Disconnect ::")
|
|
client.connected = false
|
|
}
|