BungeeRelay 0.1

Link BungeeCord to an InspIRCd instance for native, seamless IRC integration

  1. Dead-i
    BungeeRelay is a proxy plugin for BungeeCord that aims to take IRC to a whole new level, by providing seamless integration with your IRC network. The majority of pre-existing solutions consist of a single bot connecting to a network and relaying any chat information. This plugin takes this a step further by utilising InspIRCd's powerful linking protocol, meaning that each player appears as a separate user from IRC. This opens up many possibilities, as you can interact with players as normal IRC users, rather than doing it through bot commands. It also means that your IRC channel user list will be populated with your players, rather than a single relay bot.

    The idea:
    Minecraft IRC bots are commonly seen for the Bukkit API and, though more rarely seen, for BungeeCord. However, the concept that the plugin should interact with the IRCd in a way that allows each player to appear as their own user is almost never seen. While there are many plugins on the Bukkit Dev website designed as an IRC bot, I could only find 1 plugin that actually links to an IRCd in this way. As for BungeeCord, I couldn't find a plugin that provides this. In the case of a BungeeCord network, installing this Bukkit plugin on every single server attached to a BungeeCord server would be very time consuming, and, in the end, probably would not work, due to how they would conflict in the network. However, BungeeCord has a direct line between the user and the server, so surely BungeeCord would be a perfect match for this kind of setup? Only 1 installation, only 1 server link, it makes sense. This is what this plugin aims to do.

    How it works:
    The plugin makes use of the m_spanningtree module that comes with every InspIRCd installation. Basically, it's the module for linking servers. From InspIRCd's perspective, the BungeeCord connection just looks like another InspIRCd server making connection. The two servers work in unison. No cloning of bots, that's just annoying.

    Features:

    • Each player on the network appears as their own user.
    • Realistic IRC user lists that display in-game players.
    • Players who are kicked through IRC can also be kicked in-game.
    • Individual players can gain and set modes.
    • Clean-looking messages.
    • Fully customisable formats for in-game messages, disconnects, etc.
    • Optionally creates a staff channel and automatically sets certain modes to it.
    • Each server can have its own channel, or they can all be grouped into a single channel and have cross-server chat.
    • Support for /me.
    • Private messaging support.
    Commands and Permissions:
    I have tried to make the commands as different to the standard Bukkit ones as possible so this does not interfere with Bukkit plugins.

    • /pm <recipient> <message ...> - irc.pm
    • /pmreply <message ...> - irc.pm (alias /pmr)
    • /kick <user> <mesage ...> - irc.kick
    • /mode <channel> <mode ...> - irc.mode
    • /say <message ...> - irc.say (for broadcasting on both IRC & in-game)
    If a user has one of the permissions listed below, they will be granted it upon joining:
    • irc.owner
    • irc.protect
    • irc.op
    • irc.halfop
    • irc.voice
    Now that I've finished rambling, here's how you can install the plugin. :)

    Requirements:

    • An InspIRCd instance with m_spanningtree enabled in modules.conf. Any other IRCd will NOT work, and a working InspIRCd setup, separate to BungeeCord, is required for this plugin to work. You must have access to the InspIRCd configuration files. In other words, it has to be your IRCd.
    • BungeeYAML, a plugin that needs to be placed in BungeeCord's plugin folder alongside this one. This is needed for the configuration setup to work properly, since, as far as I am aware, BungeeCord does not have a configuration API as of yet.
    • A BungeeCord setup with at least one server.
    Installation:
    It might sound a bit complicated to link a BungeeCord plugin to an InspIRCd server, but I've tried to make it as easy as possible. It isn't that bad, honest!

    • Download both this plugin and BungeeYAML and place the two jars into BungeeCord's plugin folder (not Bukkit's!)
    • Enable m_spanningtree in your InspIRCd's modules.conf. If you have the example configuration loaded, you can just uncomment out the <module> line (probably at the very bottom of modules.conf).
    • Open your InspIRCd links.conf and insert a new link block for the plugin. There's an example link block further down this post.
    • Rehash InspIRCd (or start it, if you didn't already have it running).
    • Start BungeeCord, and stop it again once it has loaded up. This is just so that it generates the config.yml file for us. Don't be surprised if you see a few messages about failed connection attempts first; that's just because we haven't edited the config yet.
    • Open up the config.yml in the newly created "BungeeRelay" folder in "plugins". You can then follow the configuration from there; I have placed lots of nice comments in the file to explain what each value means. You mainly need to pay attention to the values under "server".
    If you have any trouble, please try turn "debug" in config.yml to true. If that doesn't show any clear error, please send me a message on irc.spi.gt IRC or post in the discussion thread. :)

    Please remember that I personally recommend you leave "channel" in the config.yml blank. If you leave it blank, each server will have its own corresponding channel (e.g. #lobby, #survival, etc). If you put in a value, however, you can have all servers feed into a single channel and have multi-server chat built in. It's your choice :)

    Example link block for links.conf
    Code (Text):
    <link
    name="bungee.dead-i.github.com"
    ipaddr="127.0.0.1"
    port="7000"
    allowmask="127.0.0.1"
    timeout="300"
    bind="0.0.0.0"
    statshidden="no"
    hidden="no"
    sendpass="pass"
    recvpass="pass">
    Todo:

    • More commands to be added.
    • Categories of servers, since lots of servers have multiple servers for one game. For example, if a server had 10 survival servers, survival1, survival2, survival3, etc, I plan to add the ability to group just these survival servers into a single channel (e.g. #survival)
    • Base certain permissions on the user's current channel modes.
    • Some form of integration between BungeeCord and Bukkit.
    Known bugs and other notes:
    • The "bans" system that reads bans from IRC is currently very buggy. This won't affect anything if you leave "bans" in config.yml to false. This will be fixed soon.
    • No cluster support (multiple BungeeCord instances linked together). I haven't built this plugin with cluster support in mind, and the plugin will not currently work in a cluster setup. This may change in the future, though the majority of BungeeCord setups aren't in a cluster, so this won't really affect general users and smaller/medium-sized networks.
    Source code is on GitHub

Recent Reviews

  1. Aiyion.Prime
    Aiyion.Prime
    5/5,
    Version: 0.1
    This is exactly what i was looking for!
    I'll alter the amount of stars if its not :P