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