1. 61
  1.  

  2. 4

    I’ll be trying this out, the situation with IRC bouncers is quite horrible, so almost anything is an improvement. A while back I tried to find ZNC alternatives, and found these

    The joke is that almost every second one hasn’t been updated in the last ten years, and their code quality probably also varies substantially.

    1. 8

      The joke is that almost every second one hasn’t been updated in the last ten years, and their code quality probably also varies substantially.

      I don’t know, it seems to me like an IRC bouncer is something you write, and then you’re done. What updates were you hoping for?

      1. 6

        In general I agree; I’m not planning to have to make many releases of pounce. However there have been some useful developments in IRC in the last 10 years, such as the server-time extension, that do improve the situation for bouncers.

        1. 1

          There’s a feature I would like in a bouncer which (I believe) does not exist, and therefore this might be used as a data point that there’s still room for updates or innovation in bouncers.

          On the other hand, my feature, and indeed OP’s feature here, might be feasibly implemented in a ZNC plugin. Which would be a data point against the need for another cilent.

          My feature request is: I would like to be able to make one client->bouncer connection and for the bouncer to provide a view over multiple IRC networks in some fashion, so for example, from my client’s POV, I might join the channel “#oftc#debian-uk”, and the bouncer routes that to an OFTC server connection, channel #debian-uk. As things stand, I have to make a half-dozen individual client→bouncer connections, one per IRC network.

          1. 3

            Quassel does this, the problem with this idea is that you need a custom protocol between the bouncer and the client. Having to switch from your favourite IRC client to replace it with your bouncer’s only supported client isn’t always fun.

            1. 2

              I’ve thought about this sort of thing too, having some network connections where I use only one channel. Unfortunately it breaks down pretty quickly (unless you start using a custom protocol as @xi points out). How do you route commands that aren’t directly tied to channels, such as WHOIS or private messages for that matter? What happens if your nick ends up different on one network from another? It seems like it would end up more hassle than just a bunch of separate connections.

          2. 3

            I’m not exactly an IRC power-user, but I’ve been running weechat-headless on my server together with its relay feature, it fulfills my need for persistent and cross-device history.

            1. 1

              I’ve tried it once, but I hate having to ssh to any server for chats. As an Emacs user I much prefer to have a “proper” UI (ie. what I’m used to) and use something like rcirc or ERC – and to have a persistent setup with these client, a functioning bouncer is necessary.

              But what you mention is probably interesting, because that might be a reason that there hasn’t been much development on the bouncer front, since the intersection between those who think that’s ok and use IRC is not really getting smaller (percent-wise).

              1. 3

                I don’t actually ssh into it to use IRC, I use a “relay” web client. In the future you should be able to use weechat itself as a relay client, if you prefer its UI.

                1. 1

                  Ah, I forgot about that. But it doesn’t help me, I don’t want to use Weechat, but want a real bouncer.

                  1. 1

                    Thanks for linking to Glowing Bear! I use weechat off and on, and that looks pretty slick for a wee-chat front-end

              2. 2

                I’ve been enjoying using Quassel, but it’s more of a fully fledged client rather than a CLI like weechat, but the “core” idea they have is very good. I just wish there was a bit more development on it to polish out the kinks.

                1. 5

                  A worrying thing about Quassel is that communication with the “core” uses some Qt object serialization format which iirc isn’t necessarily stable and isn’t exactly designed for a network protocol

                  1. 9

                    We actually fixed that recently in 0.12.5/0.13.0.

                    It’s still the exact same protocol, but we use custom serialisation/deserialisation to ensure it’s a stable protocol, and is safe to be used over the network.

                    You’re right that it used to be undocumented and unstable, but we’ve spent a lot of work to keep everything compatible — a current 0.13.1 core or client can communicate with any client or core since 0.5.2, which was released in 2009 :)

                    1. 1

                      I have never really had an issue with the connection. It has had a few hiccups every now and then, but I have never bothered to spend time debugging it as it could be anything from my server throwing a fit, PostgreSQL doing a thing, certificate renewals via Let’s Encrypt or just some network buggery going on. All problems I have had have all disappeared in seconds as well, further making me not bother to deal with it :P

                      Might be an issue for some, but I have never had much of a problem.

                    2. 4

                      What are those kinks you feel need to be polished? I’d love to hear about them, so we can actually start working on improving them :)

                      1. 3

                        Cool to see you around here as well! I hang around on the IRC for when I need to get some help :)

                        My biggest peeve is honestly the documentation and the convoluted setup of the core. My core is probably a bit outdated because I really don’t want to deal with the upgrade as I would have to figure out way too much stuff again. Here’s a few things that could be better about it though:

                        • Setting up the database is documented on the website, but I don’t see why it couldn’t just have been a script?
                        • Why is there a commandline switch to select the backend when you also have to provide a config file? Couldn’t it be specified there so the service setup would be simpler?
                        • User administration is a bit of a drag to deal with. Adding a user is simple enough (commandline switches like that is a bit of a pain, but I can manage), but managing them requires dealing with the database directly (deleting for example).
                        • It would be nice if more settings were synced between the clients, like the chat monitors and the input widget for example. Having to configure that every time is a bit of a pain. Also, it would be nice if the stylesheet would be synchronized between the clients.
                        • Also, push notifications while disconnected would be nice, but I realize this isn’t completely straight forward to do.

                        And a few words of praise!

                        • The documentation on the website has improved greatly since I used it last. There are many things there that weren’t around when I tinkered with it last time. Good job on that :)
                        • The client <-> core solution works very well in general. I feel this solution is way better than any other IRC client/bouncer combos I have ever used. It’s painfree to hop between clients.
                        • Everyone on the IRC channel is very helpful and whenever I have asked about things I have gotten a decent answer, and even had some of the issues I brought up fixed in the next version; like being able to reload the core for SSL cert renewals.
                        1. 2

                          Why is there a commandline switch to select the backend when you also have to provide a config file? Couldn’t it be specified there so the service setup would be simpler?

                          The command line switch automatically migrates between databases, while the config (or the new ENV variables) don’t automatically migrate, but only use that database.

                          Setting up the database is documented on the website, but I don’t see why it couldn’t just have been a script?

                          That’s actually planned, but we haven’t had time for that so far.

                          User administration is a bit of a drag to deal with. Adding a user is simple enough (commandline switches like that is a bit of a pain, but I can manage), but managing them requires dealing with the database directly (deleting for example).

                          That’s long been planned, but as you all know, we don’t have enough volunteers, and not enough time.

                          Also, push notifications while disconnected would be nice, but I realize this isn’t completely straight forward to do.

                          That’s actually my #1 priority right now (due to Quasseldroid), and it’s almost done! So you should see that within of 2020 :)

                          1. 3

                            Don’t get me wrong! I know you are all working hard on it and I see the progress all the time :)

                            When I said this:

                            I just wish there was a bit more development on it to polish out the kinks.

                            I was pretty much referring to what you say here:

                            but as you all know, we don’t have enough volunteers, and not enough time.

                            It’s really getting there :)

                  2. 3

                    I’ve been using pounce for over a week now and have been very happy! Pounce is really easy to set up and has all the basic features I want out of an IRC bouncer. Coming from a combination of weechat relay and ZNC, pounce’s setup was about as simple as weechat’s relay, though if you want to use calico it gets a little weird. It expects you to set up a wildcard domain (or at least a domain for each network you’re bouncing) so that it can use the SNI header to route to the right pounce instance (which is really cool, but the first time I’ve seen something like that done).

                    Compiling it on most Linux distros will be a bit weird, as it depends on LibreSSL, but once you have that installed and copy linux.mk to config.mk it’s a fairly straight-forward process. There’s only rc scripts for managing the processes, but I have some systemd units on my ‘fork’ of the project.

                    1. 3

                      I’m not an IRC expert, but I assume that I can connect from for example multiple machines running irssi and get all my messages simultaniously? You mention that it only supports TLS, but is that the connection between my client irssi and pounce, between pounce and the upstream server or both?

                      1. 3

                        Yes. You’ll want to have each irssi set a different username to indicate to pounce that they should both be getting their own copies of messages (see “Client Configuration” in the manual page).

                        It is TLS-only in all directions.

                      2. 2

                        How do you render mdoc in gitea? I host my stuff on gitea and would like to show my docs like that as well.

                        I currently convert them with mandoc to html when I build the project’s website with Hakyll

                        1. 6

                          I have this in app.ini:

                          [markup.mandoc]
                          ENABLED = true
                          FILE_EXTENSIONS = .1,.2,.3,.4,.5,.6,.7,.8,.9
                          RENDER_COMMAND = /usr/local/libexec/gitea-mandoc
                          

                          where gitea-mandoc is a script that pipes mandoc through ttpre (just because gitea seems to do weird things to mandoc’s HTML output)

                          1. 1

                            Interesting, thank you!

                            mandoc’s html output is a bit weird to be honest.

                            1. 2

                              It mimics the troff typesetter’s way of separating paragraphs.

                              More recents versions uses that encapsulate the paragraphs. https://undeadly.org/cgi?action=article;sid=20190108193936

                              1. 1

                                Thank you very much for the link. I will check the new versions out!

                        2. 2

                          Nice! How is easy is it to setup as compared to ZNC? I’ve had this exact pain point.

                          1. 4

                            It’s designed so that you can configure it entirely with command line flags, or put the same options in a simple key = value format config file. There’s no dynamic configuration like znc.

                            The caveat is that it’s one pounce process per server connection, so you either need to listen on different ports for different networks or use the calico daemon to dispatch connections from one port that is accessed via different domain names.

                            Edit: well, and it requires LibreSSL, which may or may not be easily installed on your system of choice.

                            1. 1

                              I like one process per connexion. It helps with isolating resources (virtual memory, computing resources even though it seems to use a ring buffer so no memory usage explosion ahead…).

                              I like the way you code, organize your repo and man page listing source content and being the README. Mind if I take some of your idioms and practices?

                              1. 2

                                Go ahead! I wouldn’t do things like that if I didn’t think everyone should be doing it.

                          2. 2

                            matrix has become my irc bouncer and client

                            1. 10

                              Not a personal attack, but Matrix users on IRC are pretty troublesome for people using standard IRC clients – especially when they send formatted code blocks, you see a “xyz has sent a long message”; similar message when they upload an image.

                              Please use a standard IRC client.

                              1. 3

                                Ok, I can see how that might be problematic. I typically don’t send formatted code blocks. But usually irc channels ask that you handle pastes via some pastebin. So how different is it really in that case?

                                1. 2

                                  I remember at least twice matrix users in this situation:

                                  <u1[m]> go check https://[...] for the full message
                                     <u2> don't do that plz
                                  <u1[m]> do what? about [topic]?
                                     <u2> no, that "go check https://[...] for the full message"
                                  <u1[m]> I just typed a long message
                                     <u2> can't you disable this?
                                  <u1[m]> I can try.
                                     <u2> now what were you saying?
                                  <u1[m]> go check https://[...] for the full message
                                     <u2> go check https://127.0.0.1 for the full answer
                                  <u1[m]> didn't it work? dammit!
                                  *u1[m] has left the room*
                                     *u1 has joined the room*
                                    <u1> I was asking: are there good IRC bouncers around?
                                  
                                  1. 2

                                    That seems like an argument for a UI cue in the IRC bridge (eg. a “your message has been pastebinned” notice), rather than an argument against auto-pastebinning.

                                    1. 1

                                      I was more commenting than really arguing.

                                    2. 1

                                      Ok, actually just the first 5 messages…

                                  2. 3

                                    Would you prefer that - like most (all?) ‘standard IRC clients’ with multi-line input - it just spams 40 lines into the channel one after another? Because that situation, which is generally considered undesirable in IRC etiquette, is what this approach is meant to solve.

                                    Edit: Correction, not ‘all’. I believe qwebirc just strips the newlines and then sends half of a message, because the remainder exceeds the message length limit and it doesn’t split it up, so it gets cut off.

                                    1. 1

                                      Yes. With rate limiting, this isn’t a problem. Having to open a web browser to read text is ridiculous.

                                      1. 2

                                        The rate-limiting makes it more annoying to a lot of people, because it means that the lengthy text is going to be interspersed with conversation for potentially minutes, rather than spamming a single big block of text (that you can scroll past) only once.

                                        Like, I’d be all for having an option in clients/bridges/etc. to disable auto-pasting on a per-channel basis when requested by the channel operator, but frankly I suspect you’re in a strong minority here. There’s a reason that “don’t paste into the channel, use a pastebin” has been etiquette for many many years.

                                        If I’m not mistaken, it’s literally how Pastebin.com came to exist!

                                        1. 1

                                          I think automatic pastebinning is great. The real annoying thing is their URL formatting that they “fixed” (broke) to support some objectively broken software

                                2. 2

                                  As a former znc(1) user, I was dissatisfied with the multi-client experience it offered. I wanted to connect from both my laptop and my phone and have full chat history on both. I wanted to connect from both my laptop and my phone and have full chat history on both. With znc(1), my options were either having both clients spammed with redundant history every time they connect, or having one client consume the buffer and the other get no history at all.

                                  AFAIK ZNC can do that. Unless I misunderstand, it keeps history in sync. Is this what you tried, or did you configure ZNC to just resend last N messages from the buffer each time you connect?

                                  1. 2

                                    The best solution offered by that page is an external module, which requires extra maintenance to run smoothly. For something that to me should be a core bouncer feature, that is unreasonable.

                                    1. 2

                                      Well, sure but now you have a bouncer to maintain. :)

                                      1. 1

                                        And no irc client to maintain ?

                                        + abduco is working great. Works alongwith or insteadof tmux too.

                                  2. 2

                                    I like that the readme is a man page!

                                    1. 1

                                      As a former znc(1) user, I was dissatisfied with the multi-client experience it offered. I wanted to connect from both my laptop and my phone and have full chat history on both.

                                      I solved this by running znc on a VPS, using tmux session on it, then running weechat. Then I simply connect from any number of computers via mosh or phone (JuiceSSH on android), attach the tmux session and I don’t miss anything.

                                      1. 4

                                        If all of your clients just use the same WeeChat session, why bother with ZNC?

                                        1. 2

                                          I first setup the server as regular znc and used clients on each device. Then I switched to this and few friends were using my znc already so no need to take it down.