Skip to content

Instantly share code, notes, and snippets.

Daniel Oaks DanielOaks

Block or report user

Report or block DanielOaks

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
DanielOaks /
Last active Jul 4, 2019
Little IRC server fuzzer
#!/usr/bin/env python3
# IRC Server fuzzing, made easy!
import time
import socket
import select
import random
# settings
hostname = ''

Parsing And Sending STATUSMSG Messages

STATUSMSG is a type of IRC private message / notice where the target of the private message is the members of a channel with at least a certain level of channel responsibility.

In other words, instead of the target of the message just being #ircv3, it may be @#ircv3 and only be send to the ops of the channel, rather than all members of the channel.


The STATUSMSG RPL_ISUPPORT token is used to note that the server supports sending private messages and notices with these special 'statusmsg targets' (the channel name prefixed by a given privilege level character such as +, %, @ or similar).

View kiwibnc-config.ini
# level may be one of: trace, debug, info, notice, warn, error
bind = [

IRC Client Registration

 ->  means lines that the client sends to the server.
<-   means lines that the server sends to the client.

Normal Registration


IRC Roleplay Commands

Daniel Oaks


People like to use IRC to roleplay. In other words, to act out characters as part of a channel and between clients. Often, this means it's desirable to send messages with names other than the client's nickname, and to send messages not explicitly attached to a name at all.

View chathistory

<limit> is defined by the server/bouncer by default, but the client can optionally ask for a different limit.

CHATHISTORY #ircv3 BEFORE id=ytNBbt565yt4r3err3 [<limit>]
    - get up to <limit> number of messages before the given id/time
CHATHISTORY #ircv3 AFTER id=ytNBbt565yt4r3err3 [<limit>]
    - get up to <limit> number of messages after the given id/time
CHATHISTORY #ircv3 LATEST id=ytNBbt565yt4r3err3 [<limit>]
    - get the most recent (up to `<limit>`) messages that have been sent since the given id/time
    - if * is given instead of a specific ID, just the most recent messages with no limit
CHATHISTORY #ircv3 AROUND id=ytNBbt565yt4r3err3 [<limit>]
DanielOaks /
Last active Mar 8, 2019
proposed IRCv3 writing-a-spec document draft

How to write an IRCv3 Specification

This rough guide aims to take you through the process of writing an IRCv3 specification and getting it accepted! It doesn't lay out exactly what you must do for a document to get accepted, but should be a useful set of suggestions and considerations to keep in mind as you go through the process.

Why write a spec?

There are a few main reasons why you'd want to write up a spec for inclusion within the IRCv3 Working Group:

  • You'd like to change an aspect of the IRC protocol, and write down in very exact detail how that change works.
  • You have a cool, interesting, and/or useful feature in your software and think that other software should include it.

title: "ACC Multi-Factor Authentication" layout: spec copyrights:

name: "Daniel Oaks"
period: "2019"
email: ""
  • name: "Shivaram Lingamneni"
View slackircbot.go
package main
import (
DanielOaks / irc.regex
Last active Dec 1, 2018
IRC Message Splitting Regex
View irc.regex
Page explaining this regex:
Raw regex:
^(?:@([^\r\n ]*) +|())(?::([^\r\n ]+) +|())([^\r\n ]+)(?: +([^:\r\n ]+[^\r\n ]*(?: +[^:\r\n ]+[^\r\n ]*)*)|())?(?: +:([^\r\n]*)| +())?[\r\n]*$
Sample IRC messages:
foo bar baz asdf
You can’t perform that action at this time.