12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package dispatcher
-
- import (
- "github.com/juju/loggo"
- "github.com/spf13/viper"
- "github.com/thoj/go-ircevent"
- "strings"
- )
-
- // Take a string, parse out the recipients, and send to IRC.
- //
- // eg:
- // hello world [goes to default channel]
- // #test hello world [goes to #test, if joined]
- // #test,@alice hello world [goes to #test and alice]
- // #* hello world [goes to all channels bot is in]
- func Send(irc *irc.Connection, msg string, log loggo.Logger, origin string) {
- channels := viper.GetStringSlice("irc.channels")
-
- if msg[0] == '#' || msg[0] == '@' {
- parts := strings.SplitN(msg, " ", 2)
- if parts[0] == "#*" {
- for _, channel := range channels {
- irc.Privmsg(channel, replaceFormatting(parts[1]))
- }
- } else {
- targets := strings.Split(parts[0], ",")
- for _, target := range targets {
- if target[0] == '@' {
- target = target[1:]
- }
- irc.Privmsg(target, replaceFormatting(parts[1]))
- }
- }
- log.Infof("from[%s] send[%s] %s", origin, parts[0], parts[1])
- } else if len(msg) > 7 && msg[0:6] == "%TOPIC" {
- parts := strings.SplitN(msg, " ", 3)
- irc.SendRawf("TOPIC %s :%s", parts[1], replaceFormatting(parts[2]))
- log.Infof("from[%s] topic[%s] %s", origin, parts[1], parts[2])
- } else {
- if len(channels) > 0 {
- irc.Privmsg(channels[0], replaceFormatting(msg))
- log.Infof("from[%s] send_default[%s] %s", origin, channels[0], msg)
- }
- }
- }
|