summaryrefslogtreecommitdiffstats
path: root/matterbridge.go
diff options
context:
space:
mode:
authorFredrik de Vibe <fdv@ifi.uio.no>2016-03-18 15:12:58 -0400
committerFredrik de Vibe <fdv@ifi.uio.no>2016-03-18 15:19:13 -0400
commite0379ca5af0658f59dbee78b730ebd87c279886d (patch)
tree0c20aadccfd23d8bc6b6ffe5b10df1ddd7396075 /matterbridge.go
parent4759ee6132e1a8ec1274870b5cf20ae36d02996c (diff)
downloadmatterbridge-msglm-e0379ca5af0658f59dbee78b730ebd87c279886d.tar.gz
matterbridge-msglm-e0379ca5af0658f59dbee78b730ebd87c279886d.tar.bz2
matterbridge-msglm-e0379ca5af0658f59dbee78b730ebd87c279886d.zip
Enable !users command and add a table formatter
* Listen to wildcarded events, currently handle RPL_NAMREPLY. * Add a formatter to present nick lists from IRC as a table.
Diffstat (limited to 'matterbridge.go')
-rw-r--r--matterbridge.go49
1 files changed, 47 insertions, 2 deletions
diff --git a/matterbridge.go b/matterbridge.go
index 4302cf17..d2b996a4 100644
--- a/matterbridge.go
+++ b/matterbridge.go
@@ -58,7 +58,7 @@ func (b *Bridge) createIRC(name string) *irc.Connection {
i.AddCallback("JOIN", b.handleJoinPart)
i.AddCallback("PART", b.handleJoinPart)
}
- //i.AddCallback("353", b.handleOther)
+ i.AddCallback("*", b.handleOther)
return i
}
@@ -76,11 +76,54 @@ func (b *Bridge) handleJoinPart(event *irc.Event) {
//b.SendType(b.Config.IRC.Nick, "irc-"+event.Nick+" "+strings.ToLower(event.Code)+"s "+event.Message(), b.getMMChannel(event.Arguments[0]), "join_leave")
}
+func tableformatter (nicks_s string, nicksPerRow int) string {
+ nicks := strings.Split(nicks_s, " ")
+ result := "|IRC users"
+ if nicksPerRow < 1 {
+ nicksPerRow = 4
+ }
+ for i := 0; i < 2; i++ {
+ for j := 1; j <= nicksPerRow; j++ {
+ if i == 0 {
+ result += "|"
+ } else {
+ result += ":-|"
+ }
+ }
+ result += "\r\n|"
+ }
+ result += nicks[0] + "|"
+ for i := 1; i < len(nicks); i++ {
+ if i % nicksPerRow == 0 {
+ result += "\r\n|" + nicks[i] + "|"
+ } else {
+ result += nicks[i] + "|"
+ }
+ }
+ return result
+}
+
+func plainformatter (nicks string, nicksPerRow int) string {
+ return nicks + " currently on IRC"
+}
+
+func (b *Bridge) formatnicks (nicks string) string {
+ switch (b.Config.IRC.NickFormatter) {
+ case "table":
+ return tableformatter(nicks, b.Config.IRC.NicksPerRow)
+ default:
+ return plainformatter(nicks, b.Config.IRC.NicksPerRow)
+ }
+}
+
func (b *Bridge) handleOther(event *irc.Event) {
switch event.Code {
case "353":
log.Println("handleOther", b.getMMChannel(event.Arguments[0]))
- b.Send(b.Config.IRC.Nick, event.Message()+" currently on IRC", b.getMMChannel(event.Arguments[0]))
+ b.Send(b.Config.IRC.Nick, b.formatnicks(event.Message()), b.getMMChannel(event.Arguments[0]))
+ break
+ default:
+ log.Printf("got unknown event: %+v\n", event);
}
}
@@ -119,9 +162,11 @@ func (b *Bridge) handleMatter() {
case "!users":
log.Println("received !users from", message.UserName)
b.i.SendRaw("NAMES " + b.getIRCChannel(message.Token))
+ return
case "!gif":
message.Text = b.giphyRandom(strings.Fields(strings.Replace(message.Text, "!gif ", "", 1)))
b.Send(b.Config.IRC.Nick, message.Text, b.getIRCChannel(message.Token))
+ return
}
texts := strings.Split(message.Text, "\n")
for _, text := range texts {