grim/wasdead

9c111fecaf67
Make the bot only look at messages that mention it
package discord
import (
"errors"
"strings"
"time"
"github.com/bwmarrin/discordgo"
log "github.com/sirupsen/logrus"
"bitbucket.org/TheToyz/nowdead/database"
)
type DiscordClient struct {
client *discordgo.Session
db database.Database
started time.Time
userID string
mentionString string
}
func New(token string, db database.Database) (*DiscordClient, error) {
client, err := discordgo.New("Bot " + strings.TrimSpace(token))
if err != nil {
return nil, err
}
dc := &DiscordClient{
client: client,
db: db,
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 + "> "
}
func (c *DiscordClient) Shutdown() error {
return c.client.Close()
}
func (c *DiscordClient) send(guild, message string) error {
channelID := c.db.GetChannel(guild)
if channelID == "" {
return errors.New("No channel set")
}
return c.sendChannel(channelID, 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
}