From Wikitech
Jump to navigation Jump to search
Toolforge tools
Crystal Clear app package utilities.png
Description A bot for bridging IRC and other chat platform channels
Keywords irc, golang
Maintainer(s) BryanDavis (View all)
Source code
License Apache License 2.0
Issues Open tasks · Report a bug
Admin log Tools.bridgebot/SAL

Bridgebot is a deployment of the FLOSS matterbridge software. It can be used to relay messages between multiple different chat systems. The current deployment in Toolforge is bridging various Wikimedia related Freenode IRC channels with similarly themed Telegram chats and channels.

Bot accounts

The bot must be invited/added to chat channels in order to create bridges. Currently the bot has these accounts on various chat platforms:

Freenode IRC
  • account: wm-bridgebot
  • nicks: wm-bridgebot, wm-bb


The bot runs from Toolforge under the "bridgebot" account as a kubernetes pod.

kind: Deployment
apiVersion: apps/v1
  namespace: tool-bridgebot
    toolforge: tool
  replicas: 1
      toolforge: tool
        toolforge: tool
        - name: bot
            - "/data/project/bridgebot/matterbridge"
            - "-debug"
            - "-conf"
            - "/data/project/bridgebot/matterbridge.toml"
          workingDir: /data/project/bridgebot
            - name: HOME
              value: /data/project/bridgebot
          imagePullPolicy: Always
$ ssh
$ become bridgebot

:# Deploying
$ kubectl create --validate=true -f deployment.yaml

:# Quick restart (pod delete)
$ kubectl delete po/$(kubectl get pods | grep Running | awk '{print $1}')

:# "Full" restart (Deployment delete; Deployment create)
$ kubectl delete deploy/
$ kubectl create --validate=true -f deployment.yaml

:# Upgrading the golang binary
$ wget{$version}/matterbridge-{$version}-linux-64bit
$ chmod a+x matterbridge-{$version}-linux-64bit
$ rm matterbridge
$ ln -s matterbridge-{$version}-linux-64bit matterbridge
$ kubectl delete po/$(kubectl get pods | grep Running | awk '{print $1}')

Joining a new channel

Maintainers of the tool can configure the bot to join a new channel;

$ ssh
$ become bridgebot
$ vim matterbridge.toml
:# Add a new "[[gateway]]" section defining the gateway name and the channels to bridge
$ kubectl delete po/$(kubectl get pods | grep Running | awk '{print $1}')


If one side of the bridge is Telegram you will need these things to be done:

  1. Have an admin of the Telegram channel invite the "@wmtelegram_bot" user to the channel
  2. Follow the log output of the bot: `kubectl logs -f $(kubectl get pods | grep Running | awk '{print $1}')`
  3. Have someone in the Telegram channel talk to the bot
  4. Collect the Telegram "Channel" id number from the DEBUG log output
    [85656] DEBUG telegram:     <= Message is config.Message{Text:"@wmtelegram_bot I need you to see this message so I can finish", Channel:"-1001308089610", Username:"bd808", UserID:"419968011", Avatar:"", Account:"telegram.bridgebot", Event:"", Protocol:"", Gateway:"", ParentID:"", Timestamp:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, ID:"86", Extra:map[string][]interface {}{}}


If one side of the bridge is Discord you will need these things to be done:

  1. Have an admin of the Discord server invite the bot to their server using the bot's invite link


A tengo script is used to do per-channel customization of nick formats used when cross-posting messages between services.

Note: this script is read from disk each time the bot needs to send a message across a bridge, so edits should be made carefully. Any syntax errors in the script will stop messages from passing across all bridges until they are corrected.

 * The script will have the following global variables:
 * to modify: result
 * to read: channel, bridge, gateway, protocol, nick

ret := "[" + protocol + "] <" + nick + "> "

if gateway == "ukwiki-discord-telegram" {
  protos := immutable({
    discord: "дс",
    telegram: "тг"
  proto := protos[protocol]
  ret = "[" + (proto == undefined ? protocol : proto) + "] <" + nick + "> "

} else if gateway == "wikipedia-abstract-irc-telegram" {
  ret = "<" + nick + "> "


result = ret