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 }