add new bot code
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
package discord
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/bwmarrin/discordgo"
|
||||
)
|
||||
|
||||
// DiscordClient -
|
||||
type DiscordClient struct {
|
||||
Session *discordgo.Session
|
||||
ID string
|
||||
connected bool
|
||||
}
|
||||
|
||||
// Errors
|
||||
var (
|
||||
ErrTokenEmpty = errors.New("token is empty")
|
||||
ErrGuildIDEmpty = errors.New("guild id is empty")
|
||||
)
|
||||
|
||||
var client *DiscordClient
|
||||
|
||||
// NewClient -
|
||||
func NewClient(token string) (*DiscordClient, error) {
|
||||
if len(token) == 0 {
|
||||
return nil, ErrTokenEmpty
|
||||
}
|
||||
var err error
|
||||
|
||||
client = &DiscordClient{}
|
||||
client.Session, err = discordgo.New(fmt.Sprintf("Bot %s", token))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// register event
|
||||
client.Session.AddHandler(messageCreateEvt)
|
||||
client.Session.AddHandler(guildMemberAddEvt)
|
||||
client.Session.AddHandler(guildMemberRemoveEvt)
|
||||
client.Session.AddHandler(rateLimitEvt)
|
||||
client.Session.AddHandler(connectEvt)
|
||||
client.Session.AddHandler(disconnectEvt)
|
||||
|
||||
botInfo, err := client.Session.User("@me")
|
||||
if err != nil {
|
||||
return client, err
|
||||
}
|
||||
client.ID = botInfo.ID
|
||||
|
||||
return client, nil
|
||||
}
|
||||
|
||||
// Connect to discord websocket
|
||||
func (p *DiscordClient) Connect() error {
|
||||
if p.connected == true {
|
||||
return nil
|
||||
}
|
||||
return p.Session.Open()
|
||||
}
|
||||
|
||||
// Close discord websocket connection
|
||||
func (p *DiscordClient) Close() error {
|
||||
if p.connected == false {
|
||||
return nil
|
||||
}
|
||||
return p.Session.Close()
|
||||
}
|
||||
|
||||
// GetGuildOwner -
|
||||
func (p *DiscordClient) GetGuildOwner(guild string) (ownerID string, err error) {
|
||||
if len(ownerID) == 0 {
|
||||
return "", ErrGuildIDEmpty
|
||||
}
|
||||
guildInfo, err := p.Session.Guild(guild)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
ownerID = guildInfo.OwnerID
|
||||
return
|
||||
}
|
||||
|
||||
// GuildRole -
|
||||
type GuildRole struct {
|
||||
Name string
|
||||
ID string
|
||||
}
|
||||
|
||||
// GetGuildRoles -
|
||||
func (p *DiscordClient) GetGuildRoles(guild string) (roles []GuildRole, err error) {
|
||||
if len(guild) == 0 {
|
||||
return nil, ErrGuildIDEmpty
|
||||
}
|
||||
|
||||
roleInfos, err := p.Session.GuildRoles(guild)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
roles = make([]GuildRole, 0, len(roleInfos))
|
||||
for _, role := range roleInfos {
|
||||
r := GuildRole{
|
||||
ID: role.ID,
|
||||
Name: role.Name,
|
||||
}
|
||||
roles = append(roles, r)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// SendMessage -
|
||||
func (p *DiscordClient) SendMessage() error {
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package discord
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/bwmarrin/discordgo"
|
||||
)
|
||||
|
||||
func messageCreateEvt(s *discordgo.Session, evt *discordgo.MessageCreate) {
|
||||
guildID := evt.GuildID
|
||||
channelID := evt.ChannelID
|
||||
uid := evt.Author.ID
|
||||
_ = channelID
|
||||
_ = uid
|
||||
|
||||
ginfo, err := s.GuildRoles(guildID)
|
||||
// log.Println("get user info :: ", guildID, uid, evt.Author.Username)
|
||||
// uinfo, err := s.GuildMember(guildID, uid)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
// log.Println(uinfo.Roles)
|
||||
for _, it := range ginfo {
|
||||
log.Println(":: role :: ", it.ID, it.Name)
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package discord
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var tagRagexp = regexp.MustCompile("<@([0-9]+)>")
|
||||
|
||||
func getTagBot(msg string) bool {
|
||||
ids := tagRagexp.FindAllString(msg, -1)
|
||||
if len(ids) == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
for _, id := range ids {
|
||||
if id == client.ID {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func getCMD(str string) (cmd string, keyword bool) {
|
||||
cmd = ""
|
||||
keyword = false
|
||||
charNumber := []rune(str)[0]
|
||||
if charNumber == 33 || charNumber == 65218 {
|
||||
keyword = true
|
||||
if charNumber == 65218 {
|
||||
cmd = str[3:]
|
||||
} else {
|
||||
cmd = str[1:]
|
||||
}
|
||||
} else {
|
||||
cmd = str
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func parseTextMessage(msg string) (cmd string, keyword bool, payload string) {
|
||||
tagBot := getTagBot(msg)
|
||||
_ = tagBot
|
||||
msg = strings.TrimSpace(tagRagexp.ReplaceAllString(msg, ""))
|
||||
|
||||
strs := strings.Split(msg, " ")
|
||||
|
||||
cmd, keyword = getCMD(strs[0])
|
||||
|
||||
payload = strings.Join(strs[1:], " ")
|
||||
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user