This is pretty neat. I've taken a similar approach in writing an irc bot using evented PHP and phergie-irc-client-react using redis to pass JSONed messages back and forth between services. It's surprising more IRC bots aren't taking advantage of message queue type architecture instead of monolithic plugin based bots.
This is a pretty interesting approach...I assume your idea is that people will use this as just a "means to an end" for connecting some sensor service to IRC for notification purposes, or to respond back to the user(s). However, I do have one question: Why is there data duplication? Like, why do you have both `fullmsg` and `full_message`? Same with the incoming payload, you mean to tell me that I have to have both `"fromchannel":true,` AND `"from_channel":true,` in there? That seems a little silly.
One more thing, I noticed the README says "I'm also planning a 2.0 branch which will use ZeroMQ instead of Redis."...did you ever try just using Go's channels to make this work? It's kind-of like a built-in ZMQ...
Thanks! The data duplication is due to my laziness. I've been running tenyks for about a year now and I have written a large number of services for it in python. They expect "full_message", but I wanted to make the API more go-like in the core, so I decided to go the fullMsg route. I should have been more pragmatic about it and just stuck with full_message. I may just rip out fullmsg and fromchannel.
ZeroMQ isn't for internal goroutine communication. It's to provide pub/sub for external services written in any number of languages.
In the Linux desktop world, Telepathy serves a similar role: it's a unified daemon that handles all account connectivity (XMPP, Irc, Sip, Jingle, Aim, MSN, &c), and other programs talk to Telepathy instead of making their own connections. Telepathy and Tenyks are both communications services.
D-Bus is used to talk to Telepathy, which fills the role ZeroMQ plays in Tenyks.
https://github.com/iibot-irc/core
Based on ii (a file-system-based IRC client from suckless) with cron for regular tasks, inotify for responding to things etc.
(Not actually intended for other people to use, although its been abstracted enough that at least one other person has.)