Skip to content

metabrainz/brainzbot-bot

 
 

Build Status

The bot used in botbot.me is a Go (1.2+) program. To install:

go get github.com/BotBotMe/botbot-bot

External resources:

  • A Postgres database with the schema as defined in schema.sql.
  • A Redis database used as a message bus between the plugins and the bot.

Before loading the sample data from botbot_sample.dump you will need to update the script with the irc nick and password. Installing the database schema and loading sample data:

psql -U botbot -h localhost -W botbot -f schema.sql
psql -U botbot -h localhost -W botbot -f botbot_sample.dump

Configuration is handled via environment variables:

STORAGE_URL=postgres://user:password@host:port/db_name \
QUEUE_URL=redis://host:port/db_number botbot-bot

Architecture

Execution starts in main.go, in function main. That starts the chatbots (via NetworkManager), the goroutine which listens for commands from Redis, and the mainLoop goroutine, then waits for a Ctrl-C or kill to quit.

The core of the bot is in mainLoop (main.go). That listens to two Go channels, fromServer and fromBus. fromServer receives everything coming in from IRC. fromBus receives commands from the plugins, sent via a Redis list.

A typical incoming request to a plugin would take this path:

IRC -> TCP socket -> ChatBot.listen (irc.go) -> fromServer channel -> mainLoop (main.go) -> Dispatcher (dispatch.go) -> redis PUBLISH -> plugin

A reply from the plugin takes this path:

plugin -> redis LPUSH -> listenCmd (main.go) -> fromBus channel -> mainLoop (main.go) -> NetworkManager.Send (network.go) -> ChatBot.Send (irc.go) -> TCP socket -> IRC

And now, in ASCII art:

plugins <--> REDIS -BLPOP-> listenCmd (main.go) --> fromBus --> mainLoop (main.go) <-- fromServer <-- n ChatBots (irc.go) <--> IRC
               ^                                                  | |                                      ^
               | PUBLISH                                          | |                                      |
                ------------ Dispatcher (dispatch.go) <----------   ----> NetworkManager (network.go) ----

Releases

No releases published

Packages

 
 
 

Languages

  • Go 90.6%
  • TSQL 9.2%
  • Dockerfile 0.2%