I wanted a way to send an IRC message via a Gemini client. I use a ZNC bouncer on the same box, and it turns out really simple, with ideas from the Freenode users MetaNova and DarthGandalf on the #znc channel.
Essentially, IRC is just a text based protocol like SMTP, FTP, etc. All I need to do is authenticate to my ZNC bouncer and I can start pushing messages. This could also be done directly to an IRC server, though extra commands would likely be needed to authenticate with a nickserv and such things that I have already done while configuring the bouncer.
The first thing I did was configure ZNC to also open a non-ssl socket, but bound only to 127.0.0.1. This means I can locally telnet into ZNC. I could almost certainly have used OpenSSL s_client, or similar, if I'd wanted to use the existing SSL socket.
And the top and bottom of my endeavours is the following:
echo -e "pass mypasswd\nuser mynick/thenet\nnick mynick\nprivmsg #mychannel :hi from telnet" | \ telnet 127.0.0.1 6799
That's it. I can use that command to send a message to a channel on IRC!
If ZNC is running on a different host, perhaps SSL could be used with something like this?
socat -v tcp-listen:6799,reuseaddr,fork,bind=127.0.0.1 ssl:myznc.example.com:6799,verify=0 # A quick test with the kirc client shows socat works ok for this ./kirc -s 127.0.0.1 -p 6799 -n kevinsan -u kevinsan/tilde -k ******** -c kevintest