Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SRAIN(1)			      Srain				SRAIN(1)

NAME
     srain - Srain Documentation

     Modern IRC client written in GTK.
       [image]

     Latest version: 2024-04-26 Version 1.7.0.

     The  source  code	of this site is hosted on GitHub.  If you found any mis-
     take, feel free to file issue or pull request.

     Supporting Srain through OpenCollective.

RECNET POSTS
     All postsa| or Feed

ALL PAGES
   Srain
     ci-status docs-status channel

     Modern IRC client written in GTK.	[image]

   Packaging Status
     pkgstat

   Features
     * Fully open source

     * RFC {1459,2812} compatible

     * Partial IRCv3 support

     * Multi-platform support (Linux, Windows, macOS and BSD)

     * Act like modern IM client

       * Graphical user interface

       * Convenient connection panel

       * Interactive channel search

       * Forward message in one click

       * URL preview

       * Desktop notificaion

       * Special optimization for bridge/relay bot

     * Act like geek IRC client

       * Anything can be done via commands

       * Fine-grained configuration with hot update support

       * Regex based message render and filter mechanisms

       * IPC based plugin system (TODO)

   Need Help?
     Frequently Asked Questions may be helpful.

     Feel free to contact us if you have any question about Srain.

     * Github: file an issue Here

     * IRC Channel: I'm no longer active on IRC, but you  can  still  ask  other
       users for help on #srain @ Libera Chat

   License
     GNU General Public License Version 3

   Quick Start
     * Start Srain

     * Connect to IRC server

       * Predefined Server

       * Custom Server

       * Using Command

     * Join Channel

       * Directly Join

       * Search Channel

       * Using Command

     NOTE:
	For  your  information,  the following screenshots are taken under GNOME
	3.34.4 with Wayland backed with Arc GTK theme and Breeze icon theme.

   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.
       [image]

   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.

   Predefined Server
     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 "Quick
     Mode",  select  the item "freenode" from candidate box with label "Server",
     enter your nickname, then click the "Connect" button:
       [image]

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

   Custom Server
     While  the  server  your want to connect to is not listed in the predefined
     list, switch to the page "Advanced Mode", enter  the  hostname,  port,  and
     etc.

     NOTE:

	* If  the port is a TLS port, make sure that the option "Use secure con-
	  nection" is checked.

	* If the server's certificate is untrusted and you insist on continuing,
	  check the option "Do not verify certificate".

     Then click the "Connect" button:
       [image]

   Using Command
     Refer to /server and /connect.

     If you want to automatically execute commands at each  time  Srain  starts,
     please refer to Playground.

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

   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:
       [image]

     Now you should joined the channel:
       [image]

   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 "refresh" icon,
     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 "#s", select the channel you want to join
     from channe list, then click "Join" button to join it.
       [image]

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

   Using Command
     Refer to /join.

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

     * Dependencies

     * Building

       * Play with Meson

       * Makefile Helper

     * Distribution Packages

       * GNU/Linux

	 * Arch Linux

	 * Debian

	 * Fedora

	 * Flatpak

	 * Gentoo

	 * openSUSE

       * Windows

	 * Pre-built package

	 * Build byself

       * macOS

       * BSD

	 * OpenBSD

   Dependencies
	     +---------------------+----------------------+----------+
	     | Name		   | Notes		  | Version  |
	     +---------------------+----------------------+----------+
	     | meson		   | Only for Building	  | > 0.47.0 |
	     +---------------------+----------------------+----------+
	     | make		   | Optional,	only  for |	     |
	     |			   | development	  |	     |
	     +---------------------+----------------------+----------+
	     | appstream	   | Only  for	building, |	     |
	     |			   | on Debian-based dis- |	     |
	     |			   | tributions 	  |	     |
	     +---------------------+----------------------+----------+
	     | coreutils	   | Only for building	  |	     |
	     +---------------------+----------------------+----------+
	     | gcc		   | Only for building	  |	     |
	     +---------------------+----------------------+----------+
	     | pkg-config	   | Only for building	  |	     |
	     +---------------------+----------------------+----------+
	     | gettext		   | Only for building	  |	     |
	     +---------------------+----------------------+----------+
	     | glib2		   |			  |	     |
	     +---------------------+----------------------+----------+
	     | glib-networking	   | Optional,	 for  TLS |	     |
	     |			   | connection support   |	     |
	     +---------------------+----------------------+----------+
	     | gtk+3		   |			  | >= 3.18  |
	     +---------------------+----------------------+----------+
	     | libsoup3 	   |			  | >= 3.0   |
	     +---------------------+----------------------+----------+
	     | libconfig	   |			  | >= 1.5   |
	     +---------------------+----------------------+----------+
	     | libsecret	   |			  |	     |
	     +---------------------+----------------------+----------+
	     | openssl		   |			  |	     |
	     +---------------------+----------------------+----------+
	     | python-sphinx	   | Optional, for build- |	     |
	     |			   | ing documentation	  |	     |
	     +---------------------+----------------------+----------+
	     | adwaita-icon-theme  | Or  any  other  icon |	     |
	     |			   | themes		  |	     |
	     +---------------------+----------------------+----------+
	     | libayatana-appindi- | Optional application |	     |
	     | cator		   | indicator	 support, |	     |
	     |			   | can be  disabled  by |	     |
	     |			   | meson	  options |	     |
	     |			   | -Dapp_indica-	  |	     |
	     |			   | tor=false		  |	     |
	     +---------------------+----------------------+----------+

   Building
     You should install the aboved Dependencies on your platform before the fol-
     lowing steps.

     Firstly, download source code of srain, you can get source code  of  latest
     release:

	$ wget https://github.com/SrainApp/srain/archive/1.7.0.tar.gz
	$ tar -xvzf 1.7.0.tar.gz
	$ cd srain-1.7.0

     Or get git version:

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

   Play with Meson
     Srain  use  Meson with ninja backend as its build system.	You can build it
     via the following commands:

	$ meson setup builddir
	$ cd builddir
	$ ninja

     Install(root privileges required):

	$ cd builddir
	# ninja install

     HTML documentation and manpage are built and installed by default,  if  you
     don't  need them, just set meson option doc_builders to an empty array when
     setup:

	$ meson setup -Ddoc_builders=[] builddir

   Makefile Helper
     We also provide a simple Makefile helper to simplify meson commands.  It is
     convenient for development.

	$ make		 # Build srain
	$ make build	 # Same as above
	$ make install	 # Install srain to prefix under project root
	$ make run	 # Run srain with isolated $HOME and XDG Directory
	$ make debug	 # Same as `make run`, but with GDB attached
	$ make inspect	 # Same as `make run`, but with GtkInspector
	$ make clean	 # Remove all compilation and installation result
	$ make doc	 # View installed HTML documentation

   Distribution Packages
   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
     Srain now in offical repository of Debian:

	# apt install srain

   Fedora
     Srain now in offical repository of fedora, use dnf to install it.

	# dnf install srain

   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
     Please refers to gentoo portage overlays.

   openSUSE
     alois is maintaining openSUSE package for Srain, following this link to in-
     stall it.

   Windows
     Srain requires Windows 7 or later.

   Pre-built package
     After 2020-08-10 Version 1.1.2, we provide Windows portable binary that you
     can get it from Github release page.

   Build byself
     If you want to build Srain on Windows youself, you  should  use  the  tool-
     chains 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: can-
	not 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]

     [1]  -
	  https://github.com/Alexpux/MINGW-packages/issues/3939#issuecom-
	  ment-397988379

   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 dependen-
     cies:

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

     Next, tell pkg-config where to find the libraries we just installed:

	export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:"/usr/local/opt/icu4c/lib/pkgconfig"
	export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:"/usr/local/opt/openssl@3/lib/pkgconfig"

     Then follow the steps in Building.

   BSD
   OpenBSD
     Please refers to OpenBSD Ports.

   Commands Manual
     * Playground

     * Syntax

     * Available Commands

       * /reload

       * /server

       * /connect

       * /ignore & /unignore

       * /query & /unquery

       * /join

       * /part

       * /quit

       * /topic

       * /msg

       * /me

       * /nick

       * /whois

       * /invite

       * /kick

       * /mode

       * /ctcp

       * /pattern

       * /filter & /unfilter

       * /render & /unrender

       * /quote

       * /clear

     * Obsoleted Commands

       * /rignore & /unrignore

       * /relay & /unrelay

   Playground
     User can run commands in two ways, the one way is typing them into the  in-
     put 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.

   Syntax
     A command is a line of string that has the following format, different ele-
     ments are separated by whitespace:

	/<name|alias> [subcommand] [<option> [value]]... [argument]...

     User should use name to invoke a command.	The command's name starts with a
     slash  / and doesn't contain any whitespace, such as: /join.  Some commands
     have alias that can be used instead of name, for example, user can  use  /j
     instead of /join.

     NOTE:
	When  you want to send a message starts with a slash, please prepend an-
	other slash to the message.  For example, you want to send "/this  is  a
	slash  prefixed  message",  you need to type "//this is a slash prefixed
	message".

     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  de-
     fault  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 de-
     fault value 6667. Check /connect for more details.

     If a value starts with a hyphen - or contains whitespaces, it should be en-
     closed by single quotation mark '.

     NOTE:
	All  option  should  appear behind subcommand (If any), and before argu-
	ment.

     An argument is similar to value, 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 en-
     closed 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 \\.

   Available Commands
   /reload
     Usage:

	/reload

     Reload user configuration.

   /server
     Usage:

	/server [connect|disconnect|list] <name>

     Predefined IRC server management.

     Sub commands:

     * connect: connect to specified predefined server

     * disconnect: disconnect from specified predefined server

     * list: list all predefined servers

     Arguments:

     * name: unique name of server

   /connect
     Usage:

	/connect [-port <port>] [-pwd <password>] [-tls] [-tls-noverify]
	    [-user <username>] [-real <realname>] <host> <nick>

     Create a IRC server and connect to it immediately.

     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 username, 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

   /ignore & /unignore
     Usage:

	/ignore [-cur] <nick>
	/unignore [-cur] <nick>

     Ignore/unignore somebody's message.

     Options:

     * -cur: only ignore in current chat

   /query & /unquery
     Usage:

	/query|q <nick>
	/unquery [nick]

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

   /join
     Usage:

	/join|j <channel>[,<channel>]... [<passwd>[,<passwd>]]...

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

     Example:

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

   /part
     Usage:

	/part|leave [<channel>[,<channel>]]... [<reason>]

     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

   /quit
     Usage:

	/quit [reason]

     Quit current server with optional reason.

   /topic
     Usage:

	/topic [-rm|<topic>]

     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

   /msg
     Usage:

	/msg|m <target> <message>

     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.

   /me
     Usage:

	/me <message>

     Send an action message to the current target.

   /nick
     Usage:

	/nick <new_nick>

     Change your nickname.

   /whois
     Usage:

	/whois <nick>

     Get somebody's information on the server.

   /invite
     Usage:

	/invite <nick> [channel]

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

   /kick
     Usage:

	/kick <nick> [channel] [reason]

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

   /mode
     Usage:

	/mode <target> <mode>

     Change target 's mode.

   /ctcp
     Usage:

	/ctcp <target> <command> [message]

     Send a CTCP request to target. The commonly used commands are:  CLIENTINFO,
     FINGER,  PING, SOURCE, TIME, VERSION, USERINFO. For the detail of each com-
     mand, 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.

   /pattern
     Usage:

	/pattern add <name> <pattern>
	/pattern rm <name>
	/pattern list

     Regular expression pattern management.  The added pattern can be used else-
     where in the application, such as /filter & /unfilter and /render & /unren-
     der.

     Sub commands:

     * add: add a pattern with given name

     * rm: remove a pattern with given name

     * list: list all availables patterns

     Arguments:

     * name: unique name of pattern

     * pattern: a valid Perl-compatible Regular Expression

   /filter & /unfilter
     Usage:

	/filter [-cur] <pattern>
	/unfilter [-cur] <pattern>

     Filter message whose content matches specified pattern.

     Options:

     * -cur: only ignore in current chat

     Arguments:

     * pattern: name of regular expression pattern which is managed by /pattern

     Example:

     This filter message that content is "Why GTK and not Qt?":

	/pattern add troll ^Why GTK and not Qt\?$
	/filter troll

     To cancel the filter of these kind of message, use:

	/unfilter troll

     NOTE:
	Pattern  NO  NEED  to consider the case where the mIRC color code is in-
	cluded in the message.

   /render & /unrender
     Usage:

	/render [-cur] <nick> <pattern>
	/unrender [-cur] <nick> <pattern>

     Render message of specific user via specific pattern.

     The given pattern should contains specific Named Subpatterns used for  cap-
     turing  message  fragment	from original message content and become part of
     rendered message.

     There are list of available named subpatterns:

     * (?<sender>): match name of sender, once this subpatterns is matched,  the
       original sender will be displayed as message remark

     * (?<content>): match content of rendered message

     * (?<time>): match time of rendered message

     Arguments:

     * nick: nickname of user

     * pattern: name of regular expression pattern which is managed by /pattern

     Options:

     * -cur: only effects the user under current chat

     Example:

     We assume that there is a IRC bot named "xmppbot".  It forwards message be-
     tween  XMPP and IRC.  On IRC side, the forwarded message looks like "<xmpp-
     bot> [xmpp_user] xmpp_message", you can render it to  a  more  easy-to-read
     format via the following commands:

	/pattern add xmpp \[(?<sender>[^:]+?)\] (?<content>.*)
	/render xmppbot xmpp

     The  forwarded  meessage will look like "<xmpp_user> xmpp_message", and the
     original message sender "xmppbot" will  be  displayed  as	message  remark.
     Please refer to What is "relay message transform"? see its effect.

     NOTE:
	Pattern  SHOULD  consider the case where the mIRC color code is included
	in the message.

   /quote
     Usage:

	/quote <raw message>

     For sending special IRC commands.

     Added in version 1.2.0.

   /clear
     Usage:

	/clear

     Clear all messages in current buffer.

     Added in version 1.4.

   Obsoleted Commands
   /rignore & /unrignore
     This command has been dropped since 2019-06-14 Version 1.0.0rc5, please use
     /filter & /unfilter instead.

   /relay & /unrelay
     This command has been dropped since 2019-06-14 Version 1.0.0rc5, please use
     /render & /unrender instead.

   Configuration Manual
     Srain uses Libconfig to process configuration file.

     * Configuration File

     * Syntax

     * Priority and Fallback

     * All Configurable Items

   Configuration File
     The path of system wide configuration file builtin.cfg depends on the  com-
     pile flag --sysconfdir, default to be /etc/srain.

     The   path   of   user  wide  configuration  file	srain.cfg  is  $XDG_CON-
     FIG_HOME/srain, usually it  is  ~/.config/srain  (~/.var/app/im.srain.Srain
     for flatpak installs).

     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.

   Syntax
     For the syntax of configuration file, please refer to Libconfig's	documen-
     tation: Configuration Files

     For an example configuration, refer to All Configurable Items.

   Priority and Fallback
     A	group  is  a  collection  of configurations. The same group in different
     place have different priority.

	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 specified 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)

   All Configurable Items
     Here is the default system wide configuration file used by Srain, all  con-
     figurable	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  dupli-
	cated server in server-list before using

	# Srain built-in configuration file
	# Application configuration.

	version = "1.0.0rc5"	    # 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 = true		    # 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 window closed
	auto-connect = []	    # String array; Servers that are auto connected
				    # after startup
	server-visibility = true    # Bool; Whether the server buffer is visible
	scroll-on-new-message = false # Auto scroll when a new message is recieved

	# 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
					# - nickserv: Login with NICKSERV command
					# - msg-nickserv: Login with /msg NickServ identify
					# - sasl-plain: Login with SASL PLAIN mechanism
					# - sasl-ecdsa: Login with SASL
					#   ECDSA-NIST256P-CHALLENGE mechanism
					# - sasl-external: Login with SASL EXTERNAL mechanism
					#   (requires a TLS certificate set in the **server**
					#   section, not the one just below)

		    # For method "sasl-ecdsa"
		    # certificate = ""	# String; Path to login ECDSA certificate file, used for
					# sasl-ecdsa authentication (**not** sasl-external)
		}

		# 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
		}
	    )
	}

	# 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 = "Libera Chat"	    # String; The unique name of server
		addresses = [
		    "irc.libera.chat:6697"
		]			    # String array; Addresses of IRC server,
					    # each address follows the format of
					    # <host>[:<port>]. The port can be omitted,
					    # default 6667 for non-TLS and 6697 for TLS
		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
		# certificate = "/home/you/.config/srain/libera.pem"
					    # Client TLS certificate, that can be used for
					    # authentication with CertFP or SASL EXTERNAL (if
					    # ``method = "sasl-external"`` is set in the
					    # ``user`` configuration)
	    },
	    {
		name = "OFTC"
		addresses = ["irc.oftc.net:6697"]
		tls = true
		encoding = "utf-8"
	    },
	    {
		name = "hackint"
		addresses = ["irc.hackint.org:6697"]
		tls = true
		encoding = "utf-8"
	    },
	    {
		name = "Rizon"
		addresses = ["irc.rizon.net:6697"]

		tls = true
		encoding = "utf-8"
	    },
	    {
		name = "DALnet"
		addresses = [
		    "irc.dal.net:6697",
		    "agility.nl.eu.dal.net:6697",
		    "bifrost.ca.us.dal.net:6697",
		    "bitcoin.uk.eu.dal.net:6697",
		    "choopa.nj.us.dal.net:6697",
		    "diamond.hub.dal.net:6697",
		    "fidelity.tx.us.dal.net:6697",
		    "foxtrot.hub.dal.net:6697",
		    "halcyon.il.us.dal.net:6697",
		    "hash.ix.nl.dal.net:6697",
		    "hoon.ix.au.dal.net:6697",
		    "istana.ix.sg.dal.net:6697",
		    "jingo.ix.us.dal.net:6697",
		    "karsk.ix.eu.dal.net:6697",
		    "kiwi.ix.nz.dal.net:6697",
		    "koala.vc.au.dal.net:6697",
		    "laud.ix.us.dal.net:6697",
		    "loyalty.ix.us.dal.net:6697",
		    "merlin.hub.dal.net:6697",
		    "midnight.hub.dal.net:6697",
		    "ninja.hub.dal.net:6697",
		    "nonstop.ix.me.dal.net:6697",
		    "oi.ix.au.dal.net:6697",
		    "oper-e.dal.net:6697",
		    "paradigm.hub.dal.net:6697",
		    "powertech.no.eu.dal.net:6697",
		    "punch.wa.us.dal.net:6697",
		    "rangers.ix.us.dal.net:6697",
		    "redemption.ix.us.dal.net:6697",
		    "renew.hub.dal.net:6697",
		    "smurf.hub.dal.net:6697",
		    "underworld.se.eu.dal.net:6697",
		    "uworld.hub.dal.net:6697"
		]
		tls = true
		encoding = "utf-8"
	    },
	    {
		name = "EFnet"
		addresses = [
		    "irc.efnet.fr:6667",
		    "efnet.port80.se:6697",
		    "efnet.portlane.se:6667",
		    "irc.du.se:6667",
		    "irc.homelien.no:6667",
		    "irc.inet.tele.dk:6667",
		    "irc.nordunet.se:6667",
		    "irc.underworld.no:6667",
		    "irc.choopa.net:6697",
		    "irc.colosolutions.net:6667",
		    "irc.mzima.net:6667",
		    "irc.prison.netirc.servercentral.net:6667"
		]
		tls = false
		encoding = "utf-8"
	    },
	    {
		name = "IRCnet"
		addresses = [
		    "irc.ssl.ircnet.com:6697",
		    "irc.ircnet.com:6667",
		    "irc.at.ircnet.com:6667",
		    "irc.be.ircnet.com:6667",
		    "irc.cz.ircnet.com:6667",
		    "irc.dk.ircnet.com:6667",
		    "irc.ee.ircnet.com:6667",
		    "irc.fi.ircnet.com:6667",
		    "irc.fr.ircnet.com:6667",
		    "irc.de.ircnet.com:6667",
		    "irc.hu.ircnet.com:6667",
		    "irc.it.ircnet.com:6667",
		    "irc.jp.ircnet.com:6667",
		    "irc.nl.ircnet.com:6667",
		    "irc.no.ircnet.com:6667",
		    "irc.pl.ircnet.com:6667",
		    "irc.si.ircnet.com:6667",
		    "irc.se.ircnet.com:6667",
		    "irc.us.ircnet.com:6667"
		]
		tls = false
		encoding = "utf-8"
	    },
	    {
		name = "Undernet"
		addresses = [
		    "irc.undernet.org:6667",
		    "ix1.undernet.org:6667",
		    "ix2.undernet.org:6667",
		    "ashburn.va.us.undernet.org:6667",
		    "bucharest.ro.eu.undernet.org:6667",
		    "budapest.hu.eu.undernet.org:6667",
		    "chicago.il.us.undernet.org:6667"
		]
		tls = false
		encoding = "utf-8"
	    },
	    {
		name = "QuakeNet"
		addresses = [
		    "irc.quakenet.org:6667",
		    "dreamhack.se.quakenet.org:6667",
		    "euroserv.fr.quakenet.org:6667",
		    "irc.ipv6.quakenet.org:6667",
		    "port80a.se.quakenet.org:6667",
		    "port80b.se.quakenet.org:6667",
		    "port80c.se.quakenet.org:6667",
		    "portlane.se.quakenet.org:6667",
		    "servercentral.il.us.quakenet.org:6667",
		    "underworld1.no.quakenet.org:6667"
		]
		tls = false
		encoding = "utf-8"
	    },
	    {
		name = "freenode"
		addresses = [
		    "irc.freenode.net:6697",
		    "chat.freenode.net:6697",
		    "irc.freenode.org:6697",
		    "chat.freenode.org:6697"
		]
		tls = true
		encoding = "utf-8"
	    },
	    {
		name = "localhost"
		addresses = ["localhost:6667", "127.0.0.1:6667"]
		tls = false
	    }

	# TODO: More predefined servers
	)

   Development Specification
	int bus_count = 1;

   Codeing Style
     * Public header c" __XXX_H a1/2ca1/4
						       _
     * aea!a"a1/2c"aa1/4ax'c>>a,aL<degree>aeaei1/4ea,ae a^3c"a^3aL<degree>aei1/4ae^1a3/4?eae3/4cae<paragraph>ac>>a,axc

     * c1/4(C)e?i1/4ac(C)oae 1/4i1/4ae	Tab

     * aee!i1/4

       * ax'ae_>><paragraph>a,ca1/2ae<degree>c-
	 3/4aa a>>Ya,aee!i1/4a<paragraph>a>>a<degree>ae^1ca>>Lc a,a3/4a<degree>ao
	 80 char per line
															 _
       * aae<degree>e?e?ae<paragraph>i1/4a>>e<paragraph>e?e?ao|cc~~a,a,aaae<degree>a1/4a<section>aee!i1/4aae<degree>ae ea ^1e1/2
			_
       * axae?cac~|a,^2a a>>Ya,aee!

       * gtk_widget_class_bind_t_emplate_child()
	 c+/-aoa(R)a"axae?i1/4a a>>Ya,aee!

       * e+/-ae~a.a,aece!i1/4exea"		      case		     a,-
	 i1/4i1/4a^3aae~a.aa.|e+/-ae~a.a^1e'ae^2!aec(C)oae 1/4i1/4a3/4a(R)i1/4

     * a1/2ai1/4

       * e1/4a+/-a+/-e"aeaa1/2ae<degree>aae<degree>a1/2?c"c1/4(C)ai1/4a"a+/-aeaa1/2ae<degree>ai1/4c+/->>aaa,e1/4a+/-c1/4(C)a

       * a(R)ax<section>ai1/4ae<degree>ae(R)c+/->>ai1/4c+/->>ac"ax<section>e(C)1/4a^3<degree>ae^3i1/4aea1/2?c"a"a<degree>a
	 + a,aco?

       * aea>><paragraph>aa"a<degree>ai1/4a>>Ya,aco?ae

     * ae^3"ei1/4
					      _
       * aee+/-aee<section>ei1/4aYe|c~~a,a,aae e|a-			  _
	 c~|ax<section>ai1/4axaYae<paragraph>a1/2?c"ae c^1_~|a.i1/4aae .ae e!a,a3/4e<paragraph>e?
	 80 ac~|i1/4ae+/-aa>>Ya,xac~|e(R)!i1/4i1/4e3/4aeYa a>>Ya,aee!

     * Git    com_it	log:	ae    1/4a1/4a,o    MODULE(TYPE):    DESCRIPTION
       i1/4a1/2aa c"cae"!a(MODULE) aei1/4 All Core Sirc Sui_ Prefs Filter Decora-
       tor  Lib I18n Data Plugin Build Script Doc... i1/4a c"caeaoxc+/->>a(TYPE)
       aei1/4 feat impl change	fix  improve  cleanup  refactor  update  release
       misc...

     * I18Ni1/4aeaeee|a"ceca,a+/-cxocae 		     1/4a1/4aac~|a,^2a,-
       cae<section>a<paragraph>ac~|aa1/2?c"  numbered  argumenti1/4   a^3   %n$X
       a1/2ca1/4

     * Change log: aoaa,oac+/->>

       * Changed:			  _					   _
	 e(R)3/4e(R)!aeae1/2a,cae^1a"i1/4a e1/2a1/4a,|aeYa1/4a(R)^1e(R)ecca,a(R)e|e 'ae

       * Added: ae<degree>accae1/2aeea3/4e<micro>

       * Removed: c<section>>>excae1/2aeea3/4e<micro>

       * Imporved:    ae<section>e1/2aeae1/2aeaec"ae<section>a,cae^1aa>>Ya   bug
	 a?(R)ax

     * aa,ae!>>cY
		      _
       * eaeae<micro>e	(TODO)
			   _
       * ae'ae<degree>c?>>e

       * ae'ae<degree>aeae!L

       * ae'ae<degree> change log

       * ae'ae<degree>e!^1c(R)a,ccae~a.
					      _
       * c!(R)e(R)xaeae!La,caea3/4ca(R)eLeae~a c"
	  _
       * a ^1aeae<degree>c commit ae tag

       * ecYaa,aae!ccaeac>>'aexe

	 * Arch Linux: @SilverRainZ

	 * Gentoo: @xeirrr

	 * ...

   Miscellaneous
   Hot Keys
     * ctrl + j/k: switch chat panel

     * up/down: scroll message list

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

   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.

   Insert Emojis
     Click the emoji button or use shortcuts Ctrl+. or Ctrl+;.
       [image] Emoji button.UNINDENT

       Added in version 1.3.

   Frequently Asked Questions
     Frequently asked questions are listed here, you can visit issue page to see
     more questions that asked by our users.

     * Does Srain support Windows?

     * What is "relay message transform"?

     * Where are the log files?

     * How can I send message which has a slash("/") prefixed?

     * How can I remove my stored password?

     * How can I hide JOIN/PART messages of channel?

     * Why can't I login to my ZNC server?

   Does Srain support Windows?
     Yes, please refer to Windows.

   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, there is a telegram bot named "telegram", the words in  brack-
     ets is the named of the telegram user.
       [image]

     Run  command /pattern add normal-relay \[(?<sender>[^:]+?)\] (?<content>.*)
     and /render telegram normal-relay, you get:
       [image]

     For more details, please refer to commands-pattern and commands-render.

   Where are the log files?
     Refer to Chat Logs.

   How can I send message which has a slash("/") prefixed?
     Please prepend another slash to the message.

     Refer to Syntax.

   How can I remove my stored password?
     Just leave the password entry  empty  and	check  the  "Remember  password"
     checkbox  before connect to server or join channel, the corresponding pass-
     word will be removed.

     Or you can use secret-tool (provided  by  libsecret)  to  manage  all  your
     stored passwords.

   How can I hide JOIN/PART messages of channel?
     So  far,  Srain  has not yet a specialized option for hiding such messages.
     You can use write regular expression to filter them:

	/pattern add filter-join ^\w+ has joined$
	/filter filter-join
	/pattern add filter-part ^\w+ has left: .*$
	/filter filter-part

     NOTE:
	The content of regular expression depends on your language.

   Why can't I login to my ZNC server?
     According ZNC's FAQ, way  2, supply your "user@phone/network:pass" (without
     quotes) in the server password field. Other as usual.

     NOTE:
	Way 1 in ZNC's FAQ requires username field can	be  set  via  connection
	panel, which will be supported by Srain in the future.

   Change Log
     * 2024-04-26 Version 1.7.0

     * 2024-04-26 Version 1.6.1

     * 2024-02-11 Version 1.6.0

     * 2023-03-26 Version 1.5.1

     * 2022-10-02 Version 1.5.0

     * 2022-10-02 Version 1.4.2

     * 2022-10-02 Version 1.3.3

     * 2022-07-30 Version 1.4.1

     * 2022-05-07 Version 1.4.0

     * 2022-02-10 Version 1.3.2

     * 2021-12-18 Version 1.3.1

     * 2021-12-18 Version 1.2.5

     * 2021-09-23 Version 1.3.0

     * 2021-07-18 Version 1.2.4

     * 2021-06-26 Version 1.2.3

     * 2021-05-30 Version 1.2.2

     * 2021-04-02 Version 1.2.1

     * 2021-02-28 Version 1.2.0

     * 2020-10-01 Version 1.1.3

     * 2020-08-10 Version 1.1.2

     * 2020-06-27 Version 1.1.1

     * 2020-05-24 Version 1.1.0

     * 2020-04-11 Version 1.0.2

     * 2020-03-14 Version 1.0.1

     * 2020-02-24 Version 1.0.0

     * 2019-10-07 Version 1.0.0rc9999

     * 2019-06-14 Version 1.0.0rc5

     * 2019-05-13 Version 1.0.0rc4

     * 2019-04-14 Version 1.0.0rc3

     * 2019-01-24 Version 1.0.0rc2

     * 2018-09-10 Version 1.0.0rc1

     * 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

   2024-04-26 Version 1.7.0
     * Changes:

       * Remove GIMPNet (#408)

       * Migrate to libsoup3 (#409)

   2024-04-26 Version 1.6.1
     * Bug fixes:

       * Add developer name to metainfo

   2024-02-11 Version 1.6.0
     * Features:

       * Use  new  app	indicator provided by libayatana-appindicator, which has
	 better compatibility than GtkStatusIcon (#374, #401)

	 NOTE:
	    User can still use GtkStatusIcon if  they  have  trouble  installing
	    libayatana-appindicator, see Installation for more details.

       * Add  conf  item  scroll-on-new-message to automatically scroll down the
	 message list when a new message is incoming even if the application  is
	 inactive (#382)

     * Bug fixes:

       * Let conf item chat.log works as expected (#402)

   2023-03-26 Version 1.5.1
     * Bug fixes:

       * Fix the problem that the URL cannot be opened on MS Windows (#391)

   2022-10-02 Version 1.5.0
     * Features:

       * Able to identify Nordic GTK Theme as dark theme (#372)

       * Activate the corresponding buffer to a response user query (#381)

     * Changes:

       * No  additional sphinx extensions are required to build documentation (-
	 #368)

       * Cleanup deprecated APIs (#369)

       * Suppress error message when connection keeps failing (#386)

       * Enable debian release build , thanks to @tomac4t (#387)

     * Bug fixes:

       * Fix SASL authentication error when connecting to Soju (#371)

   2022-10-02 Version 1.4.2
     * Backport #371

   2022-10-02 Version 1.3.3
     * Backport domain name change, see 2022-05-07 Version 1.4.0

     * Backport #371

   2022-07-30 Version 1.4.1
     * Changes:

       * New website, move domain name from  srain.im  to  srain.silverrainz.me,
	 see Migrate domain name to srain.silverrainz.me

       * Require mesion >= 0.47.0

   2022-05-07 Version 1.4.0
     * Features:

       * Add support for IRCv3 standard-replies (#354), by @progval

       * Add support for SASL EXTERNAL (#352), by @progval

       * Add support for invite-notify (#359), by @progval

       * Add conf item server-visibility for setting default server visiblity (-
	 #361), by @SilverRainZ

       * Add support for server-time (#345), by @progval

       * Add  /clear  command for clearing messages of current buffer (#268), by
	 @SilverRainZ

     * Bug fixes:

       * Fix workflow for  building  MS  Windows  release  artifact  (#360),  by
	 @lifeibiren

     * Changes:

       * Make the buffer menu apply to the right-clicked item instead of the ac-
	 tive buffer (#353), by progval

       * Srain	  now	 accepting    donations    through   OpenCollective   (-
	 https://opencollective.com/srain)

       * Disable workflow for building debian release  artifact  since	we  have
	 offical debian package (99d9d86)

   2022-02-10 Version 1.3.2
     * Features:

       * Add French translation (#351), by @progval

     * Bug fixes:

       * Silence assertion failure on /part command (#348), by @progval

       * Silence  "Unknown capability" warning on trailing whitespace (#349), by
	 @progval

     * Changes:

       * Add tooltips to buttons with no text(#350), by @progval

       * Srain is added to offical repository of Debian, see Debian for details

   2021-12-18 Version 1.3.1
     * Bug fixes:

       * Fix build of macOS (#339), by @SilverRainZ

       * Make channel messages with origin out of channels can be shown  (#336),
	 by @progval

       * Rejoin channels after NICKSERV authentication finishes (#274), by @Sil-
	 verRainZ

   2021-12-18 Version 1.2.5
     * Bug fixes:

       * Backport #336, #274

   2021-09-23 Version 1.3.0
     * Features:

       * Implement  ISUPPORT  parsing + the UTF8ONLY IRCv3 specification (#331),
	 thanks to @progval

       * Add support for RPL_UMODEIS (#331), thanks to @progval

       * Make nick completion case-insensitive (#333), thanks to @progval

       * Add button for inserting emoji (#279)

     * Bug fixes:

       * Fix configuration syntax  errors  caused  by  trailing  commas  (#330),
	 thanks to @progval

   2021-07-18 Version 1.2.4
     * Bug fixes:

       * Fix bug casued by #316 (#319)

       * Fix crach when URL preview async task failed (#322)

   2021-06-26 Version 1.2.3
     * Bug fixes:

       * Eliminate GDK warning (#316)

   2021-05-30 Version 1.2.2
     * Changed:

       * Add libera.chat IRC network (#311)

       * Updated Dutch translation (b6830e9)

     * Bug fixes:

       * Fix windows build (#300, #303)

   2021-04-02 Version 1.2.1
     * Features:

       * Add Ukrainian translations (#292), thanks to @andmizyk

     * Bug fixes:

       * Minor fixes (#290)

   2021-02-28 Version 1.2.0
     * Features:

       * Switch build system from Make to Meson (#266)

       * Add  FreeBSD  implementations for srn_get_executable_{path,dir}, thanks
	 to @wahjava

       * Add /quote command for sending special IRC commands, thanks to @hno  (-
	 #283)

       * Add support for hiding server buffer (#287)

     * Bug fixes:

	  * Fix an use-after-free BUG (#267)

	  * Fix implicit declaration error on some systems, thanks to @lgbaldoni
	    (#270)

   2020-10-01 Version 1.1.3
     * Bug fixes:

	  * Fix an use-after-free BUG (#267)

   2020-08-10 Version 1.1.2
     NOTE:
	This  release  contains  only  improvement for MS Windows, user of other
	platform can ignore it.

     * Features:

       * Binary for MS Windows now can automatically built via	Github	Actions,
	 thanks to @lifeibiren (#259), please refer to Windows for more details

     * Changes:

       * For ease of running on windows, Srain's executable path is added to the
	 search paths of {configuration,data} file. Thanks to @lifeibiren (#259)

   2020-06-27 Version 1.1.1
     * Changes:

       * Improve auto-scroll policy of message list (#255)

     * Bug fixes:

       * Fix TLS certificate verification error on glib-networking 2.64.3 (#251)

       * Fix crash when connecting to an invalid host (#234)

   2020-05-24 Version 1.1.0
     * Features:

       * Support multiple selection of message (#138)

       * Support jump to mentioned message (#243)

       * Nickname will be highlighted when mentioned (#243)

       * Auto build deb package (#238)

     * Changes:

       * Improve fcous control of UI

       * Replace appdata with metainfo (#240)

       * Validate metainfo with appstream-util (#242)

     * Bug fixes:

       * Some implicit declarations fixes (#236)

       * Some typo fixes (#239)

   2020-04-11 Version 1.0.2
     * Features:

       * Add MAN documentation (deaf723)

       * Add  more  predefined IRC networks: DALnet, EFnet, IRCnet, Undernet and
	 QuakeNet (#228)

     * Changes:

       * Build: Allow setting CC variable via environment (#224)

       * Add channel related messages to corresponding buffer as possible (#149)

       * Improve widget focus control (#229)

       * Drop unused icons (6239fe5)

       * Provide clearer error message when connecting (#233)

       * Update gentoo installation documentation Gentoo (ceb5ca3)

     * Bug fixes:

       * Truncate long message before sendisg (#227)

       * Deal with invalid UTF-8 string (50e7757)

       * Fix incorrect user number of channel user list (#230)

       * Fix incorrect icon install path (9f07380)

   2020-03-14 Version 1.0.1
     * Features:

       * Auto rename to original nick when ghost quit (#198)

       * Add hackint IRC network (#201), thanks to @kpcyrd

       * Add Dutch translation (#215), thanks to @Vistaus

       * Add two FAQs to documentation (#217)

       * Add debian pack script (contrib#1), thanks to @tomac4t.   Please  refer
	 to Debian to build a deb package

     * Changes:

       * Move  continuous  integration from travis CI to github actions (#203, -
	 #204), thanks to @tomac4t

       * Make header bar buttons repect default belief (#205, #218)

     * Bug fixes:

       * Fix case sensitivity issue for IRC messages (#202), thanks to @hhirtz

       * Fix invalid changelog section of appdata file (#214)

       * Fix missing dependences in documentation (#216), thanks to @avoidr

   2020-02-24 Version 1.0.0
     * Changes:

       * Some code cleanup

       * Update Quick Start documentation

     * Bug fixes:

       * Allow Srain runs without dbus secrets service (#195)

       * Fix nick generation logical (39ced08)

     NOTE:
	1.0.0 is the first stable release of Srain, enjoy!

   2019-10-07 Version 1.0.0rc9999
     * Features:

       * Activate corresponding buffer when channel URL is clicked (#190)

       * Command alias support (#188)

       * List predefined servers via command, see /server for details (656f3e5)

     * Changes:

       * Replace all icons with freedesktop standard icons (#120)

     * Bug fixes:

       * Fix wrong usage of GError (#179)

       * Fix image preview problem when image is hard to detect type (#163)

       * Fix memory leak of pattern filter (9464a9e)

       * Fix the breaking "abort sending" icon (#144)

       * Fix the invite menu of user (9f98cbb)

   2019-06-14 Version 1.0.0rc5
     * Added:

	  * Regular expression pattern management using /pattern command

	  * Add command /filter & /unfilter for filtering message via pattern

	  * Add command /render & /unrender for rendering message via pattern

     * Changed:

	  * Refactor detector module and rename it to render

	  * Refactor filter module

	  * Change project description

     * Removed:

	  * Drop command /rignore & /unrignore

	  * Drop command /relay & /unrelay

   2019-05-13 Version 1.0.0rc4
     * Added:

	  * New dependency libsecret

	  * Add password storage support

	  * Add command line options --no-auto, used to require Srain not to au-
	    tomatically connect to servers

	  * Add russian translation, thanks to @tim77

	  * Allow user send slash(/) prefixed message

     * Removed:

       * Drop all password fields in configuration file

     * Changed:

       * Enable CSD(Client-Side Decoration) by default

       * Update chinese translation

   2019-04-14 Version 1.0.0rc3
   2019-01-24 Version 1.0.0rc2
   2018-09-10 Version 1.0.0rc1
   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,  VERSION, USERINFO messages. DCC message is not yet sup-
	 ported. Use command /ctcp for sending a CTCP request

       * Login method support, you can specify it by configuration  file  option
	 server.login_method:

	    * sasl_plain:   SASL   PLAIN   authentication   support,   will  use
	      server.user.username as identity, and  use  server.user.passwd  as
	      password

       * Added	documentation Support Tables used to show Srain's features, ins-
	 pried 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 Fedora for details,
	 thanks to @cpba

     * Improved:

       * Fixed a logical error in IRC message parser: all parameters  are  equal
	 whether matched by <middle> or <trailing>, 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: ci-status

   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 option 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)

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

   2017-09-12 Version 0.06.2
     * Added:

       * mIRC  color  support, can be disabled via setting render_mirc_color op-
	 tion 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

   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 in-
	 crease by 5 second

     * Improved:

       * Fixed the crash when QUIT

       * Fixed: avoid sending empty password

       * More empty parameters checks

       * Imporve server connection status control

   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

       * 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 ex-
	 pression, 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:
	 :del:`https://srain.im`
	  (expired, use https://srain.silverrainz.me)

       * Srain help documentation is available at:
	 :del:`https://doc.srain.im`
	  (expired, use https://srain.silverrainz.me)

     * 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

   2016-09-19 Version 0.05.1
     * Create missing directory: $XDG_CACHE_HOME/srain/avatars

   2016-08-27 Version 0.05
     * Changed:

       * Port to libircclient

	 * SSL connection support

	 * Server password support

	 * Channel password support

     * 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

   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.

   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.

   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.

   Support Tables
     * Basic IRC Client Support

     * Client-to-Client Protocol (CTCP) Support

     * IRCv3 Client Support

   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 	     | Unavailable |
		       +---------------------+-------------+

   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     |
			      +------------+---------+

   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     | Yes			  |
		 +-------------------+----------------------------+
		 | Monitor	     | No			  |
		 +-------------------+----------------------------+
		 | multi-prefix      | No			  |
		 +-------------------+----------------------------+
		 | SASL v3.1	     | PLAIN,ECDSA-NIST256P-CHAL- |
		 |		     | LENGE			  |
		 +-------------------+----------------------------+
		 | SASL v3.2	     | PLAIN,ECDSA-NIST256P-CHAL- |
		 |		     | LENGE			  |
		 +-------------------+----------------------------+
		 | server-time	     | No			  |
		 +-------------------+----------------------------+
		 | starttls	     | No			  |
		 +-------------------+----------------------------+
		 | sts		     | No			  |
		 +-------------------+----------------------------+
		 | userhost-in-names | No			  |
		 +-------------------+----------------------------+

AUTHOR
     Shengyu Zhang

COPYRIGHT
     2024, Shengyu Zhang

1.7.0				  Jul 31, 2026				SRAIN(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=srain&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help