Chatting on discord from 9front
Sometimes you work with people who doesn't want to use the same communication tools as you do. A sad example is when your team members wants to use discord, and not something simpler like IRC. Oh well, gotta deal with it.
This is the reason I wrote a "discord bot" (ugh) which can run on your 9front system and allow you to chat on discord anyways.
The example below just opens two chat windows with different channels in each. While it works both in acme and in the terminal, I like having everything together inside acme.
The project is made of a few scripts and a go program. The only thing that actually communicates with discord is the go program, and the scripts just makes it easier to send and recieve on the correct channels. The code is available here, and there is a precompiled version of the go program included (compiled for 9front amd64).
To use the service, you must first create a bot on discord and get the access token. I personally found this step much more confusing then the actual coding itself, which either tells you something about my google skills, or about discord.. Oh, and then you must invite the bot to your discord server..
Next, the server part of the bot must be started:
This will post a pipe in /srv/discordfront, where messages can be send and recieved from, but you should not read from it directly. The
discordsrv script does this for you as well, and it takes each line and dumps it in a nice readable format into
$home/lib/discord/logs/$serverName/$channelName where the server name is the name of a discord server (or guild?), and the channel name is, well, the name of the channel.
Now that the server is started, you can either run
discordacme which opens an acme with the file
$home/lib/discord/channels open. This file is not handled by any of the scripts, so it is just a handy text file to keep shortcuts to various channels (see the gif for an example). Inside
openChat command will open a new chat window, using the simpler
discord script simply runs
tail -f on the given channel's logfile while it reads messages from standard input and sends them to /srv/discordfront at the same time.
Since this program does not fetch previous messages, it might be a good idea to run the server part
discordsrv on a machine that is always online, so that all messages gets logged. Since this is plan9, it is almost trivial to still use the client on your local machine, just by using
rimport to import the relevant file trees from the server.
Here is what I do (in a seperate script which is run at startup):
#!/bin/rc rfork rimport -ac -p $serverhost /srv rimport -c -p $serverhost /usr/glenda/lib/discord discordacme
I don't even notice it is not running locally.
- Yes, the names of the scripts suck.
- Yes, there is a lot of missing functionality.
- No, this has not been tested very much, it just seems to do the job well enough for now.