Srain Documentation Release 1.0.0rc2

Shengyu Zhang

Mar 12, 2019

All pages:

1 Quick Start 3 1.1 Start Srain...... 3 1.2 Connect to IRC server...... 5 1.3 Join Channel...... 6

2 Installation 11 2.1 Dependencies...... 12 2.2 Building...... 12 2.3 Distribution Packages...... 13

3 Commands Manual 15 3.1 Playground...... 16 3.2 Syntax...... 16 3.3 Usage...... 16

4 Configuration Manual 23 4.1 Configuration File...... 23 4.2 Syntax...... 23 4.3 Priority and Fallback...... 24 4.4 All Configurable Items...... 25

5 Development Specification 29 5.1 Codeing Style...... 29

6 Miscellaneous 31 6.1 Hot Keys...... 31 6.2 Chat Logs...... 31

7 Frequently Asked Questions 33 7.1 Does Srain support Windows?...... 33 7.2 Why does the image upload not work?...... 33 7.3 Why can’t I see people’s avatar?...... 33 7.4 What is “relay message transform”?...... 34 7.5 Where are the log files?...... 34

8 Change Log 35 8.1 2018-02-28 Version 0.06.4...... 35

i 8.2 2017-12-22 Version 0.06.3...... 36 8.3 2017-09-12 Version 0.06.2...... 37 8.4 2017-08-18 Version 0.06.1...... 37 8.5 2017-07-29 Version 0.06...... 37 8.6 2016-09-19 Version 0.05.1...... 38 8.7 2016-08-27 Version 0.05...... 38 8.8 2016-04-30 Version 0.03...... 39 8.9 2016-04-13 Version 0.02...... 39 8.10 2016-04-07 Version 0.01...... 40

9 Support Tables 41 9.1 Basic IRC Client Support...... 41 9.2 Client-to-Client Protocol (CTCP) Support...... 42 9.3 IRCv3 Client Support...... 42

10 External Resources 43

11 Indices and Tables 45

ii Srain Documentation, Release 1.0.0rc2

Welcome to Srain documentation! The source code of this documentation is hosted on GitHub. If you found any mistake, feel free to file issue or pull request.

Note: As Srain is constantly improving, the latest version is always recommended. Currently we aren’t doing bug fix for the non-least version.

All pages: 1 Srain Documentation, Release 1.0.0rc2

2 All pages: CHAPTER 1

Quick Start

• Start Srain • Connect to IRC server – Predefined Server – Custom Server – Using Command • Join Channel – Directly Join – Search Channel – Using Command

Note: If you are using version 0.06.2 and earlier, please refer to: http://doc.srain.im/en/0.06.2/start.html . Although using earlier version is not recommended.

1.1 Start Srain

After the Installation of Srain, you will find Srain in your applications list, if not, just type srain in your shell to run it. Then you will see Srain’s initial interface. Here is the layout of Srain being used:

3 Srain Documentation, Release 1.0.0rc2

4 Chapter 1. Quick Start Srain Documentation, Release 1.0.0rc2

1.2 Connect to IRC server freenode is a famous IRC network, the official channel of Srain #srain is also hosted on it. Let’s start by connecting to freenode.

1.2.1 Predefined Server

Since version 0.06.3, Srain has a predefined list of commonly used IRC servers, freenode is one of it. If you want to add server into this list, refer to Configuration Manual. Click the connection button on the Srain header bar, select the page “Predefined Server”, select the item “freenode” from candidate box with “Server”, enter your nickname, then click the “Connect” button:

If everything goes well, Srain should connected to freenode, then your would see some message from freenode’s server:

1.2.2 Custom Server

While the server your want to connect to is not listed in the predefined list, switch to the page “Custom Server”, enter the host name, port, and etc.

Note: • If the port is a TLS port, make sure that the option “Use secure connection” is checked. • If the server’s certificate is untrusted and you insist on continuing, check the option “Do not verify certificate”.

1.2. Connect to IRC server 5 Srain Documentation, Release 1.0.0rc2

Then click the “Connect” button:

1.2.3 Using Command

Refer to /server and /connect. If you want to automatically execute commands at each time Srain starts, please refer to Playground.

1.3 Join Channel

After connecting to freenode, now let’s try to join #srain, the official channel of Srain.

1.3.1 Directly Join

While your has a clear channel to join, such as #srain, just click the join button, select the page “Join Channel”, enter the channel name in the input entry with label “Channel”, then click the “Join” button: Now you should joined the channel:

6 Chapter 1. Quick Start Srain Documentation, Release 1.0.0rc2

1.3. Join Channel 7 Srain Documentation, Release 1.0.0rc2

1.3.2 Search Channel

While you don’t know the exact name of the channel, click the join button, switch to page “Search Channel”, click the button with a “refresh” , Srain should start receiving channel list from server: Then you can enter the keyword or specify the filter conditions to search channel. For example we enter “sra”, select the channel you want to join from channe list, then click “Join” button:

Note: If the channel requires a join password, try double click the row of channel.

1.3.3 Using Command

Refer to /join.

8 Chapter 1. Quick Start Srain Documentation, Release 1.0.0rc2

1.3. Join Channel 9 Srain Documentation, Release 1.0.0rc2

10 Chapter 1. Quick Start CHAPTER 2

Installation

Srain is available on GNU/Linux, Windows and macOS.

• Dependencies • Building • Distribution Packages – GNU/Linux

* Arch Linux * Debian * Flatpak * Gentoo * openSUSE – Windows – macOS

11 Srain Documentation, Release 1.0.0rc2

2.1 Dependencies

Name Notes Version coreutils Only for building make Only for building gcc Only for building pkg-config Only for building gettext glib2 glib-networking Optional, For TLS connection support +3 >= 3.18 libsoup libconfig >= 1.5

2.2 Building

You should install the aboved Dependencies on your platform before the following steps. Firstly, download source code of srain, you can get source code of latest release:

Note: The development of 1.0 release is working in progress.

Or get git version:

$ git clone https://github.com/SrainApp/srain.git $ cd srain

Setup build options and start building:

$ ./configure \ --prefix=/usr/local \ --datadir=/usr/local/share \ --sysconfdir=/etc $ make

Note: The configure script DOES NOT check any dependience. You should make sure that you have all depen- dencies installed.

Install(root privileges required):

# make install

Build and install documentation:

$ make doc # make install-doc

12 Chapter 2. Installation Srain Documentation, Release 1.0.0rc2

2.3 Distribution Packages

2.3.1 GNU/Linux

Arch Linux

Packages srain and srain-git (git version) are available on AUR, it is quite easy to install using AUR helper(yay as an example):

$ yay -S srain $ yay -S srain-git # git version

If you are the user of Arch Linux CN Repository, try:

# pacman -S archlinuxcn/srain # pacman -S archlinuxcn/srain-git # git version

Debian

Warning: This package is broken now. dfceaef has written Debian package script for Srain, but it is already out of date, I will be glad if anyone can fix it.

Flatpak cpba is maintaining Flatpak manifest for Srain and The built package is available on Flathub, just execute the following commands to install if you already have flatpak installed:

$ flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.

˓→flatpakrepo $ flatpak install flathub im.srain.Srain

Gentoo rtlanceroad is maintaining Gentoo ebuilds for Srain, please refer to it for more details. openSUSE alois is maintaining openSUSE package for Srain, following this link to install it.

2.3.2 Windows

Warning: Windows support of Srain is still experimental.

2.3. Distribution Packages 13 Srain Documentation, Release 1.0.0rc2

Srain requires Windows 7 or later. The easiest way to build/run Srain on Windows is using the toolchains provided by MSYS2 project. Firstly install MSYS2, then open a MSYS2 shell, install the basic build tools:

$ pacman -S base-devel $ pacman -S mingw-w64-i686-toolchain # For 32-bit Windows $ pacman -S mingw-w64-x86_64-toolchain # For 64-bit Windows

Then download the package script from MinGW PKGBUILD for Srain, run the following commands at the directory of PKGBUILD:

$ MINGW_INSTALLS=mingw32 makepkg-mingw -fsi # For 32-bit Windows $ MINGW_INSTALLS=mingw64 makepkg-mingw -fsi # For 64-bit Windows

If everything goes well, Srain is installed under your MinGW prefix.

Note: If you suffer the “error while loading shared libraries: xxxx.dll: cannot open shared object file: No such file or directory” problem when running, please run it in cmd but not msys2 shell, and it will show you real missing library.1

2.3.3 macOS

Warning: macOS support of Srain is still experimental.

There is not a distribution package or package script for Srain on macOS, you should build Srain by yourself. Firstly install Homebrew, run the following commands to install dependencies:

$ brew install coreutils gcc pkg-config # building $ brew install gettext glib-networking gtk+3 libsoup libconfig

Then follow the steps in Building.

1 https://github.com/Alexpux/MINGW-packages/issues/3939#issuecomment-397988379

14 Chapter 2. Installation CHAPTER 3

Commands Manual

• Playground • Syntax • Usage – /context – /reload – /server – /connect – /relay & /unrelay – /ignore & /unignore – /rignore & /unrignore – /query & /unquery – /join – /part – /quit – /topic – /msg – /me – /nick – /whois – /invite

15 Srain Documentation, Release 1.0.0rc2

– /kick – /mode – /ctcp

3.1 Playground

User can run commands in two ways, the one way is typing them into the input entry of chat buffer. The another way is writing the commands to the server.auto-run and chat.auto-run configuration items. For more details, please refer to Configuration Manual.

3.2 Syntax

A command is a line of string that has the following format, different elements are separated by whitespace:

[subcommand] [

The command’s name starts with a slash / and doesn’t contain any whitespace, such as: /join. A subcommand is a instruction behind the command name, it is optional. An option, as its name, is optional too, starts with a hyphen - and may has a value. option is often used as the switch of a flag or a way to change some default values. For example, The command /connect -tls -port 6697, option -tls is just a flag that tells srain use secure connections with TLS. And -port requires a value, if -port is not specified, program will use the default value 6667. Check /connect for more details. If a vaule starts with a hyphen - or contains whitespaces, it should be enclosed by single quotation mark '.

Note: All option should appear behind subcommand (If any), and before argument.

An argument is similar to vaule, but commonly it doesn’t have a default value so it can not be omitted (actually it depends on the implement of the command). If the first argument starts with a hyphen -, it should be enclosed by single quotation mark '. If an argument contains whitespaces, it should be quoted too. Specially, the last argument can contain whitespace without quoted. If you want to use a single quotation mark in a quoted text, use backslash \ to escape it. For backslash itself, use double backslash \\.

3.3 Usage

3.3.1 /context

Warning: This command is deprecated.

Usage:

16 Chapter 3. Commands Manual Srain Documentation, Release 1.0.0rc2

/context [chat]

Change the current context. Arguments: • server: The server you want to operate after • chat: Optional, the chat you want operate after, if not set, fallback to server’s current chat

3.3.2 /reload

Usage:

/reload

Reload user configuration.

3.3.3 /server

Usage:

/server [add|rm|list|set|connect|disconnect] [-host][-port][-pwd][-tls] [-tls-noverify] [-nick][-user][-real]

IRC server management.

Note: This command may changes context.

Sub commands: • add: create a server with unique name, you can set server information via options • rm: remove a server, all options will be ignored, you can only remove a server which is unconnected • list: list all available servers • set: set server information via options • connect: connect to specified server, all options will be ignored • disconnect: disconnect from specified server, all options will be ignored Create a server and connect to it immediately. It will become the default server automaticly. Options: • -host: server host • -port: server port, default 6667 • -pwd: connection password, default empty • -tls: use secure connections with TLS • -tls-noverify: use TLS connection without certificate verification • -nick: specify nickname

3.3. Usage 17 Srain Documentation, Release 1.0.0rc2

• -user: specify username, default same as nickname • -real: specify realname, default same as nickname Arguments: • name: unique name of server

3.3.4 /connect

Usage:

/connect [-port][-pwd][-tls] [-tls-noverify] [-user][-real]

Create a IRC server and connect to it immediately.

Note: This command may changes context.

Options: • -port: server port, default 6667 • -pwd: connection password, default empty • -tls: use secure connections with TLS • -tls-noverify: use TLS connection without certificate verification • -user: specify usernamem default same as nickname • -real: specify realname, default same as nickname Arguments: • host: server host • nick: specify nickname Example:

/connect-real'I am srainbot'-tls-port 6697 chat.freenode.org srainbot /connect 127.0.0.1 srainbot

Note: The following commands should run under the specified context. The context can be changed by /context, /server or /connect.

3.3.5 /relay & /unrelay

Usage:

/relay [-cur] /unrelay [-cur]

18 Chapter 3. Commands Manual Srain Documentation, Release 1.0.0rc2

Flag nick as a relay bot, show the real nick of the message sender. Use [ and ] as delimiter. Refer What is “relay message transform”? to see its effect. Options: • -cur: only effects the current chat Example:

/relay teleboto

Warning: This command is unstable, it may be implemented as a plugin in the future.

3.3.6 /ignore & /unignore

Usage:

/ignore [-cur] /unignore [-cur]

Ignore/unignore somebody’s message. Options: • -cur: only ignore in current chat

3.3.7 /rignore & /unrignore

Usage:

/rignore [-cur] /unignore [-cur]

Ignore/unignore message which matches specified pattern. Options: • -cur: only ignore in current chat Arguments: • name: unique pattern name • pattern: perl-compatible regex expression which is used to match the incoming message, for regex syntax, refer to https://developer.gnome.org/glib/stable/glib-regex-syntax.html

3.3.8 /query & /unquery

Usage:

/query /unquery [nick]

Start/stop private chat with somebody. For /unquery , If no nick is specified, it stops the current private chat.

3.3. Usage 19 Srain Documentation, Release 1.0.0rc2

3.3.9 /join

Usage:

/join[,]...[[,]]...

Join specified channel(s), channels are separated by commas ,. Example:

/join #archinux-cn,#gzlug,#linuxba /join #channel1,#channe2 passwd1

3.3.10 /part

Usage:

/part [[,]]...[]

Leave specified channel(s) with optional reason, channels are separated by commas ,. If no channel is specified, it leaves the current channel. Example:

/part #archinux-cn Zzz... /part #archlinux-cn,#tuna /part

3.3.11 /quit

Usage:

/quit [reason]

Quit current server with optional reason.

3.3.12 /topic

Usage:

/topic [-rm|]

Set the current channel’s topic. If no topic specified, it just displays the current channel’s topic. • -rm: remove current channel’s topic Example:

# Just view the topic /topic # Set the topic to "Welcome to Srain!" /topic Welcome to Srain! # Clear the topic /topic -rm

20 Chapter 3. Commands Manual Srain Documentation, Release 1.0.0rc2

3.3.13 /msg

Usage:

/msg

Send message to a target, the target can be channel or somebody’s nick. If you want to send a message to channel, you should /join it first.

3.3.14 /me

Usage:

/me

Send an action message to the current target.

3.3.15 /nick

Usage:

/nick

Change your nickname.

3.3.16 /whois

Usage:

/whois

Get somebody’s information on the server.

3.3.17 /invite

Usage:

/invite [channel]

Invite somebody to join a channel. If no channel is specified, it falls back to current channel.

3.3.18 /kick

Usage:

/kick [channel] [reason]

Kick somebody from a channel, with optional reason. If no channel is specified, it falls back to current channel.

3.3. Usage 21 Srain Documentation, Release 1.0.0rc2

3.3.19 /mode

Usage:

/mode

Change target ‘s mode.

3.3.20 /ctcp

Usage:

/ctcp [message]

Send a CTCP request to target. The commonly used commands are: CLIENTINFO, FINGER, PING, SOURCE, TIME, VERSION, USERINFO. For the detail of each command, please refer to https://modern.ircdocs.horse/ctcp.html . If you send a CTCP PING request without message, you will get the latency between the target.

Note: DCC is not yet supported.

22 Chapter 3. Commands Manual CHAPTER 4

Configuration Manual

Srain uses Libconfig to process configuration file.

• Configuration File • Syntax • Priority and Fallback • All Configurable Items

4.1 Configuration File

The path of system wide configuration file builtin.cfg depends on the compile flag --config-dir, default to be /etc/srain. The path of user wide configuration file srain.cfg is $XDG_CONFIG_HOME/srain, usually it is ~/.config/ srain. The difference between system wide and user wide configuration file is the priority, The user wide configuration always overwrite the one in system wide configuration. For more details about priority, refer to Priority and Fallback.

4.2 Syntax

For the syntax of configuration file, please refer to Libconfig’s documentation: Configuration Files For an example configuration, refer to All Configurable Items.

23 Srain Documentation, Release 1.0.0rc2

4.3 Priority and Fallback

A group is a collection of configurations. The same group in different place have different priority. log: {} application: {} server: { # A top level ``server`` group

# ...

user={} default-messages={} irc={} chat={} # A ``chat`` group directly in ``server``

chat-list=( { }, # A ``chat`` group in ``chat-list`` # ... ) } server-list:( { }, # A ``server`` group in ``server-list`` # ... )

For example, A server group contains the information(not all) of connection to IRC servers. server group can appear at the top level of configuration file, or be an element of server-list list with a unique name. The top level server is often used to specify the global configuration, and server-list is used to specify specified IRC servers. The configuration in server-list can overwrite the top level server, and if an option is not specified in server-list, It will fallback to server. Another similar group is chat, chat contains configuration of chat panel, such as whether to show topic, whether to save chat log and etc. Every server group can contain a chat group and a chat-list list. Elements in chat-list are also identified with an unique name. As same as the relationship between top level server and server-list, chat-list is used to specify a speci- fied chat and has higher priority. As mentioned above, The priority of user configuration is always higher than system’s, so we can get the priority sorting of server and chat group: server-list(user) > top level server(user) > server-list(system) > top level server(system) chat-list in server-list(user) > chat in server-list(user) > chat-list in top level server(user) > chat in top level server(user) > chat-list in server-list(system) > chat in server-list(system) > chat-list in top level server(system) > chat in top level server(system)

24 Chapter 4. Configuration Manual Srain Documentation, Release 1.0.0rc2

4.4 All Configurable Items

Here is the default system wide configuration file used by Srain, all configurable items are already listed here. you can make a copy as your user configuration file, but note: 1. User configuration always overwrite system’s, if you don’t know what does this option means, please remove it from your user configuration rather than overwrite it 2. The server’s name in server-list is unique, please remoeve the duplicated server in server-list before using

# Srain built-in configuration file # Application configuration. version="1.0.0rc2" # String; Every configuration file should have a # version, altough it is not used yet # id = "im.srain.Srain" # The identifier for Srain theme="default-bubble" # String; Theme; Available values: default csd= false # Bool; Whether enable Client-Side Decoration send-on-ctrl-enter= false # Bool; Send messsage on CTRL+Enter pressed exit-on-close= false # Bool; Exit program on main closed auto-connect=[] # String array; Servers that are auto connected # after startup

# If you want to report/fix a bug, terminal log will be helpful. log= { prompt-color= true # Bool; Colorful output prompt-file= false # Bool; Display the filename of the file which log # statement is located prompt-function= true # Bool; As aboved, function name prompt-line= false # Bool; As aboved, line number

# String array; Specify the log level of a group of files debug-targets=[] # Files with debug log level info-targets=[] # Files with information log level warn-targets=[""] # Files with warning log level error-targets=[] # Files with error" log level }

# Global IRC Server configuration, this group can also appear in server-list. server= { auto-join=[] # String array; Chats that are auto joined after server # is created auto-run=[] # String array; Commands that are auto run after server # is created

user= { nickname="SrainUser" username="Srain" realname="Can you can a can?"

login: { method="none" # String; Login method; Available values: # - none: No login method, default value (continues on next page)

4.4. All Configurable Items 25 Srain Documentation, Release 1.0.0rc2

(continued from previous page) # - nickserv: Login with NICKSERV command # - msg-nickserv: Login with /msg NickServ identify # - sasl-plain: Login with SASL PLAIN mechanism

# For method "nickserv" # nickserv-password = "" # String; User password, default unset

# For method "msg-nickserv" # msg-nickserv-password = "" # String; User password, default unset

# For method "sasl-plain" # sasl-plain-identify = "" # String; User password, default unset # sasl-plain-password = "" # String; User password, default unset }

# Default messages for performing specified action part-message="Leaving." kick-message="Kick." away-message="Away from keyboard." quit-message="El Psy Congroo." }

# Chat configuration, this group can also appear in chat-list. chat= { log= true # Bool; Persistent chat log to storage notify= true # Bool; Send notification when you are # mentioned by others or receiving any # ERROR message notify-all= true # Bool; Send notification when receiving # any PRIVMSG/ACTION/NOTIFY/ERROR message show-topic= true # Bool; Show topic show-avatar= false # Bool; Show user avater show-user-list= true # Bool; Show user list render-mirc-color= true # Bool; Render mirc color nick-completion-suffix=":" # String; Suffix of completed nick name # e.g. "nick: msg"

preview-url= true # Bool; Show previewer for every URL auto-preview-url= true # Bool; Automatically preview supported URL

auto-run=[] # String array; Commands that are auto run after # chat is created }

# Specified chat configuration, every element in list should have a unique # ``name``. chat-list= ( { # ``name`` is necessary for a ``chat`` group in ``chat-list``. name="#srain" show-topic= true } ) }

(continues on next page)

26 Chapter 4. Configuration Manual Srain Documentation, Release 1.0.0rc2

(continued from previous page) # Specified server configuration, every element in list should have a unique # "name". server-list= ( { # ``name``, ``addresses`` are necessary for a ``server`` group # in ``server-list``, otherwise you can not connect to it. name="freenode" # String; The unique name of server addresses=[ "irc.freenode.net:6697", "chat.freenode.net:6697", "irc.freenode.org:6697", "chat.freenode.org:6697" ] # String array; Addresses of IRC server, # each address follows the format of # [:]. The port can be omitted, # default 6667 for non-TLS and 6697 for TLS # password = "" # String; Connection password, default unset tls= true # Bool; Connect with TLS encryption # tls-noverify = false # Bool; Connect with TLS encryption but without # certificate verification, only used while # connecting to a self-signed certificate # verified server encoding="utf-8" # String; Encoding of IRC server, to get # all available value of encoding, check the # output of ``iconv --list`` # ipv6 = false # Use IPv6 connection, not yet supported }, { name="GIMPNet" addresses=["irc.gimp.org:6697","irc.gnome.org:6697"] tls= true encoding="utf-8" }, { name="OFTC" addresses=["irc.oftc.net:6697"] tls= true encoding="utf-8" }, { name="Rizon" addresses=["irc.rizon.net:6697"]

tls= true encoding="utf-8" }, { name="localhost" addresses=["localhost:6667","127.0.0.1:6667"] tls= false }

# TODO: More predefined servers )

4.4. All Configurable Items 27 Srain Documentation, Release 1.0.0rc2

28 Chapter 4. Configuration Manual CHAPTER 5

Development Specification

int bus_count=1;

5.1 Codeing Style

• Public header __XXX_H • • • – 80 char per line – – – gtk_widget_class_bind_template_child() – case • – – + – • – 80 • Git commit log: MODULE(TYPE): DESCRIPTION (MODULE) All Core Sirc Sui Prefs Filter Decorator Lib I18n Data Plugin Build Script Doc... (TYPE) feat impl change fix improve cleanup refactor update release misc... • I18N numbered argument %n$X • Change log: – Changed:

29 Srain Documentation, Release 1.0.0rc2

– Added: – Removed: – Imporved: bug • – (TODO) – – – change log – – – commit tag

– * Arch Linux: @SilverRainZ * Gentoo: @xeirrr * ...

30 Chapter 5. Development Specification CHAPTER 6

Miscellaneous

6.1 Hot Keys

• ctrl + j/k: switch chat panel • up/down: scroll message list

Note: Customized hot keys will be supported in the future.

6.2 Chat Logs

Chat logs is enabled by default, log files are located at $XDG_DATA_HOME/srain/logs, usually it is ~/.local/ share/srain/logs.

31 Srain Documentation, Release 1.0.0rc2

32 Chapter 6. Miscellaneous CHAPTER 7

Frequently Asked Questions

• Does Srain support Windows? • Why does the image upload button not work? • Why can’t I see people’s avatar? • What is “relay message transform”? • Where are the log files?

7.1 Does Srain support Windows?

Not yet, Windows support is in the plan.

7.2 Why does the image upload button not work?

This function is implemented by a python plugin, therefore you should install python3-urllib3 and python3-request to let it work.

7.3 Why can’t I see people’s avatar?

There is not a specification for user avatar in IRC protocol (IRCv3 has an idea about it), so currently the avatar function is simply implemented by a python plugin, therefore you should install python3-urllib3 and python3-request to let it work. Besides, you should set show_avatar to true in your configuration.

33 Srain Documentation, Release 1.0.0rc2

7.4 What is “relay message transform”?

There are many relay bots forward messages from other IM to IRC network, “Relay message transform” make these messages easier to read. For example:

To enable “relay message transform”, check /relay & /unrelay for more details.

7.5 Where are the log files?

Refer to Chat Logs.

34 Chapter 7. Frequently Asked Questions CHAPTER 8

Change Log

• 2018-02-28 Version 0.06.4 • 2017-12-22 Version 0.06.3 • 2017-09-12 Version 0.06.2 • 2017-08-18 Version 0.06.1 • 2017-07-29 Version 0.06 • 2016-09-19 Version 0.05.1 • 2016-08-27 Version 0.05 • 2016-04-30 Version 0.03 • 2016-04-13 Version 0.02 • 2016-04-07 Version 0.01

8.1 2018-02-28 Version 0.06.4

• Changed: – Change default application ID to im.srain.Srain • Added: – CTCP support, including request & response CLIENTINFO, FINGER, PING, SOURCE, TIME, VER- SION, USERINFO messages. DCC message is not yet supported. Use command /ctcp for sending a CTCP request – Login method support, you can specify it by configuration file option server.login_method:

35 Srain Documentation, Release 1.0.0rc2

* sasl_plain: SASL PLAIN authentication support, will use server.user.username as iden- tity, and use server.user.passwd as password – Added documentation Support Tables used to show Srain’s features, inspried by https://ircv3.net/software/ clients.html – Added a semantic version parser, not yet used – Added appdata file which requier by application store, thanks to @cpba – openSUSE package is available, please refer to openSUSE for details, thanks to @alois – Flatpak package is available, please refer to Flatpak for details, thanks to @cpba • Improved: – Fixed a logical error in IRC message parser: all parameters are equal whether matched by or , thanks to @DanielOaks – Improved connection state control, you can smoothly disconnect/quit from server even it is unresponsive – Fixed truncated message output by /server list subcommand – Fixed crash at g_type_check_instance() under GLib 2.54.3+ – Fixed: Do not free a SrianServerBuffer which has non-empty buffer – Ensure the QUIT message can be sent before application shutdown – Removed entry from desktop file, thanks to @TingPing – Fixed grammer of join message, thanks to @raindev – Re-enable CI for Srain:

8.2 2017-12-22 Version 0.06.3

• Changed: – Configurable file option tls_not_verify in irc block in server block is renamed to tls_noverify, old option name is still supported – Command option tls-not-verify for /server and /connect is renamed to tls-noverify, old op- tion name is still supported • Added: – Connect popover supports connect to predefined server – Join popover supports channel search • Improved: – Modified margin and padding of some widgets – Improved the style of unread message counter – Fixed markup parse error of decorator – Fixed crashing while connecting from connect popover – Fixed use after free while removing user – Improved the performance and extensibility of user list – Improved compatibility with older versions of GTK(> 3.16)

36 Chapter 8. Change Log Srain Documentation, Release 1.0.0rc2

– Refactor the code of chat panel, helpful for the next development

8.3 2017-09-12 Version 0.06.2

• Added: – mIRC color support, can be disabled via setting render_mirc_color option in chat block in server block to false • Improved: – Better error reporting while operating the UI – IRC URL can be opened directly within the application – Text in input entry, connection panel and join panel will not be cleared while operation is not successful – Fixed: in some cases, nickname registration will case infinity loop – Decorator and filter now can process xml message – Imporved the handling of channel topic

8.4 2017-08-18 Version 0.06.1

• Added: – Added GPL copyright statements – RPL_CHANNEL_URL (328) message support – Command line options support, type srain -h for help message – Support for Creating server and joining channel from IRC URL – New dependency libsoup – Add reconnect timer: if connection fails, Srain will wait for 5 seconds then try to connect again. If it still fails, waiting time will increase by 5 second • Improved: – Fixed the crash when QUIT – Fixed: avoid sending empty password – More empty parameters checks – Imporve server connection status control

8.5 2017-07-29 Version 0.06

• Changed: – The third time of refactor ;-) – New command parser, for the syntax, refer to Syntax. – Changed the format of Chat log

8.3. 2017-09-12 Version 0.06.2 37 Srain Documentation, Release 1.0.0rc2

– The /relay & /unrelay command doesn’t support custom delimiter, this function will be implemented as python plugin in the future – Use reStructuredText for document instead of Markdown • Added: – Message filter: mechanism for filtering message – Message Decorator: mechanism for changing message – Install script for Gentoo, thanks to @rtlanceroad ! – New command /rignore & /unrignore for ignore message using regular expression, thanks to @zwindl ! – Config file support – Configurable log module, more convenient for developing and reporting issue – New Return value type, for more friendly error reporting – New command /server for IRC servers management – Srain home page is available at: https://srain.im – Srain help documentation is available at: https://doc.srain.im • Removed: – Remove libircclient dependence • Improved: – Improve reconnection stuff: auto reconnect when ping time out – More accurate message mention – Display preview image in correct size – Any number of image links in message can be previewed – HTTP(and some other protocols) link, domain name, email address and IRC channel name in topic and messages can be rendered as hyper link – The sent message can be merged to last sent message – Fixed some bugs

8.6 2016-09-19 Version 0.05.1

• Create missing directory: $XDG_CACHE_HOME/srain/avatars

8.7 2016-08-27 Version 0.05

• Changed: – Port to libircclient

* SSL connection support * Server password support * Channel password support

38 Chapter 8. Change Log Srain Documentation, Release 1.0.0rc2

• Added: – Convenience GtkPopover for connecting and joining – Nick popmenu – Translations: zh_CN – Forward message – Chat log – Colorful user list icon – Mentioned highlight – Desktop notification • Improved: – More friendly User interface – Stronger {upload,avatar} plugin – Fixed a lot of bugs

Note: 0.05 is the first stable release of Srain, enjoy~

8.8 2016-04-30 Version 0.03

• New interface between UI and IRC module • Multi-server support • Channel name is not case sensitive now • /quit command will close all SrainChan of a server • Fix GTK-Warning when close a SrainCHan

Note: 0.03 is a pre-release, some functions are no completed yet. it also has some undetected bugs.

8.9 2016-04-13 Version 0.02

• Bugs fixed • Port to GTK+-3.20

Note: 0.02 is a pre-release, some functions are no completed yet. it also has some undetected bugs.

8.8. 2016-04-30 Version 0.03 39 Srain Documentation, Release 1.0.0rc2

8.10 2016-04-07 Version 0.01

• Implement basic functions of a IRC client • Themes: Silver Rain (light) • Simple python plugin support: – Auto upload image to pastebin (img.vim-cn.org) – Get github avatar according nickname – NB: plugin will separated from this repo in the future • Image preview from URL • Relay bot message transfrom • Nick auto completion • Combine message from same person

Note: 0.01 is a pre-release, some functions are no completed yet. it also has some undetected bugs.

40 Chapter 8. Change Log CHAPTER 9

Support Tables

• Basic IRC Client Support • Client-to-Client Protocol (CTCP) Support • IRCv3 Client Support

9.1 Basic IRC Client Support

Function Support Auto reconnect Yes Multiple connection Yes TLS connection Yes Nick completion Yes Ignore and filter Yes Chat log Yes Configuration file Yes Command Yes mIRC color Yes Plugin Unstable

41 Srain Documentation, Release 1.0.0rc2

9.2 Client-to-Client Protocol (CTCP) Support

Message Support ACTION Yes CLIENTINFO Yes DCC No FINGER Yes PING Yes SOURCE Yes TIME Yes VERSION Yes USERINFO Yes

9.3 IRCv3 Client Support

Feature Support CAP v3.1 Yes CAP v3.2 Yes cap-notify Yes account-notify No account-tag No away-notify No batch No chghost No echo-message No extended-join No invite-notify No Monitor No multi-prefix No SASL v3.1 PLAIN SASL v3.2 PLAIN server-time No starttls No sts No userhost-in-names No

42 Chapter 9. Support Tables CHAPTER 10

External Resources

Srain use the following external resources from internet. Thanks to the authors of them! data/icons/16x16/srain-server.png: • 16x16 png • license: https://icons8.com/license/ • url: http://www.iconarchive.com/show/outline-icons-by-iconsmind/Servers-icon.html data/icons/16x16/srain-chan.png: • 16x16 png • license: https://icons8.com/license/ • url: http://www.iconarchive.com/show/ios7-icons-by-icons8/Users-Group-icon.html data/icons/16x16/srain-user-*.png: • 16x16 png • modified from data/icons/16x16/chan_icon.png data/icons/36x36/srain-avatar.png: • 36x36 png • license: unknown • url: search from google

43 Srain Documentation, Release 1.0.0rc2

44 Chapter 10. External Resources CHAPTER 11

Indices and Tables

• genindex • search

45