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