Skip to content

zachbr/Dis4IRC

Repository files navigation

Dis4IRC

A modern Discord <-> IRC Bridge

Published under the MIT License.

Features

  • Markdown and Modern IRC Client Features
  • Paste support for long messages
  • Channel Join/Quit broadcasts
  • Discord webhook support
  • Non-prefixed messages for other IRC bots to handle
  • IRC anti-ping zero width character in usernames
  • User, channel, role, and emote mentions
  • Sticker and emote support (as images or animated viewer)
  • Reply bridging with context

Getting Started

Please see the Getting Started page.

Downloads

  • Release versions can be found on GitHub releases.
  • The latest build from source can be found as a GitHub actions artifact.
    • Users authenticated with GitHub can access builds here.
    • Unauthenticated users can access the latest version here.

Example Config

# Dis4IRC Configuration File

# A list of bridges that Dis4IRC should start up
# Each bridge can bridge multiple channels between a single IRC and Discord Server
bridges {
    # A bridge is a single bridged connection operating in its own space away from all the other bridges
    # Most people will only need this one default bridge
    default {
        # Relay joins, quits, parts, and kicks
        announce-joins-and-quits=false
        # Relay extra verbose information you don't really need like topics and mode changes.
        announce-extras=false
        # Mappings are the channel <-> channel bridging configurations
        channel-mappings {
            "712345611123456811"="#bridgedChannel"
        }
        # Your discord API key you registered your bot with
        discord-api-key="NTjhWZj1MTq0L10gMDU0MSQ1.Zpj02g.4QiWlNw9W5xd150qXsC3e-oc156"
        # Match a channel id to a webhook URL to enable webhooks for that channel
        discord-webhooks {
            "712345611123456811"="https://discordapp.com/api/webhooks/712345611123456811/blahblahurl"
        }
        # Discord-specific configuration options
        discord-options {
            # Descriptor text to show in the client. An empty string will show nothing. This may not update immediately.
            activity-desc=IRC
            # Activity type to report to Discord clients. Acceptable values are DEFAULT, LISTENING, STREAMING, WATCHING, COMPETING
            activity-type=DEFAULT
            # Additional URL field used by certain activity types. Restricted to certain URLs depending on the activity type.
            activity-url=""
            # Online status indicator. Acceptable values are ONLINE, IDLE, DO_NOT_DISTURB, INVISIBLE
            online-status=ONLINE
        }
        commands {
            pinned {
                enabled="true"
            }
            stats {
                enabled="true"
            }
        }
        # Configuration for connecting to the IRC server
        irc {
            anti-ping=true
            nickname=TestBridge2
            # Messages that match this regular expression will be passed to IRC without a user prefix
            no-prefix-regex="^\\.[A-Za-z0-9]"
            # Sets the max context length to use for messages that are Discord replies. 0 to disable.
            discord-reply-context-limit=90
            # A list of __raw__ irc messages to send
            init-commands-list=[
                "PRIVMSG NICKSERV info",
                "PRIVMSG NICKSERV help"
            ]
            port="6697"
            realname=BridgeBot
            send-discord-embeds=true
            server="irc.esper.net"
            # Controls whether bridged nicknames will use color
            use-nickname-colors=true
            use-ssl=true
            username=BridgeBot
        }
        mutators {
            paste-service {
                max-message-length=450
                max-new-lines=4
                # Number of days before paste expires. Use 0 to never expire.
                paste-expiration-in-days=7
            }
        }
    }
}
debug-logging=true

Obligatory

xkcd #1782

The Name

The name is a typo of a typo of a bad idea of a misspoken phrase. Let's just not go there :p

Built using