A pure python IRCX (https://www.ietf.org/archive/id/draft-pfenning-irc-extensions-04.txt) server originally written with Python 2.3 and ported to 3.11.4 many years later.
Clients that do not send IRCX will be treated as IRCII compatibility.
Standard user modes for IRCX should be supported however additional modes are also supported.
abAfghiInoOpPrwzX
h - "Host" - Used to host/owner yourself in a room (MODE YourName +h Password)
i - "Invisible" - Your info cannot be seen unless a user is in the same room as you are.
x - "IsIRCX" - Your connection is using IRCX mode. /IRCX to see Owner +q and /prop
(Further modes to be documented)
mode <my nickname> +i - Sets your user to invisible
/mode <my nickname> +h
- If the matches a channel's it will give you operator access.`
Standard channel modes for IRCX should be supported however additional modes are also supported.
You can set up to 20 modes, eg: /mode #channel +ooooooooooo-vvvvvvvv name1 name2 name3...
a - "Authenticated Only" - Only authenticated clients may join.
A - "Admin Only" - Only Admins (non-sysop and guides) may enter the channel
b - "Ban" - Can be used to get a list of ban (ACCESS DENY) entries.
c - "No colors" - Colors are disallowed and message blocked.
C - "Strip Colors" - Colors, bold, etc are removed from messages
d - "Cloneable" - When the room fills up, a new room will be created with the same name, plus a number between 1 and 99. Cannot be set by normal users. #x becomes #x1 #x2 etc.
e - "Clone" - This room is a clone of a room that is set to mode +d. Cannot be set by normal users. #x1 gets mode +e to tell clients it's not the original channel.
f - "Filter" - IRCX's built-in profanity filter is being used. Can only be set during room creation.
G - "Gag on ban" - Banned users can't talk
h - "Hidden" - Room is not shown on any sort of room listings. Same as +s, can't be used with +p or +s.
i - "Invite" - Room is set as invite only.
k - "Key" - Room has an entry password set. Same as PROP MEMBERKEY. /join #channel key
l - "Limit" - Room has a user limit set. Anything above 100 users must be set during room creation and may not actually be enforced.
m - "Moderated" - Users in the room can be "specced", or set mode -v, and they cannot speak.
M - "Owner only mode changes" - Only owners can /mode"
n - "No External Messages" - Only people that are actually in the room, can speak in the room. If this mode is not set, you can talk in the room without actually being there.
N - "Service Channel" - Services channel, only operators and services may utilize.
p - "Private" - Room is not shown on the room listings, and you can only find out the amount of people in the room and the name. Cannot be used with +h or +s. Only shows #name in /list and /listx
P - "Owner ACL Only" - Only chan owners can set /access"
Q - "Owner Kick" - Only owners can /kick.
r - "Registered" - Official registered room, doesn't delete if empty.
R - "Registered Only" - Only registered users may join.
s - "Secret" - Room is not shown on any sort of room listings. Same as +h, cannot be used with +h or +p.
S - "No Mode Changes" - Modes are locked upon channel creation.
t - "Only Hosts Set Topic" - Only a host, owner, or MSN official can change the room topic. If -t, any user can change the topic.
T - "Owner /Topic Only" - Only owners can change the channel topic.
u - "Knock" - When someone can't get into the room for whatever reason, all hosts recieve a message stating so.
w - "No Whispers" - Normal users cannot whisper non-hosts.
W - "No Guest Whispers" - (Non-registered) Guests cannot whisper non-hosts. Note that this is an UPPERCASE W.
x - "Auditorium Mode" - Normal users cannot see each other in the room and can only see hosts, while hosts can see everyone. Cannot be set by normal users.
Z - "NO IRCX" - Only clients that utilize regular IRC can join
v - "Voice" - User can speak in a moderated (+m) room.
o - "Host" - User is a host in the channel.
q - "Owner" - User is an owner in the channel.
Prop supports channel properties of:
CLIENT
HOSTKEY
LAG
LANGUAGE
MEMBERKEY
ONJOIN
ONPART
OWNERKEY
RESET
SUBJECT
TOPIC
/prop #channel HOSTKEY <key>
/mode me +h somekey and the server will mode +o the user
/prop #channel OWNERKEY <key>
Access supports add, deny, list and clear at channel, user and server levels:
VOICE
GRANT
HOST
OWNER
Additional REGISTER access is provided with a founder mode which diverts from the IRCX rfc but provides a mechanism for a registered channel to be assigned to a registered nickname.
This server supports nickserv and has the following behaviour
REGISTER
IDENTIFY
GHOST
INFO
DROP
GROUP/UNGROUP
SET
DEFCON
IPLOCK
Note that ChanServ is not supported and should not be required given ACCESS and PROP.
/whisper channel nickname :message
Whispers are channel specific and offer a different set of options. It's still a private message, but dictated by the channel hosts/operators. Some IRCds have no private message umodes unless you're in common channels, same idea, different concept.
Run the main file to start the server
python start.py
(python3 start.py) on systems with multiple python versions
python -m unittest
None yet.
Please feel free to make a pull request and please forgive the horrors that you find in the code as they were written by a much younger, but arguably smarter, me.
There is currently no contributors guide as the code needs a considerable amount of work to ensure quality and stability.
Apache 2.0
IRC7 - An MSN chat re-write with modern technology and backwards compatibility
https://wiki.msnld.com/wiki/Main_Page
With thanks to Darren Davies, Rob Lancaster, Kevin Deveau, Aaron Caffrey, Shane Britt
In loving memory of Danny Moon and Ricky Laurn
Be kind to one another, love like it's your last day on this amazing planet.