diff --git a/bot/handlers.go b/bot/handlers.go index 84515a6..fc75ac8 100644 --- a/bot/handlers.go +++ b/bot/handlers.go @@ -81,8 +81,9 @@ func (b *Bot) checkHelp(channel string, parts []string) { // Checks if message is a command and returns its curtailed version func (b *Bot) isCmd(message string) (bool, string) { cmdc := b.Config.CommandChar - botnick := b.Conn.Me.Nick + botnick := strings.ToLower(b.Conn.Me.Nick) iscmd := false + message = strings.ToLower(message) if strings.HasPrefix(message, cmdc) && len(cmdc) > 0 { iscmd = true diff --git a/config.json b/config.json index fe68e80..b79cd38 100644 --- a/config.json +++ b/config.json @@ -6,7 +6,7 @@ "Plugins": [], "Server": "127.0.0.1:6666", "Nick": "alepaletest", - "Pass": "alepaletest:test", + "Pass": "AlePaleTest:test", "CommandChar": "!", "QuoteChance": 0.99, "QuoteTime": 1, @@ -16,8 +16,6 @@ "UntappdToken": "", "UntappdFreq": 3600, - "comment": "Follows is the old bot", - "WelcomeMsgs": [ "Real men use screen, %s.", "Joins upset the hivemind's OCD, %s.", @@ -25,6 +23,8 @@ "%s, I WILL CUT YOU!" ], + "comment": "Follows is the old bot", + "bot": { "dbname": "deepintir", "inchan": "out", diff --git a/main.go b/main.go index a69d77c..f21b85b 100644 --- a/main.go +++ b/main.go @@ -45,6 +45,7 @@ func main() { // b.AddHandler(plugins.NewTestPlugin(b)) b.AddHandler("admin", plugins.NewAdminPlugin(b)) b.AddHandler("talker", plugins.NewTalkerPlugin(b)) + b.AddHandler("dice", plugins.NewDicePlugin(b)) b.AddHandler("beers", plugins.NewBeersPlugin(b)) b.AddHandler("remember", plugins.NewRememberPlugin(b)) b.AddHandler("skeleton", plugins.NewSkeletonPlugin(b)) diff --git a/plugins/dice.go b/plugins/dice.go new file mode 100644 index 0000000..3d8f569 --- /dev/null +++ b/plugins/dice.go @@ -0,0 +1,87 @@ +package plugins + +import "bitbucket.org/phlyingpenguin/godeepintir/bot" + +import ( + "fmt" + "log" + "math/rand" + "strconv" + "strings" + "time" +) + +// This is a dice plugin to serve as an example and quick copy/paste for new plugins. + +type DicePlugin struct { + Bot *bot.Bot +} + +// NewDicePlugin creates a new DicePlugin with the Plugin interface +func NewDicePlugin(bot *bot.Bot) *DicePlugin { + return &DicePlugin{ + Bot: bot, + } +} + +func rollDie(sides int) int { + return rand.Intn(sides) + 1 +} + +// Message responds to the bot hook on recieving messages. +// This function returns true if the plugin responds in a meaningful way to the users message. +// Otherwise, the function returns false and the bot continues execution of other plugins. +func (p *DicePlugin) Message(message bot.Message) bool { + channel := message.Channel + parts := strings.Fields(message.Body) + + log.Println(len(parts), parts, message.Command) + if (len(parts) == 2 || len(parts) == 1) && message.Command { + var dice []string + if len(parts) == 1 { + dice = strings.Split(parts[0], "d") + fmt.Println() + } else { + dice = strings.Split(parts[1], "d") + } + + log.Println(dice) + + if len(dice) == 2 { + // We actually have a die roll. + nDice, _ := strconv.Atoi(dice[0]) + sides, _ := strconv.Atoi(dice[1]) + rolls := "You rolled: " + + for i := 0; i < nDice; i++ { + rolls = fmt.Sprintf("%s %d", rolls, rollDie(sides)) + if i != nDice-1 { + rolls = fmt.Sprintf("%s,", rolls) + } else { + rolls = fmt.Sprintf("%s.", rolls) + } + } + + p.Bot.SendMessage(channel, rolls) + return true + } + } + return false +} + +// LoadData imports any configuration data into the plugin. This is not strictly necessary other +// than the fact that the Plugin interface demands it exist. This may be deprecated at a later +// date. +func (p *DicePlugin) LoadData() { + rand.Seed(time.Now().Unix()) +} + +// Help responds to help requests. Every plugin must implement a help function. +func (p *DicePlugin) Help(channel string, parts []string) { + p.Bot.SendMessage(channel, "Roll dice using notation XdY. Try \"3d20\".") +} + +// Empty event handler because this plugin does not do anything on event recv +func (p *DicePlugin) Event(kind string, message bot.Message) bool { + return false +}