fork of qaisjp/go-discord-irc https://github.com/qaisjp/go-discord-irc
Go to file
kayos@tcp.direct c5bd31fe89 making PMs a little nicer 2021-01-15 05:41:52 -08:00
bridge making PMs a little nicer 2021-01-15 05:41:52 -08:00
irc ircf: rename color and highlight to fg/bg 2020-06-13 19:13:25 +01:00
transmitter Pick up based on ApplicationID 2020-11-22 19:00:19 +00:00
.gitignore Add private to gitignore 2018-12-16 21:36:55 +00:00
.travis.yml Update .travis.yml 2018-07-17 16:32:57 +01:00
Dockerfile Added a Dockerfile 2019-09-17 11:38:57 +02:00
LICENSE.md add license 2017-05-26 21:21:28 +01:00
Makefile Make Getting started easier (#60) 2020-11-11 00:16:51 +00:00
README.md addendum to change show_joinquit defaults 2020-11-22 18:55:21 +00:00
config.yml addendum to change show_joinquit defaults 2020-11-22 18:55:21 +00:00
go.mod Update to bleeding edge discordgo 2020-11-22 18:14:02 +00:00
go.sum Update to bleeding edge discordgo 2020-11-22 18:14:02 +00:00
main.go make show_joinquit default false 2020-11-22 18:52:32 +00:00

go-discord-irc

Go Report Card GoDoc

Preview

Is this being maintained? Yes. But I want to merge all this functionality into the much superior matterbridge by 42wim.

This is IRC to Discord bridge was originally built for @compsoc-edinburgh and ImaginaryNet, but now it looks like more people are using it!

  • The IRC -> Discord side of things work as you would expect it to: messages on IRC send to Discord as the bot user, as per usual.
  • The Discord -> IRC side of things is a little different. On connect, this bot will join the server with the ~d, and spawn additional connections for each online person in the Discord.
  • Supports bidirectional PMs. (Not user friendly, but it works.)

Features

(not a full list)

  • When a Discord user's presence is "offline" or "idle", their irc puppet will have their AWAY status set.
  • A Discord user offline for will disconnect from IRC after 24 hours (or whatever cooldown_duration you set).
  • Join/Quit/Part/Kick messages are sent to Discord (configurable)

Gotchas

Things to keep in mind in terms of functionality:

  • This does not work with private Discord channels properly (all discord users are added to the channel)
  • DO NOT USE THE SAME DISCORD BOT (API KEY) ACROSS MULTIPLE GUILDS (SERVERS).

It's built with configuration in mind, but may need a little bit of tweaking for it to work for you:

  • Hardcoded: Hostnames are hardcoded to follow the IPv6 IPs listed here.
  • Defaults aren't usable: You should set the suffix and separator config options. The default options require custom modifications to the IRC server.
  • Server config: This uses WEBIRC to give Discord users on IRC a distinct hostname. See here.

Configuration

The binary takes three flags:

  • --config filename.yaml: to pass along a configuration file containing things like passwords and channel options
  • --simple: to only spawn one connection (the listener will send across messages from Discord) instead of a connection per online Discord user
  • --debug: provide this flag to print extra debug info. Setting this flag to false (or not providing this flag) will take the value from the config file instead
  • --insecure: used to skip TLS verification (false = use value from settings)
  • --no-tls: turns off TLS

The config file is a yaml formatted file with the following fields:

name requires restart default optional description
discord_token Yes No The bot user token
irc_server Yes No IRC server address
channel_mappings No No a dict with irc channel as key (prefixed with #) and Discord channel ID as value
guild_id No No the Discord guild (server) id
irc_pass Yes Yes password for connecting to the IRC server
suffix No ~d Yes appended to each Discord user's nickname when they are connected to IRC. If set to _d2, if the name will be bob_d2
separator No _ Yes used in fallback situations. If set to -, the fallback name will be like bob-7247_d2 (where 7247 is the discord user's discriminator, and _d2 is the suffix)
irc_listener_name Yes ~d The name of the irc listener
puppet_username No username of discord account being puppeted Yes username to connect to irc with
webirc_pass No Yes optional, but recommended for regular (non-simple) usage. this must be obtained by the IRC sysops
debug Yes false Yes debug mode
insecure, Yes false Yes TLS will skip verification (but still uses TLS)
no_tls, Yes false Yes turns off TLS
webhook_prefix, Yes No a prefix for webhooks, so we know which ones to keep and which ones to delete
nickserv_identify No Yes on connect this message will be sent: PRIVMSG nickserv IDENTIFY <value>, you can provide both a username and password if your ircd supports it
cooldown_duration No 86400 (24 hours) Yes time in seconds for a discord user to be offline before it's puppet disconnects from irc
show_joinquit No false yes displays JOIN, PART, QUIT, KICK on discord
max_nick_length No 30 yes Maximum allowed nick length

The filename.yaml file is continuously read from and many changes will automatically update on the bridge. This means you can add or remove channels without restarting the bot.

An example configuration file can be seen in config.yml. Those marked as requires restart definitely require restart, but others may not currently be configured to automatically update.

This bot needs permissions to manage webhooks as it creates webhooks on the go.

https://discordapp.com/oauth2/authorize?&client_id=<YOUR_CLIENT_ID_HERE>&scope=bot&permissions=0x20000000

NEW IN 2020

Make sure you also give the bot application these intents too:

Docker

First edit config.yml file to your needs. Then launch docker build -t go-discord-irc . in the repository root folder. And then docker run -d go-discord-irc to run the bot in background.

Development

A Makefile is provided to make getting started easier.

To build a binary run make build this will produce a binary of go-discord-irc in the root dir.

To build and run the binary run make run, this will use the config.yaml and start in debug.

To Execute tests run make test

Dependencies will be updated and installed with all the above commands or by running make dev