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