1SRAIN(1) Srain SRAIN(1)
2
3
4
6 srain - Srain Documentation
7
8 Welcome to Srain documentation!
9
10 Latest version: version-latest.
11
12 The source code of this documentation is hosted on GitHub. If you
13 found any mistake, feel free to file issue or pull request.
14
16 Srain
17 ci-status doc-status channel
18
19 Modern IRC client written in GTK.
20
21 Home | Documentation | Source code [image]
22
23 Packaging Status
24 pkgstat
25
26 Features
27 • Fully open source
28
29 • RFC {1459,2812} compatible
30
31 • Partial IRCv3 support
32
33 • Multi-platform support (Linux, Windows, macOS and BSD)
34
35 • Act like modern IM client
36
37 • Graphical user interface
38
39 • Convenient connection panel
40
41 • Interactive channel search
42
43 • Forward message in one click
44
45 • URL preview
46
47 • Desktop notificaion
48
49 • Special optimization for bridge/relay bot
50
51 • Act like geek IRC client
52
53 • Anything can be done via commands
54
55 • Fine-grained configuration with hot update support
56
57 • Regex based message render and filter mechanisms
58
59 • IPC based plugin system (TODO)
60
61 Need Help?
62 Frequently Asked Questions may be helpful.
63
64 Feel free to contact us if you have any question about Srain.
65
66 • IRC Channel: #srain @ freenode
67
68 • Github: file an issue Here
69
70 License
71 GNU General Public License Version 3
72
73 Quick Start
74 • Start Srain
75
76 • Connect to IRC server
77
78 • Predefined Server
79
80 • Custom Server
81
82 • Using Command
83
84 • Join Channel
85
86 • Directly Join
87
88 • Search Channel
89
90 • Using Command
91
92 NOTE:
93 For your information, the following screenshots are taken under
94 GNOME 3.34.4 with Wayland backed with Arc GTK theme and Breeze icon
95 theme.
96
97 Start Srain
98 After the install of Srain, you will find Srain in your applications
99 list, if not, just type srain in your shell to run it. Then you will
100 see Srain's initial interface.
101 [image]
102
103 Connect to IRC server
104 freenode is a famous IRC network, the official channel of Srain #srain
105 is also hosted on it. Let's start by connecting to freenode.
106
107 Predefined Server
108 Srain has a predefined list of commonly used IRC servers, freenode is
109 one of it. If you want to add server into this list, refer to config.
110
111 Click the connection button on the Srain header bar, select the page
112 "Quick Mode", select the item "freenode" from candidate box with label
113 "Server", enter your nickname, then click the "Connect" button:
114 [image]
115
116 If everything goes well, Srain should connected to freenode, then your
117 would see some message from freenode's server:
118 [image]
119
120 Custom Server
121 While the server your want to connect to is not listed in the prede‐
122 fined list, switch to the page "Advanced Mode", enter the hostname,
123 port, and etc.
124
125 NOTE:
126
127 • If the port is a TLS port, make sure that the option "Use secure
128 connection" is checked.
129
130 • If the server's certificate is untrusted and you insist on contin‐
131 uing, check the option "Do not verify certificate".
132
133 Then click the "Connect" button:
134 [image]
135
136 Using Command
137 Refer to commands-server and commands-connect.
138
139 If you want to automatically execute commands at each time Srain
140 starts, please refer to commands-playground.
141
142 Join Channel
143 After connecting to freenode, now let's try to join #srain, the offi‐
144 cial channel of Srain.
145
146 Directly Join
147 While your has a clear channel to join, such as #srain, just click the
148 join button, select the page "Join Channel", enter the channel name in
149 the input entry with label "Channel", then click the "Join" button:
150 [image]
151
152 Now you should joined the channel:
153 [image]
154
155 Search Channel
156 While you don't know the exact name of the channel, click the join but‐
157 ton, switch to page "Search Channel", click the button with "refresh"
158 icon, Srain should start receiving channel list from server.
159
160 Then you can enter the keyword or specify the filter conditions to
161 search channel. For example we enter "#s", select the channel you want
162 to join from channe list, then click "Join" button to join it.
163 [image]
164
165 NOTE:
166 If the channel requires a join password, try double click the row of
167 channel.
168
169 Using Command
170 Refer to commands-join.
171
172 Installation
173 Srain is available on GNU/Linux, Windows, macOS and BSD.
174
175 • Dependencies
176
177 • Building
178
179 • Play with Meson
180
181 • Makefile Helper
182
183 • Distribution Packages
184
185 • GNU/Linux
186
187 • Arch Linux
188
189 • Debian
190
191 • Pre-built package
192
193 • Build byself
194
195 • Fedora
196
197 • Flatpak
198
199 • Gentoo
200
201 • openSUSE
202
203 • Windows
204
205 • Pre-built package
206
207 • Build byself
208
209 • macOS
210
211 • BSD
212
213 • OpenBSD
214
215 Dependencies
216 ┌────────────────┬─────────────────────┬──────────┐
217 │Name │ Notes │ Version │
218 ├────────────────┼─────────────────────┼──────────┤
219 │meson │ Only for Building │ > 0.45.0 │
220 ├────────────────┼─────────────────────┼──────────┤
221 │make │ Optional, only for │ │
222 │ │ development │ │
223 ├────────────────┼─────────────────────┼──────────┤
224 │coreutils │ Only for building │ │
225 ├────────────────┼─────────────────────┼──────────┤
226 │gcc │ Only for building │ │
227 ├────────────────┼─────────────────────┼──────────┤
228 │pkg-config │ Only for building │ │
229 ├────────────────┼─────────────────────┼──────────┤
230 │gettext │ Only for building │ │
231 ├────────────────┼─────────────────────┼──────────┤
232 │glib2 │ │ │
233 ├────────────────┼─────────────────────┼──────────┤
234 │glib-networking │ Optional, for TLS │ │
235 │ │ connection support │ │
236 ├────────────────┼─────────────────────┼──────────┤
237 │gtk+3 │ │ >= 3.18 │
238 ├────────────────┼─────────────────────┼──────────┤
239 │libsoup │ │ │
240 ├────────────────┼─────────────────────┼──────────┤
241 │libconfig │ │ >= 1.5 │
242 ├────────────────┼─────────────────────┼──────────┤
243 │libsecret │ │ │
244 ├────────────────┼─────────────────────┼──────────┤
245 │openssl │ │ │
246 ├────────────────┼─────────────────────┼──────────┤
247 │python-sphinx │ Optional, for │ │
248 │ │ building documenta‐ │ │
249 │ │ tion │ │
250 └────────────────┴─────────────────────┴──────────┘
251
252 Building
253 You should install the aboved Dependencies on your platform before the
254 following steps.
255
256 Firstly, download source code of srain, you can get source code of lat‐
257 est release:
258
259 $ wget https://github.com/SrainApp/srain/archive/1.2.0.tar.gz
260 $ tar -xvzf 1.2.0.tar.gz
261 $ cd srain-1.2.0
262
263 Or get git version:
264
265 $ git clone https://github.com/SrainApp/srain.git
266 $ cd srain
267
268 Play with Meson
269 Srain use Meson with ninja backend as its build system. You can build
270 it via the following commands:
271
272 $ meson setup builddir
273 $ cd builddir
274 $ ninja
275
276 Install(root privileges required):
277
278 $ cd builddir
279 # ninja install
280
281 HTML documentation and manpage are built and installed by default, if
282 you don't need them, just set meson option doc_builders to an empty ar‐
283 ray when setup:
284
285 $ meson setup -Ddoc_builders=[] builddir
286
287 Makefile Helper
288 We also provide a simple Makefile helper to simplify meson commands.
289 It is convenient for development.
290
291 $ make # Build srain
292 $ make build # Same as above
293 $ make install # Install srain to prefix under project root
294 $ make run # Run srain with isolated $HOME and XDG Directory
295 $ make debug # Same as `make run`, but with GDB attached
296 $ make inspect # Same as `make run`, but with GtkInspector
297 $ make clean # Remove all compilation and installation result
298 $ make doc # View installed HTML documentation
299
300 Distribution Packages
301 GNU/Linux
302 Arch Linux
303 Packages srain and srain-git (git version) are available on AUR, it is
304 quite easy to install using AUR helper(yay as an example):
305
306 $ yay -S srain
307 $ yay -S srain-git # git version
308
309 If you are the user of Arch Linux CN Repository, try:
310
311 # pacman -S archlinuxcn/srain
312 # pacman -S archlinuxcn/srain-git # git version
313
314 Debian
315 There is no srain package in the official repository yet.
316
317 Pre-built package
318 We provide pre-built deb package that you can get it from Github re‐
319 lease page.
320
321 Build byself
322 Copy the debian folder on srain-contrib to srain folder. Then type fol‐
323 lowing command on your terminal:
324
325 $ dpkg-buildpackage -b -us -uc
326
327 Note that the dependencies mentioned above also should be installed.
328 The details could be found on debian/crontrol file.
329
330 Then install the package (replace package name with the name of your
331 package):
332
333 $ sudo apt-get install -f ../srain_1.2.0-1_amd64.deb
334
335 Fedora
336 Srain now in offical repository of fedora, use dnf to install it.
337
338 # dnf install srain
339
340 Flatpak
341
342
343 cpba is maintaining Flatpak manifest for Srain and The built package is
344 available on Flathub, just execute the following commands to install if
345 you already have flatpak installed:
346
347 $ flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
348 $ flatpak install flathub im.srain.Srain
349
350 Gentoo
351 Please refers to gentoo portage overlays.
352
353 openSUSE
354 alois is maintaining openSUSE package for Srain, following this link to
355 install it.
356
357 Windows
358 Srain requires Windows 7 or later.
359
360 Pre-built package
361 After version-1.1.2, we provide Windows portable binary that you can
362 get it from Github release page.
363
364 Build byself
365 If you want to build Srain on Windows youself, you should use the
366 toolchains provided by MSYS2 project.
367
368 Firstly install MSYS2, then open a MSYS2 shell, install the basic build
369 tools:
370
371 $ pacman -S base-devel
372 $ pacman -S mingw-w64-i686-toolchain # For 32-bit Windows
373 $ pacman -S mingw-w64-x86_64-toolchain # For 64-bit Windows
374
375 Then download the package script from MinGW PKGBUILD for Srain, run the
376 following commands at the directory of PKGBUILD:
377
378 $ MINGW_INSTALLS=mingw32 makepkg-mingw -fsi # For 32-bit Windows
379 $ MINGW_INSTALLS=mingw64 makepkg-mingw -fsi # For 64-bit Windows
380
381 If everything goes well, Srain is installed under your MinGW prefix.
382
383 NOTE:
384 If you suffer the "error while loading shared libraries: xxxx.dll:
385 cannot open shared object file: No such file or directory" problem
386 when running, please run it in cmd but not msys2 shell, and it will
387 show you real missing library. [1]
388
389 [1] https://github.com/Alexpux/MINGW-packages/issues/3939#issuecomment-397988379
390
391 macOS
392 WARNING:
393 macOS support of Srain is still experimental.
394
395 There is not a distribution package or package script for Srain on
396 macOS, you should build Srain by yourself.
397
398 Firstly install Homebrew, run the following commands to install depen‐
399 dencies:
400
401 $ brew install coreutils gcc pkg-config # building
402 $ brew install gettext glib-networking gtk+3 libsoup libconfig
403
404 Then follow the steps in Building.
405
406 BSD
407 OpenBSD
408 Please refers to OpenBSD Ports.
409
410 Commands Manual
411 • Playground
412
413 • Syntax
414
415 • Available Commands
416
417 • /reload
418
419 • /server
420
421 • /connect
422
423 • /ignore & /unignore
424
425 • /query & /unquery
426
427 • /join
428
429 • /part
430
431 • /quit
432
433 • /topic
434
435 • /msg
436
437 • /me
438
439 • /nick
440
441 • /whois
442
443 • /invite
444
445 • /kick
446
447 • /mode
448
449 • /ctcp
450
451 • /pattern
452
453 • /filter & /unfilter
454
455 • /render & /unrender
456
457 • /quote
458
459 • Obsoleted Commands
460
461 • /rignore & /unrignore
462
463 • /relay & /unrelay
464
465 Playground
466 User can run commands in two ways, the one way is typing them into the
467 input entry of chat buffer.
468
469 The another way is writing the commands to the server.auto-run and
470 chat.auto-run configuration items. For more details, please refer to
471 config.
472
473 Syntax
474 A command is a line of string that has the following format, different
475 elements are separated by whitespace:
476
477 /<name|alias> [subcommand] [<option> [value]]... [argument]...
478
479 User should use name to invoke a command. The command's name starts
480 with a slash / and doesn't contain any whitespace, such as: /join.
481 Some commands have alias that can be used instead of name, for example,
482 user can use /j instead of /join.
483
484 NOTE:
485 When you want to send a message starts with a slash, please prepend
486 another slash to the message. For example, you want to send "/this
487 is a slash prefixed message", you need to type "//this is a slash
488 prefixed message".
489
490 A subcommand is a instruction behind the command name, it is optional.
491
492 An option, as its name, is optional too, starts with a hyphen - and may
493 has a value.
494
495 option is often used as the switch of a flag or a way to change some
496 default values. For example, The command /connect -tls -port 6697, op‐
497 tion -tls is just a flag that tells srain use secure connections with
498 TLS. And -port requires a value, if -port is not specified, program
499 will use the default value 6667. Check /connect for more details.
500
501 If a value starts with a hyphen - or contains whitespaces, it should be
502 enclosed by single quotation mark '.
503
504 NOTE:
505 All option should appear behind subcommand (If any), and before ar‐
506 gument.
507
508 An argument is similar to value, but commonly it doesn't have a default
509 value so it can not be omitted (actually it depends on the implement of
510 the command). If the first argument starts with a hyphen -, it should
511 be enclosed by single quotation mark '. If an argument contains white‐
512 spaces, it should be quoted too. Specially, the last argument can con‐
513 tain whitespace without quoted.
514
515 If you want to use a single quotation mark in a quoted text, use back‐
516 slash \ to escape it. For backslash itself, use double backslash \\.
517
518 Available Commands
519 /reload
520 Usage:
521
522 /reload
523
524 Reload user configuration.
525
526 /server
527 Usage:
528
529 /server [connect|disconnect|list] <name>
530
531 Predefined IRC server management.
532
533 Sub commands:
534
535 • connect: connect to specified predefined server
536
537 • disconnect: disconnect from specified predefined server
538
539 • list: list all predefined servers
540
541 Arguments:
542
543 • name: unique name of server
544
545 /connect
546 Usage:
547
548 /connect [-port <port>] [-pwd <password>] [-tls] [-tls-noverify]
549 [-user <username>] [-real <realname>] <host> <nick>
550
551 Create a IRC server and connect to it immediately.
552
553 Options:
554
555 • -port: server port, default 6667
556
557 • -pwd: connection password, default empty
558
559 • -tls: use secure connections with TLS
560
561 • -tls-noverify: use TLS connection without certificate verification
562
563 • -user: specify username, default same as nickname
564
565 • -real: specify realname, default same as nickname
566
567 Arguments:
568
569 • host: server host
570
571 • nick: specify nickname
572
573 Example:
574
575 /connect -real 'I am srainbot' -tls -port 6697 chat.freenode.org srainbot
576 /connect 127.0.0.1 srainbot
577
578 /ignore & /unignore
579 Usage:
580
581 /ignore [-cur] <nick>
582 /unignore [-cur] <nick>
583
584 Ignore/unignore somebody's message.
585
586 Options:
587
588 • -cur: only ignore in current chat
589
590 /query & /unquery
591 Usage:
592
593 /query|q <nick>
594 /unquery [nick]
595
596 Start/stop private chat with somebody. For /unquery , If no nick is
597 specified, it stops the current private chat.
598
599 /join
600 Usage:
601
602 /join|j <channel>[,<channel>]... [<passwd>[,<passwd>]]...
603
604 Join specified channel(s), channels are separated by commas ,.
605
606 Example:
607
608 /join #archinux-cn,#gzlug,#linuxba
609 /join #channel1,#channe2 passwd1
610
611 /part
612 Usage:
613
614 /part|leave [<channel>[,<channel>]]... [<reason>]
615
616 Leave specified channel(s) with optional reason, channels are separated
617 by commas ,. If no channel is specified, it leaves the current channel.
618
619 Example:
620
621 /part #archinux-cn Zzz...
622 /part #archlinux-cn,#tuna
623 /part
624
625 /quit
626 Usage:
627
628 /quit [reason]
629
630 Quit current server with optional reason.
631
632 /topic
633 Usage:
634
635 /topic [-rm|<topic>]
636
637 Set the current channel's topic. If no topic specified, it just dis‐
638 plays the current channel's topic.
639
640 • -rm: remove current channel's topic
641
642 Example:
643
644 # Just view the topic
645 /topic
646 # Set the topic to "Welcome to Srain!"
647 /topic Welcome to Srain!
648 # Clear the topic
649 /topic -rm
650
651 /msg
652 Usage:
653
654 /msg|m <target> <message>
655
656 Send message to a target, the target can be channel or somebody's nick.
657 If you want to send a message to channel, you should /join it first.
658
659 /me
660 Usage:
661
662 /me <message>
663
664 Send an action message to the current target.
665
666 /nick
667 Usage:
668
669 /nick <new_nick>
670
671 Change your nickname.
672
673 /whois
674 Usage:
675
676 /whois <nick>
677
678 Get somebody's information on the server.
679
680 /invite
681 Usage:
682
683 /invite <nick> [channel]
684
685 Invite somebody to join a channel. If no channel is specified, it falls
686 back to current channel.
687
688 /kick
689 Usage:
690
691 /kick <nick> [channel] [reason]
692
693 Kick somebody from a channel, with optional reason. If no channel is
694 specified, it falls back to current channel.
695
696 /mode
697 Usage:
698
699 /mode <target> <mode>
700
701 Change target 's mode.
702
703 /ctcp
704 Usage:
705
706 /ctcp <target> <command> [message]
707
708 Send a CTCP request to target. The commonly used commands are: CLI‐
709 ENTINFO, FINGER, PING, SOURCE, TIME, VERSION, USERINFO. For the detail
710 of each command, please refer to https://modern.ircdocs.horse/ctcp.html
711 .
712
713 If you send a CTCP PING request without message, you will get the la‐
714 tency between the target.
715
716 NOTE:
717 DCC is not yet supported.
718
719 /pattern
720 Usage:
721
722 /pattern add <name> <pattern>
723 /pattern rm <name>
724 /pattern list
725
726 Regular expression pattern management. The added pattern can be used
727 elsewhere in the application, such as /filter & /unfilter and /render &
728 /unrender.
729
730 Sub commands:
731
732 • add: add a pattern with given name
733
734 • rm: remove a pattern with given name
735
736 • list: list all availables patterns
737
738 Arguments:
739
740 • name: unique name of pattern
741
742 • pattern: a valid Perl-compatible Regular Expression
743
744 /filter & /unfilter
745 Usage:
746
747 /filter [-cur] <pattern>
748 /unfilter [-cur] <pattern>
749
750 Filter message whose content matches specified pattern.
751
752 Options:
753
754 • -cur: only ignore in current chat
755
756 Arguments:
757
758 • pattern: name of regular expression pattern which is managed by
759 /pattern
760
761 Example:
762
763 This filter message that content is "Why GTK and not Qt?":
764
765 /pattern add troll ^Why GTK and not Qt\?$
766 /filter troll
767
768 To cancel the filter of these kind of message, use:
769
770 /unfilter troll
771
772 NOTE:
773 Pattern NO NEED to consider the case where the mIRC color code is
774 included in the message.
775
776 /render & /unrender
777 Usage:
778
779 /render [-cur] <nick> <pattern>
780 /unrender [-cur] <nick> <pattern>
781
782 Render message of specific user via specific pattern.
783
784 The given pattern should contains specific Named Subpatterns used for
785 capturing message fragment from original message content and become
786 part of rendered message.
787
788 There are list of available named subpatterns:
789
790 • (?<sender>): match name of sender, once this subpatterns is matched,
791 the original sender will be displayed as message remark
792
793 • (?<content>): match content of rendered message
794
795 • (?<time>): match time of rendered message
796
797 Arguments:
798
799 • nick: nickname of user
800
801 • pattern: name of regular expression pattern which is managed by
802 /pattern
803
804 Options:
805
806 • -cur: only effects the user under current chat
807
808 Example:
809
810 We assume that there is a IRC bot named "xmppbot". It forwards message
811 between XMPP and IRC. On IRC side, the forwarded message looks like
812 "<xmppbot> [xmpp_user] xmpp_message", you can render it to a more
813 easy-to-read format via the following commands:
814
815 /pattern add xmpp \[(?<sender>[^:]+?)\] (?<content>.*)
816 /render xmppbot xmpp
817
818 The forwarded meessage will look like "<xmpp_user> xmpp_message", and
819 the original message sender "xmppbot" will be displayed as message re‐
820 mark. Please refer to faq-relay-message-transform see its effect.
821
822 NOTE:
823 Pattern SHOULD consider the case where the mIRC color code is in‐
824 cluded in the message.
825
826 /quote
827 Usage:
828
829 /quote <raw message>
830
831 For sending special IRC commands.
832
833 New in version 1.2.0.
834
835
836 Obsoleted Commands
837 /rignore & /unrignore
838 This command has been dropped since version-1.0.0rc5, please use
839 /filter & /unfilter instead.
840
841 /relay & /unrelay
842 This command has been dropped since version-1.0.0rc5, please use
843 /render & /unrender instead.
844
845 Configuration Manual
846 Srain uses Libconfig to process configuration file.
847
848 • Configuration File
849
850 • Syntax
851
852 • Priority and Fallback
853
854 • All Configurable Items
855
856 Configuration File
857 The path of system wide configuration file builtin.cfg depends on the
858 compile flag --sysconfdir, default to be /etc/srain.
859
860 The path of user wide configuration file srain.cfg is $XDG_CON‐
861 FIG_HOME/srain, usually it is ~/.config/srain
862 (~/.var/app/im.srain.Srain for flatpak installs).
863
864 The difference between system wide and user wide configuration file is
865 the priority, The user wide configuration always overwrite the one in
866 system wide configuration. For more details about priority, refer to
867 Priority and Fallback.
868
869 Syntax
870 For the syntax of configuration file, please refer to Libconfig's docu‐
871 mentation: Configuration Files
872
873 For an example configuration, refer to All Configurable Items.
874
875 Priority and Fallback
876 A group is a collection of configurations. The same group in different
877 place have different priority.
878
879 server: { # A top level ``server`` group
880
881 # ...
882
883 user = {}
884 default-messages = {}
885 irc = {}
886 chat = { } # A ``chat`` group directly in ``server``
887
888 chat-list = (
889 { }, # A ``chat`` group in ``chat-list``
890 # ...
891 )
892 }
893
894 server-list: (
895 { }, # A ``server`` group in ``server-list``
896 # ...
897 )
898
899 For example, A server group contains the information(not all) of con‐
900 nection to IRC servers. server group can appear at the top level of
901 configuration file, or be an element of server-list list with a unique
902 name. The top level server is often used to specify the global configu‐
903 ration, and server-list is used to specify specified IRC servers.
904
905 The configuration in server-list can overwrite the top level server,
906 and if an option is not specified in server-list, It will fallback to
907 server.
908
909 Another similar group is chat, chat contains configuration of chat
910 panel, such as whether to show topic, whether to save chat log and etc.
911 Every server group can contain a chat group and a chat-list list. Ele‐
912 ments in chat-list are also identified with an unique name.
913
914 As same as the relationship between top level server and server-list,
915 chat-list is used to specify a specified chat and has higher priority.
916
917 As mentioned above, The priority of user configuration is always higher
918 than system's, so we can get the priority sorting of server and chat
919 group:
920
921 server-list(user) >
922 top level server(user) >
923 server-list(system) >
924 top level server(system)
925
926 chat-list in server-list(user) >
927 chat in server-list(user) >
928 chat-list in top level server(user) >
929 chat in top level server(user) >
930 chat-list in server-list(system) >
931 chat in server-list(system) >
932 chat-list in top level server(system) >
933 chat in top level server(system)
934
935 All Configurable Items
936 Here is the default system wide configuration file used by Srain, all
937 configurable items are already listed here. you can make a copy as your
938 user configuration file, but note:
939
940 1. User configuration always overwrite system's, if you don't know what
941 does this option means, please remove it from your user configura‐
942 tion rather than overwrite it
943
944 2. The server's name in server-list is unique, please remoeve the du‐
945 plicated server in server-list before using
946
947 # Srain built-in configuration file
948 # Application configuration.
949
950 version = "1.0.0rc5" # String; Every configuration file should have a
951 # version, altough it is not used yet
952 # id = "im.srain.Srain" # The identifier for Srain
953 theme = "default-bubble" # String; Theme; Available values: default
954 csd = true # Bool; Whether enable Client-Side Decoration
955 send-on-ctrl-enter = false # Bool; Send messsage on CTRL+Enter pressed
956 exit-on-close = false # Bool; Exit program on main window closed
957 auto-connect = [] # String array; Servers that are auto connected
958 # after startup
959
960 # If you want to report/fix a bug, terminal log will be helpful.
961 log =
962 {
963 prompt-color = true # Bool; Colorful output
964 prompt-file = false # Bool; Display the filename of the file which log
965 # statement is located
966 prompt-function = true # Bool; As aboved, function name
967 prompt-line = false # Bool; As aboved, line number
968
969 # String array; Specify the log level of a group of files
970 debug-targets = [] # Files with debug log level
971 info-targets = [] # Files with information log level
972 warn-targets = [""] # Files with warning log level
973 error-targets = [] # Files with error" log level
974 }
975
976 # Global IRC Server configuration, this group can also appear in server-list.
977 server =
978 {
979 auto-join = [] # String array; Chats that are auto joined after server
980 # is created
981 auto-run = [] # String array; Commands that are auto run after server
982 # is created
983
984 user =
985 {
986 nickname = "SrainUser"
987 username = "Srain"
988 realname = "Can you can a can?"
989
990 login:
991 {
992 method = "none" # String; Login method; Available values:
993 # - none: No login method, default value
994 # - nickserv: Login with NICKSERV command
995 # - msg-nickserv: Login with /msg NickServ identify
996 # - sasl-plain: Login with SASL PLAIN mechanism
997 # - sasl-ecdsa: Login with SASL
998 # ECDSA-NIST256P-CHALLENGE mechanism
999
1000 # For method "sasl-ecdsa"
1001 # certificate = "" # String; Path to login certificate file
1002 }
1003
1004 # Default messages for performing specified action
1005 part-message = "Leaving."
1006 kick-message = "Kick."
1007 away-message = "Away from keyboard."
1008 quit-message = "El Psy Congroo."
1009 }
1010
1011 # Chat configuration, this group can also appear in chat-list.
1012 chat =
1013 {
1014 log = true # Bool; Persistent chat log to storage
1015 notify = true # Bool; Send notification when you are
1016 # mentioned by others or receiving any
1017 # ERROR message
1018 notify-all = true # Bool; Send notification when receiving
1019 # any PRIVMSG/ACTION/NOTIFY/ERROR message
1020 show-topic = true # Bool; Show topic
1021 show-avatar = false # Bool; Show user avater
1022 show-user-list = true # Bool; Show user list
1023 render-mirc-color = true # Bool; Render mirc color
1024 nick-completion-suffix = ":" # String; Suffix of completed nick name
1025 # e.g. "nick: msg"
1026
1027 preview-url = true # Bool; Show previewer for every URL
1028 auto-preview-url = true # Bool; Automatically preview supported URL
1029
1030 auto-run = [] # String array; Commands that are auto run after
1031 # chat is created
1032 }
1033
1034 # Specified chat configuration, every element in list should have a unique
1035 # ``name``.
1036 chat-list =
1037 (
1038 {
1039 # ``name`` is necessary for a ``chat`` group in ``chat-list``.
1040 name = "#srain"
1041 show-topic = true
1042 }
1043 )
1044 }
1045
1046 # Specified server configuration, every element in list should have a unique
1047 # "name".
1048 server-list =
1049 (
1050 {
1051 # ``name``, ``addresses`` are necessary for a ``server`` group
1052 # in ``server-list``, otherwise you can not connect to it.
1053 name = "Libera Chat" # String; The unique name of server
1054 addresses = [
1055 "irc.libera.chat:6697",
1056 ] # String array; Addresses of IRC server,
1057 # each address follows the format of
1058 # <host>[:<port>]. The port can be omitted,
1059 # default 6667 for non-TLS and 6697 for TLS
1060 tls = true # Bool; Connect with TLS encryption
1061 # tls-noverify = false # Bool; Connect with TLS encryption but without
1062 # certificate verification, only used while
1063 # connecting to a self-signed certificate
1064 # verified server
1065 encoding = "utf-8" # String; Encoding of IRC server, to get
1066 # all available value of encoding, check the
1067 # output of ``iconv --list``
1068 # ipv6 = false # Use IPv6 connection, not yet supported
1069 },
1070 {
1071 name = "GIMPNet"
1072 addresses = ["irc.gimp.org:6697", "irc.gnome.org:6697"]
1073 tls = true
1074 encoding = "utf-8"
1075 },
1076 {
1077 name = "OFTC"
1078 addresses = ["irc.oftc.net:6697"]
1079 tls = true
1080 encoding = "utf-8"
1081 },
1082 {
1083 name = "hackint"
1084 addresses = ["irc.hackint.org:6697"]
1085 tls = true
1086 encoding = "utf-8"
1087 },
1088 {
1089 name = "Rizon"
1090 addresses = ["irc.rizon.net:6697"]
1091
1092 tls = true
1093 encoding = "utf-8"
1094 },
1095 {
1096 name = "DALnet"
1097 addresses = [
1098 "irc.dal.net:6697",
1099 "agility.nl.eu.dal.net:6697",
1100 "bifrost.ca.us.dal.net:6697",
1101 "bitcoin.uk.eu.dal.net:6697",
1102 "choopa.nj.us.dal.net:6697",
1103 "diamond.hub.dal.net:6697",
1104 "fidelity.tx.us.dal.net:6697",
1105 "foxtrot.hub.dal.net:6697",
1106 "halcyon.il.us.dal.net:6697",
1107 "hash.ix.nl.dal.net:6697",
1108 "hoon.ix.au.dal.net:6697",
1109 "istana.ix.sg.dal.net:6697",
1110 "jingo.ix.us.dal.net:6697",
1111 "karsk.ix.eu.dal.net:6697",
1112 "kiwi.ix.nz.dal.net:6697",
1113 "koala.vc.au.dal.net:6697",
1114 "laud.ix.us.dal.net:6697",
1115 "loyalty.ix.us.dal.net:6697",
1116 "merlin.hub.dal.net:6697",
1117 "midnight.hub.dal.net:6697",
1118 "ninja.hub.dal.net:6697",
1119 "nonstop.ix.me.dal.net:6697",
1120 "oi.ix.au.dal.net:6697",
1121 "oper-e.dal.net:6697",
1122 "paradigm.hub.dal.net:6697",
1123 "powertech.no.eu.dal.net:6697",
1124 "punch.wa.us.dal.net:6697",
1125 "rangers.ix.us.dal.net:6697",
1126 "redemption.ix.us.dal.net:6697",
1127 "renew.hub.dal.net:6697",
1128 "smurf.hub.dal.net:6697",
1129 "underworld.se.eu.dal.net:6697",
1130 "uworld.hub.dal.net:6697"
1131 ]
1132 tls = true
1133 encoding = "utf-8"
1134 },
1135 {
1136 name = "EFnet"
1137 addresses = [
1138 "irc.efnet.fr:6667",
1139 "efnet.port80.se:6697",
1140 "efnet.portlane.se:6667",
1141 "irc.du.se:6667",
1142 "irc.homelien.no:6667",
1143 "irc.inet.tele.dk:6667",
1144 "irc.nordunet.se:6667",
1145 "irc.underworld.no:6667",
1146 "irc.choopa.net:6697",
1147 "irc.colosolutions.net:6667",
1148 "irc.mzima.net:6667",
1149 "irc.prison.netirc.servercentral.net:6667"
1150 ]
1151 tls = false
1152 encoding = "utf-8"
1153 },
1154 {
1155 name = "IRCnet"
1156 addresses = [
1157 "irc.ssl.ircnet.com:6697",
1158 "irc.ircnet.com:6667",
1159 "irc.at.ircnet.com:6667",
1160 "irc.be.ircnet.com:6667",
1161 "irc.cz.ircnet.com:6667",
1162 "irc.dk.ircnet.com:6667",
1163 "irc.ee.ircnet.com:6667",
1164 "irc.fi.ircnet.com:6667",
1165 "irc.fr.ircnet.com:6667",
1166 "irc.de.ircnet.com:6667",
1167 "irc.hu.ircnet.com:6667",
1168 "irc.it.ircnet.com:6667",
1169 "irc.jp.ircnet.com:6667",
1170 "irc.nl.ircnet.com:6667",
1171 "irc.no.ircnet.com:6667",
1172 "irc.pl.ircnet.com:6667",
1173 "irc.si.ircnet.com:6667",
1174 "irc.se.ircnet.com:6667",
1175 "irc.us.ircnet.com:6667"
1176 ]
1177 tls = false
1178 encoding = "utf-8"
1179 },
1180 {
1181 name = "Undernet"
1182 addresses = [
1183 "irc.undernet.org:6667",
1184 "ix1.undernet.org:6667",
1185 "ix2.undernet.org:6667",
1186 "ashburn.va.us.undernet.org:6667",
1187 "bucharest.ro.eu.undernet.org:6667",
1188 "budapest.hu.eu.undernet.org:6667",
1189 "chicago.il.us.undernet.org:6667"
1190 ]
1191 tls = false
1192 encoding = "utf-8"
1193 },
1194 {
1195 name = "QuakeNet"
1196 addresses = [
1197 "irc.quakenet.org:6667",
1198 "dreamhack.se.quakenet.org:6667",
1199 "euroserv.fr.quakenet.org:6667",
1200 "irc.ipv6.quakenet.org:6667",
1201 "port80a.se.quakenet.org:6667",
1202 "port80b.se.quakenet.org:6667",
1203 "port80c.se.quakenet.org:6667",
1204 "portlane.se.quakenet.org:6667",
1205 "servercentral.il.us.quakenet.org:6667",
1206 "underworld1.no.quakenet.org:6667"
1207 ]
1208 tls = false
1209 encoding = "utf-8"
1210 },
1211 {
1212 name = "freenode"
1213 addresses = [
1214 "irc.freenode.net:6697",
1215 "chat.freenode.net:6697",
1216 "irc.freenode.org:6697",
1217 "chat.freenode.org:6697",
1218 ]
1219 tls = true
1220 encoding = "utf-8"
1221 },
1222 {
1223 name = "localhost"
1224 addresses = ["localhost:6667", "127.0.0.1:6667"]
1225 tls = false
1226 }
1227
1228 # TODO: More predefined servers
1229 )
1230
1231
1232 Development Specification
1233 int bus_count = 1;
1234
1235 Codeing Style
1236 • Public header 用 __XXX_H 形式
1237
1238 • 提倡在作用域开头统一声明变量,而不是即用即声明,方便释放的时候统一处理
1239
1240 • 缩进:四空格,无 Tab
1241
1242 • 折行:
1243
1244 • 头文件中的函数签名可以不折行,其他地方的代码一律小于 80 char per
1245 line
1246
1247 • 参数过长时,从超过长度的第一个参数开始折行,参数无需对齐
1248
1249 • 太长的字符串可以不折行
1250
1251 • gtk_widget_class_bind_template_child() 由于实在太长,可以不折行
1252
1253 • 花括号不换行(除非在 case
1254 中),右圆括号和左花括号之间没有空格(待定)
1255
1256 • 命名:
1257
1258 • 鼓励局部变量和函数参数使用缩写,全局变量及函数名,类型名不鼓励缩写
1259
1260 • 宏大写,数据类型,类名用大驼峰法,变量使用全小写 + 下划线
1261
1262 • 文件名全小写,以下划线分隔
1263
1264 • 注释:
1265
1266 • 按英文规范,句首第一个单词首字符大写,多句时使用标点符号,同样每行不得超过
1267 80 字符(汉字以两字符计),链接可以不折行
1268
1269 • Git commit log: 格式为 MODULE(TYPE): DESCRIPTION
1270 ,当前可用的模块(MODULE) 有: All Core Sirc Sui Prefs Filter Decora‐
1271 tor Lib I18n Data Plugin Build Script Doc... ,可用的提交类型(TYPE)
1272 有: feat impl change fix improve cleanup refactor update release
1273 misc...
1274
1275 • I18N:所有需要在界面上展示的格式化字符串中的控制字符均使用 numbered
1276 argument, 即 %n$X 形式
1277
1278 • Change log: 应分为四类
1279
1280 • Changed: 设计或功能上的改动,可能会带来兼容问题的一定要说明
1281
1282 • Added: 新增的功能或者依赖
1283
1284 • Removed: 移除的功能或者依赖
1285
1286 • Imporved: 性能或功能或易用性上的改善以及 bug 修复
1287
1288 • 发布前须知
1289
1290 • 集成测试 (TODO)
1291
1292 • 更新翻译
1293
1294 • 更新文档
1295
1296 • 更新 change log
1297
1298 • 更新项目中的版本号
1299
1300 • 确认文档中的提供的安装脚本可用
1301
1302 • 对最新的 commit 打 tag
1303
1304 • 通知各个发行版的打包维护者
1305
1306 • Arch Linux: @SilverRainZ
1307
1308 • Gentoo: @xeirrr
1309
1310 • ...
1311
1312 Miscellaneous
1313 Hot Keys
1314 • ctrl + j/k: switch chat panel
1315
1316 • up/down: scroll message list
1317
1318 NOTE:
1319 Customized hot keys will be supported in the future.
1320
1321 Chat Logs
1322 Chat logs is enabled by default, log files are located at
1323 $XDG_DATA_HOME/srain/logs, usually it is ~/.local/share/srain/logs.
1324
1325 Frequently Asked Questions
1326 Frequently asked questions are listed here, you can visit issue page to
1327 see more questions that asked by our users.
1328
1329 • Does Srain support Windows?
1330
1331 • What is "relay message transform"?
1332
1333 • Where are the log files?
1334
1335 • How can I send message which has a slash("/") prefixed?
1336
1337 • How can I remove my stored password?
1338
1339 • How can I hide JOIN/PART messages of channel?
1340
1341 • Why can't I login to my ZNC server?
1342
1343 Does Srain support Windows?
1344 Yes, please refer to install-packages-windows.
1345
1346 What is relay message transform ?
1347 There are many relay bots forward messages from other IM to IRC net‐
1348 work, "Relay message transform" make these messages easier to read.
1349
1350 For example, there is a telegram bot named "telegram", the words in
1351 brackets is the named of the telegram user.
1352 [image]
1353
1354 Run command /pattern add normal-relay \[(?<sender>[^:]+?)\] (?<con‐
1355 tent>.*) and /render telegram normal-relay, you get:
1356 [image]
1357
1358 For more details, please refer to commands-pattern and commands-render.
1359
1360 Where are the log files?
1361 Refer to misc-chat-logs.
1362
1363 How can I send message which has a slash("/") prefixed?
1364 Please prepend another slash to the message.
1365
1366 Refer to commands-syntax.
1367
1368 How can I remove my stored password?
1369 Just leave the password entry empty and check the "Remember password"
1370 checkbox before connect to server or join channel, the corresponding
1371 password will be removed.
1372
1373 Or you can use secret-tool (provided by libsecret) to manage all your
1374 stored passwords.
1375
1376 How can I hide JOIN/PART messages of channel?
1377 So far, Srain has not yet a specialized option for hiding such mes‐
1378 sages. You can use write regular expression to filter them:
1379
1380 /pattern add filter-join ^\w+ has joined$
1381 /filter filter-join
1382 /pattern add filter-part ^\w+ has left: .*$
1383 /filter filter-part
1384
1385 NOTE:
1386 The content of regular expression depends on your language.
1387
1388 Why can't I login to my ZNC server?
1389 According ZNC's FAQ, way 2, supply your "user@phone/network:pass"
1390 (without quotes) in the server password field. Other as usual.
1391
1392 NOTE:
1393 Way 1 in ZNC's FAQ requires username field can be set via connection
1394 panel, which will be supported by Srain in the future.
1395
1396 Change Log
1397 • 2021-05-30 Version 1.2.2
1398
1399 • 2021-04-02 Version 1.2.1
1400
1401 • 2021-02-28 Version 1.2.0
1402
1403 • 2020-10-01 Version 1.1.3
1404
1405 • 2020-08-10 Version 1.1.2
1406
1407 • 2020-06-27 Version 1.1.1
1408
1409 • 2020-05-24 Version 1.1.0
1410
1411 • 2020-04-11 Version 1.0.2
1412
1413 • 2020-03-14 Version 1.0.1
1414
1415 • 2020-02-24 Version 1.0.0
1416
1417 • 2019-10-07 Version 1.0.0rc9999
1418
1419 • 2019-06-14 Version 1.0.0rc5
1420
1421 • 2019-05-13 Version 1.0.0rc4
1422
1423 • 2019-04-14 Version 1.0.0rc3
1424
1425 • 2019-01-24 Version 1.0.0rc2
1426
1427 • 2018-09-10 Version 1.0.0rc1
1428
1429 • 2018-02-28 Version 0.06.4
1430
1431 • 2017-12-22 Version 0.06.3
1432
1433 • 2017-09-12 Version 0.06.2
1434
1435 • 2017-08-18 Version 0.06.1
1436
1437 • 2017-07-29 Version 0.06
1438
1439 • 2016-09-19 Version 0.05.1
1440
1441 • 2016-08-27 Version 0.05
1442
1443 • 2016-04-30 Version 0.03
1444
1445 • 2016-04-13 Version 0.02
1446
1447 • 2016-04-07 Version 0.01
1448
1449 2021-05-30 Version 1.2.2
1450 • Changed:
1451
1452 • Add libera.chat IRC network (srain#311)
1453
1454 • Updated Dutch translation (b6830e9)
1455
1456 • Bug fixes:
1457
1458 • Fix windows build (srain#300, srain#303)
1459
1460 2021-04-02 Version 1.2.1
1461 • Features:
1462
1463 • Add Ukrainian translations (srain#292), thanks to @andmizyk
1464
1465 • Bug fixes:
1466
1467 • Minor fixes (srain#290)
1468
1469 2021-02-28 Version 1.2.0
1470 • Features:
1471
1472 • Switch build system from Make to Meson (srain#266)
1473
1474 • Add FreeBSD implementations for srn_get_executable_{path,dir},
1475 thanks to @wahjava
1476
1477 • Add /quote command for sending special IRC commands, thanks to @hno
1478 (srain#283)
1479
1480 • Add support for hiding server buffer (srain#287)
1481
1482 • Bug fixes:
1483
1484 • Fix an use-after-free BUG (srain#267)
1485
1486 • Fix implicit declaration error on some systems, thanks to
1487 @lgbaldoni (srain#270)
1488
1489 2020-10-01 Version 1.1.3
1490 • Bug fixes:
1491
1492 • Fix an use-after-free BUG (srain#267)
1493
1494 2020-08-10 Version 1.1.2
1495 NOTE:
1496 This release contains only improvement for MS Windows, user of other
1497 platform can ignore it.
1498
1499 • Features:
1500
1501 • Binary for MS Windows now can automatically built via Github Ac‐
1502 tions, thanks to @lifeibiren (srain#259), please refer to in‐
1503 stall-packages-windows for more details
1504
1505 • Changes:
1506
1507 • For ease of running on windows, Srain's executable path is added to
1508 the search paths of {configuration,data} file. Thanks to
1509 @lifeibiren (srain#259)
1510
1511 2020-06-27 Version 1.1.1
1512 • Changes:
1513
1514 • Improve auto-scroll policy of message list (srain#255)
1515
1516 • Bug fixes:
1517
1518 • Fix TLS certificate verification error on glib-networking 2.64.3 (‐
1519 srain#251)
1520
1521 • Fix crash when connecting to an invalid host (srain#234)
1522
1523 2020-05-24 Version 1.1.0
1524 • Features:
1525
1526 • Support multiple selection of message (srain#138)
1527
1528 • Support jump to mentioned message (srain#243)
1529
1530 • Nickname will be highlighted when mentioned (srain#243)
1531
1532 • Auto build deb package (srain#238)
1533
1534 • Changes:
1535
1536 • Improve fcous control of UI
1537
1538 • Replace appdata with metainfo (srain#240)
1539
1540 • Validate metainfo with appstream-util (srain#242)
1541
1542 • Bug fixes:
1543
1544 • Some implicit declarations fixes (srain#236)
1545
1546 • Some typo fixes (srain#239)
1547
1548 2020-04-11 Version 1.0.2
1549 • Features:
1550
1551 • Add MAN documentation (deaf723)
1552
1553 • Add more predefined IRC networks: DALnet, EFnet, IRCnet, Undernet
1554 and QuakeNet (srain#228)
1555
1556 • Changes:
1557
1558 • Build: Allow setting CC variable via environment (srain#224)
1559
1560 • Add channel related messages to corresponding buffer as possible (‐
1561 srain#149)
1562
1563 • Improve widget focus control (srain#229)
1564
1565 • Drop unused icons (6239fe5)
1566
1567 • Provide clearer error message when connecting (srain#233)
1568
1569 • Update gentoo installation documentation install-packages-gentoo (‐
1570 ceb5ca3)
1571
1572 • Bug fixes:
1573
1574 • Truncate long message before sendisg (srain#227)
1575
1576 • Deal with invalid UTF-8 string (50e7757)
1577
1578 • Fix incorrect user number of channel user list (srain#230)
1579
1580 • Fix incorrect icon install path (9f07380)
1581
1582 2020-03-14 Version 1.0.1
1583 • Features:
1584
1585 • Auto rename to original nick when ghost quit (srain#198)
1586
1587 • Add hackint IRC network (srain#201), thanks to @kpcyrd
1588
1589 • Add Dutch translation (srain#215), thanks to @Vistaus
1590
1591 • Add two FAQs to documentation (srain#217)
1592
1593 • Add debian pack script (srain-contrib#1), thanks to @tomac4t.
1594 Please refer to install-packages-debian to build a deb package
1595
1596 • Changes:
1597
1598 • Move continuous integration from travis CI to github actions (‐
1599 srain#203, srain#204), thanks to @tomac4t
1600
1601 • Make header bar buttons repect default belief (srain#205,
1602 srain#218)
1603
1604 • Bug fixes:
1605
1606 • Fix case sensitivity issue for IRC messages (srain#202), thanks to
1607 @hhirtz
1608
1609 • Fix invalid changelog section of appdata file (srain#214)
1610
1611 • Fix missing dependences in documentation (srain#216), thanks to
1612 @avoidr
1613
1614 2020-02-24 Version 1.0.0
1615 • Changes:
1616
1617 • Some code cleanup
1618
1619 • Update ./start documentation
1620
1621 • Bug fixes:
1622
1623 • Allow Srain runs without dbus secrets service (srain#195)
1624
1625 • Fix nick generation logical (39ced08)
1626
1627 NOTE:
1628 1.0.0 is the first stable release of Srain, enjoy!
1629
1630 2019-10-07 Version 1.0.0rc9999
1631 • Features:
1632
1633 • Activate corresponding buffer when channel URL is clicked (‐
1634 srain#190)
1635
1636 • Command alias support (srain#188)
1637
1638 • List predefined servers via command, see commands-server for de‐
1639 tails (656f3e5)
1640
1641 • Changes:
1642
1643 • Replace all icons with freedesktop standard icons (srain#120)
1644
1645 • Bug fixes:
1646
1647 • Fix wrong usage of GError (srain#179)
1648
1649 • Fix image preview problem when image is hard to detect type (‐
1650 srain#163)
1651
1652 • Fix memory leak of pattern filter (9464a9e)
1653
1654 • Fix the breaking "abort sending" icon (srain#144)
1655
1656 • Fix the invite menu of user (9f98cbb)
1657
1658 2019-06-14 Version 1.0.0rc5
1659 • Added:
1660
1661 • Regular expression pattern management using commands-pattern
1662 command
1663
1664 • Add command commands-filter for filtering message via pattern
1665
1666 • Add command commands-render for rendering message via pattern
1667
1668 • Changed:
1669
1670 • Refactor detector module and rename it to render
1671
1672 • Refactor filter module
1673
1674 • Change project description
1675
1676 • Removed:
1677
1678 • Drop command commands-rignore
1679
1680 • Drop command commands-relay
1681
1682 2019-05-13 Version 1.0.0rc4
1683 • Added:
1684
1685 • New dependency libsecret
1686
1687 • Add password storage support
1688
1689 • Add command line options --no-auto, used to require Srain not to
1690 automatically connect to servers
1691
1692 • Add russian translation, thanks to @tim77
1693
1694 • Allow user send slash(/) prefixed message
1695
1696 • Removed:
1697
1698 • Drop all password fields in configuration file
1699
1700 • Changed:
1701
1702 • Enable CSD(Client-Side Decoration) by default
1703
1704 • Update chinese translation
1705
1706 2019-04-14 Version 1.0.0rc3
1707 2019-01-24 Version 1.0.0rc2
1708 2018-09-10 Version 1.0.0rc1
1709 2018-02-28 Version 0.06.4
1710 • Changed:
1711
1712 • Change default application ID to im.srain.Srain
1713
1714 • Added:
1715
1716 • CTCP support, including request & response CLIENTINFO, FINGER,
1717 PING, SOURCE, TIME, VERSION, USERINFO messages. DCC message is not
1718 yet supported. Use command commands-ctcp for sending a CTCP request
1719
1720 • Login method support, you can specify it by configuration file op‐
1721 tion server.login_method:
1722
1723 • sasl_plain: SASL PLAIN authentication support, will use
1724 server.user.username as identity, and use server.user.passwd
1725 as password
1726
1727 • Added documentation support used to show Srain's features, inspried
1728 by https://ircv3.net/software/clients.html
1729
1730 • Added a semantic version parser, not yet used
1731
1732 • Added appdata file which requier by application store, thanks to
1733 @cpba
1734
1735 • openSUSE package is available, please refer to install-pack‐
1736 ages-opensuse for details, thanks to @alois
1737
1738 • Flatpak package is available, please refer to install-pack‐
1739 ages-flatpak for details, thanks to @cpba
1740
1741 • Improved:
1742
1743 • Fixed a logical error in IRC message parser: all parameters are
1744 equal whether matched by <middle> or <trailing>, thanks to
1745 @DanielOaks
1746
1747 • Improved connection state control, you can smoothly disconnect/quit
1748 from server even it is unresponsive
1749
1750 • Fixed truncated message output by commands-server list subcommand
1751
1752 • Fixed crash at g_type_check_instance() under GLib 2.54.3+
1753
1754 • Fixed: Do not free a SrianServerBuffer which has non-empty buffer
1755
1756 • Ensure the QUIT message can be sent before application shutdown
1757
1758 • Removed entry from desktop file, thanks to @TingPing
1759
1760 • Fixed grammer of join message, thanks to @raindev
1761
1762 • Re-enable CI for Srain: ci-status
1763
1764 2017-12-22 Version 0.06.3
1765 • Changed:
1766
1767 • Configurable file option tls_not_verify in irc block in server
1768 block is renamed to tls_noverify, old option name is still sup‐
1769 ported
1770
1771 • Command option tls-not-verify for commands-server and commands-con‐
1772 nect is renamed to tls-noverify, old option name is still supported
1773
1774 • Added:
1775
1776 • Connect popover supports connect to predefined server
1777
1778 • Join popover supports channel search
1779
1780 • Improved:
1781
1782 • Modified margin and padding of some widgets
1783
1784 • Improved the style of unread message counter
1785
1786 • Fixed markup parse error of decorator
1787
1788 • Fixed crashing while connecting from connect popover
1789
1790 • Fixed use after free while removing user
1791
1792 • Improved the performance and extensibility of user list
1793
1794 • Improved compatibility with older versions of GTK(> 3.16)
1795
1796 • Refactor the code of chat panel, helpful for the next development
1797
1798 2017-09-12 Version 0.06.2
1799 • Added:
1800
1801 • mIRC color support, can be disabled via setting render_mirc_color
1802 option in chat block in server block to false
1803
1804 • Improved:
1805
1806 • Better error reporting while operating the UI
1807
1808 • IRC URL can be opened directly within the application
1809
1810 • Text in input entry, connection panel and join panel will not be
1811 cleared while operation is not successful
1812
1813 • Fixed: in some cases, nickname registration will case infinity loop
1814
1815 • Decorator and filter now can process xml message
1816
1817 • Imporved the handling of channel topic
1818
1819 2017-08-18 Version 0.06.1
1820 • Added:
1821
1822 • Added GPL copyright statements
1823
1824 • RPL_CHANNEL_URL (328) message support
1825
1826 • Command line options support, type srain -h for help message
1827
1828 • Support for Creating server and joining channel from IRC URL
1829
1830 • New dependency libsoup
1831
1832 • Add reconnect timer: if connection fails, Srain will wait for 5
1833 seconds then try to connect again. If it still fails, waiting time
1834 will increase by 5 second
1835
1836 • Improved:
1837
1838 • Fixed the crash when QUIT
1839
1840 • Fixed: avoid sending empty password
1841
1842 • More empty parameters checks
1843
1844 • Imporve server connection status control
1845
1846 2017-07-29 Version 0.06
1847 • Changed:
1848
1849 • The third time of refactor ;-)
1850
1851 • New command parser, for the syntax, refer to commands-syntax.
1852
1853 • Changed the format of Chat log
1854
1855 • The commands-relay command doesn't support custom delimiter, this
1856 function will be implemented as python plugin in the future
1857
1858 • Use reStructuredText for document instead of Markdown
1859
1860 • Added:
1861
1862 • Message filter: mechanism for filtering message
1863
1864 • Message Decorator: mechanism for changing message
1865
1866 • Install script for Gentoo, thanks to @rtlanceroad !
1867
1868 • New command commands-rignore for ignore message using regular ex‐
1869 pression, thanks to @zwindl !
1870
1871 • Config file support
1872
1873 • Configurable log module, more convenient for developing and report‐
1874 ing issue
1875
1876 • New Return value type, for more friendly error reporting
1877
1878 • New command commands-server for IRC servers management
1879
1880 • Srain home page is available at: https://srain.im
1881
1882 • Srain help documentation is available at: https://doc.srain.im
1883
1884 • Removed:
1885
1886 • Remove libircclient dependence
1887
1888 • Improved:
1889
1890 • Improve reconnection stuff: auto reconnect when ping time out
1891
1892 • More accurate message mention
1893
1894 • Display preview image in correct size
1895
1896 • Any number of image links in message can be previewed
1897
1898 • HTTP(and some other protocols) link, domain name, email address and
1899 IRC channel name in topic and messages can be rendered as hyper
1900 link
1901
1902 • The sent message can be merged to last sent message
1903
1904 • Fixed some bugs
1905
1906 2016-09-19 Version 0.05.1
1907 • Create missing directory: $XDG_CACHE_HOME/srain/avatars
1908
1909 2016-08-27 Version 0.05
1910 • Changed:
1911
1912 • Port to libircclient
1913
1914 • SSL connection support
1915
1916 • Server password support
1917
1918 • Channel password support
1919
1920 • Added:
1921
1922 • Convenience GtkPopover for connecting and joining
1923
1924 • Nick popmenu
1925
1926 • Translations: zh_CN
1927
1928 • Forward message
1929
1930 • Chat log
1931
1932 • Colorful user list icon
1933
1934 • Mentioned highlight
1935
1936 • Desktop notification
1937
1938 • Improved:
1939
1940 • More friendly User interface
1941
1942 • Stronger {upload,avatar} plugin
1943
1944 • Fixed a lot of bugs
1945
1946 2016-04-30 Version 0.03
1947 • New interface between UI and IRC module
1948
1949 • Multi-server support
1950
1951 • Channel name is not case sensitive now
1952
1953 • /quit command will close all SrainChan of a server
1954
1955 • Fix GTK-Warning when close a SrainCHan
1956
1957 NOTE:
1958 0.03 is a pre-release, some functions are no completed yet. it also
1959 has some undetected bugs.
1960
1961 2016-04-13 Version 0.02
1962 • Bugs fixed
1963
1964 • Port to GTK+-3.20
1965
1966 NOTE:
1967 0.02 is a pre-release, some functions are no completed yet. it also
1968 has some undetected bugs.
1969
1970 2016-04-07 Version 0.01
1971 • Implement basic functions of a IRC client
1972
1973 • Themes: Silver Rain (light)
1974
1975 • Simple python plugin support:
1976
1977 • Auto upload image to pastebin (img.vim-cn.org)
1978
1979 • Get github avatar according nickname
1980
1981 • NB: plugin will separated from this repo in the future
1982
1983 • Image preview from URL
1984
1985 • Relay bot message transfrom
1986
1987 • Nick auto completion
1988
1989 • Combine message from same person
1990
1991 NOTE:
1992 0.01 is a pre-release, some functions are no completed yet. it also
1993 has some undetected bugs.
1994
1995 Support Tables
1996 • Basic IRC Client Support
1997
1998 • Client-to-Client Protocol (CTCP) Support
1999
2000 • IRCv3 Client Support
2001
2002 Basic IRC Client Support
2003 ┌────────────────────┬─────────────┐
2004 │Function │ Support │
2005 └────────────────────┴─────────────┘
2006
2007 │Auto reconnect │ Yes │
2008 ├────────────────────┼─────────────┤
2009 │Multiple connection │ Yes │
2010 ├────────────────────┼─────────────┤
2011 │TLS connection │ Yes │
2012 ├────────────────────┼─────────────┤
2013 │Nick completion │ Yes │
2014 ├────────────────────┼─────────────┤
2015 │Ignore and filter │ Yes │
2016 ├────────────────────┼─────────────┤
2017 │Chat log │ Yes │
2018 ├────────────────────┼─────────────┤
2019 │Configuration file │ Yes │
2020 ├────────────────────┼─────────────┤
2021 │Command │ Yes │
2022 ├────────────────────┼─────────────┤
2023 │mIRC color │ Yes │
2024 ├────────────────────┼─────────────┤
2025 │Plugin │ Unavailable │
2026 └────────────────────┴─────────────┘
2027
2028 Client-to-Client Protocol (CTCP) Support
2029 ┌───────────┬─────────┐
2030 │Message │ Support │
2031 ├───────────┼─────────┤
2032 │ACTION │ Yes │
2033 ├───────────┼─────────┤
2034 │CLIENTINFO │ Yes │
2035 ├───────────┼─────────┤
2036 │DCC │ No │
2037 ├───────────┼─────────┤
2038 │FINGER │ Yes │
2039 ├───────────┼─────────┤
2040 │PING │ Yes │
2041 ├───────────┼─────────┤
2042 │SOURCE │ Yes │
2043 ├───────────┼─────────┤
2044 │TIME │ Yes │
2045 ├───────────┼─────────┤
2046 │VERSION │ Yes │
2047 ├───────────┼─────────┤
2048 │USERINFO │ Yes │
2049 └───────────┴─────────┘
2050
2051 IRCv3 Client Support
2052 ┌──────────────────┬────────────────────────────┐
2053 │Feature │ Support │
2054 ├──────────────────┼────────────────────────────┤
2055 │CAP v3.1 │ Yes │
2056 ├──────────────────┼────────────────────────────┤
2057 │CAP v3.2 │ Yes │
2058 ├──────────────────┼────────────────────────────┤
2059 │cap-notify │ Yes │
2060 ├──────────────────┼────────────────────────────┤
2061 │account-notify │ No │
2062 ├──────────────────┼────────────────────────────┤
2063 │account-tag │ No │
2064 ├──────────────────┼────────────────────────────┤
2065 │away-notify │ No │
2066 ├──────────────────┼────────────────────────────┤
2067 │batch │ No │
2068 ├──────────────────┼────────────────────────────┤
2069 │chghost │ No │
2070 ├──────────────────┼────────────────────────────┤
2071 │echo-message │ No │
2072 ├──────────────────┼────────────────────────────┤
2073 │extended-join │ No │
2074 ├──────────────────┼────────────────────────────┤
2075 │invite-notify │ No │
2076 ├──────────────────┼────────────────────────────┤
2077 │Monitor │ No │
2078 ├──────────────────┼────────────────────────────┤
2079 │multi-prefix │ No │
2080 └──────────────────┴────────────────────────────┘
2081
2082
2083
2084 │SASL v3.1 │ PLAIN,ECDSA-NIST256P-CHAL‐ │
2085 │ │ LENGE │
2086 ├──────────────────┼────────────────────────────┤
2087 │SASL v3.2 │ PLAIN,ECDSA-NIST256P-CHAL‐ │
2088 │ │ LENGE │
2089 ├──────────────────┼────────────────────────────┤
2090 │server-time │ No │
2091 ├──────────────────┼────────────────────────────┤
2092 │starttls │ No │
2093 ├──────────────────┼────────────────────────────┤
2094 │sts │ No │
2095 ├──────────────────┼────────────────────────────┤
2096 │userhost-in-names │ No │
2097 └──────────────────┴────────────────────────────┘
2098
2100 • search
2101
2103 Shengyu Zhang
2104
2106 2021, Shengyu Zhang
2107
2108
2109
2110
21111.2.0 May 30, 2021 SRAIN(1)