Contents

nozeio/swift-nio-irc-server

[SwiftNIO IRC](https://github.com/NozeIO/swift-nio-irc)

What it looks like

On the surface it is a very simple chat webapp, with basic support for channels and direct messages:

<img src="http://zeezide.de/img/irc-eliza.png" width="640" />

Sometimes a live demo installation is running on http://irc.noze.io/.

Apart from the web frontend, MiniIRCd also embeds an actual IRC server, that is, you can connect to the server using native clients like Mutter, Irssi or Textual.

<img src="http://zeezide.de/img/mutter-irc-setup.gif" />

Overview

The IRCServer module which is part of this package, only links against the NIOIRC protocol module of SwiftNIO IRC.

The included MiniIRCd tool on the other hand, also spins up the IRC/WebSocket gateway, includes the webapp and starts up the ElizaBot.

                             ┌──────────────────────────────────────────────────┐
 ┌───────────────────────┐       ┌──────────────┐
               HTML            ┌─────────────────┐    Eliza     
        ┌───────JS───────────┼─┼──│ NIO HTTP Server      Bot      
  └─────────────────┘       └──────────────┘

       Upgrades                      IRC       
┌──────────────┐      Connection       

  WebBrowser         ┌──────────────┐
  WebSocket    ┌─────────────────┐
  JavaScript  │◀────JSON────┼─┼─▶│  NIO WebSocket  │◀─┼─IRC──▶│  IRC Server  
    WebApp      └─────────────────┘
       WebServer              └──────────────┘
└──────────────┘ └───────────────────────┘

       All Services Run as Part of MiniIRCd       
                             └──────────────────────────────────────────────────┘

Running the Server

To get started, just checkout the repository and call swift run:

helge@ZeaPro swift-nio-irc-server (develop)*$ swift  run
Fetching https://github.com/apple/swift-nio.git
...
Compile Swift Module 'miniircd' (2 sources)
Linking ./.build/x86_64-apple-macosx10.10/debug/miniircd
 __  __ _       _ _____ _____   _____
 |  \/  (_)     (_)_   _|  __ \ / ____|   Swift IRCd
 | \  / |_ _ __  _  | | | |__) | |
 | |\/| | | '_ \| | | | |  _  /| |        Port: 6667
 | |  | | | | | | |_| |_| | \ \| |____    PID:  2343
 |_|  |_|_|_| |_|_|_____|_|  \_\\_____|

Ready to accept connections on: [IPv4]0.0.0.0:6667
IRCWebClientServer running on: [IPv4]0.0.0.0:1337
Eliza is ready and listening!

You can then connect via IRC on localhost:6667 or to the web frontend on http://localhost:1337/.

Importing the module using Swift Package Manager

An example Package.swift importing the necessary modules:

// swift-tools-version:5.0

import PackageDescription

let package = Package(
    name: "MyOwnIRCServer",
    dependencies: [
        .package(url: "https://github.com/NozeIO/swift-nio-irc-server.git",
                 from: "0.5.0")
    ],
    targets: [
        .target(name: "MyOwnIRCServer",
                dependencies: [ "IRCServer" ])
    ]
)

Who

Brought to you by ZeeZide. We like feedback, GitHub stars, cool contract work, presumably any form of praise you can think of.

NIOIRC is a SwiftNIO port of the Noze.io miniirc example from 2016.

Package Metadata

Repository: nozeio/swift-nio-irc-server

Default branch: master

README: README.md