grim/wasdead

e42b44a80cf1
use shlex.Split instead of our crappy regex split
package discord
import (
"strings"
"time"
"github.com/bwmarrin/discordgo"
log "github.com/sirupsen/logrus"
"bitbucket.org/TheToyz/nowdead/database"
)
type DiscordClient struct {
client *discordgo.Session
started time.Time
userID string
mentionString string
}
func New(token string) (*DiscordClient, error) {
client, err := discordgo.New("Bot " + strings.TrimSpace(token))
if err != nil {
return nil, err
}
dc := &DiscordClient{
client: client,
started: time.Now().UTC(),
}
client.AddHandler(dc.messageHandler)
client.AddHandler(dc.presenceHandler)
return dc, nil
}
func (c *DiscordClient) Start(errChan chan error) {
err := c.client.Open()
if err != nil {
errChan <- err
return
}
c.userID = c.client.State.Ready.User.ID
c.mentionString = "<@" + c.userID + "> "
c.client.UpdateStatus(0, "Use - @"+c.client.State.Ready.User.Username+" help")
}
func (c *DiscordClient) Shutdown() error {
return c.client.Close()
}
func (c *DiscordClient) send(guildID, message string) error {
guild, err := database.LoadGuild(guildID)
if err != nil {
return err
}
return c.sendChannel(guild.Channel, message)
}
func (c *DiscordClient) sendChannel(channelID, message string) error {
// ignore the message that we sent
_, err := c.client.ChannelMessageSend(channelID, message)
return err
}
func (c *DiscordClient) getPresence(guildId, userId string) *discordgo.Presence {
p, err := c.client.State.Presence(guildId, userId)
if err != nil {
log.Warnf("failed to get discord presence for %d: %v", userId, err)
return nil
}
return p
}