Miaou is an open-source multi-room persisted chat server.
Miaou is open : you can create your own rooms, be them public or private.
You send a message by typing in the text area at the bottom of the screen and then hitting ⏎.
When you want to start a new line without immediately sending your message, hit ctrl⏎ or alt⏎ or ⇧⏎.
Miaou uses a specific flavour of Markdown in order to allow a better formatting without being too flashy or distracting. The following sections mostly detail that syntax and the related shortcuts.
You can set some text in italic or in bold by writing it between stars or double stars.
*This sentence is in italic.* Not this one. **This one is in bold.**
would appear as
But you don't have to write the stars yourself, you can select some text and hit ctrlI or ctrlB.
A citation appears like this :
You can write the markdown yourself :
> this is a citation
Or you can select some text and hit ctrlQ.
If you want to set just one line in citation, you can put your cursor in the line before hitting ctrlQ without selecting the whole line.
When you paste an URL, it appears in the code as you'd expect :
If you want to give a specific label, as in
then you may use this Markdown syntax :
link : [How to do links](http://miaou.dystroy.org/help#Links)
If the URL of an image is the only thing you have in one line of your message, then the image is boxed. For example the message
http://dystroy.org/re7210/img/tartines-saint-jacques-850-02.jpg
is rendered as
If the image you want to display isn't available on internet but is on your computer, hit the Upload button. You'll then be presented a file selection dialog. The chosen image will be uploaded to imgur and inserted in your message.
On Chrome, you may also directly paste an image from the clipboard to the input area.
Code can be inlined in the text :
This is done using backtick quotes :
You can use `Array.apply(0,Array(N)).map(Math.random)` to generate an array of N random numbers.
You can also have whole blocks of code :
To do that, indent the whole block of code with four spaces or a tabulation :
Here's a fast replacement for jQuery's old `toggle` function :$.fn.toggleFuncs = function() { var functions = Array.prototype.slice.call(arguments); var _this = this.click(function(){ var i = _this.data('func_count') || 0; functions[i%functions.length].call(_this); _this.data('func_count', i+1); }); }
You don't have to manually put the backtick quotes or the tabulations : you may also use ctrlK.
When you hit ctrlK just after having pasted some code, you don't have to select it, it will automatically apply to the pasted text.
When the cursor is in a block of code, a menu appears and let you choose the coding language, which will be used for syntactic coloration.
You can alert another user by typing an arobase followed by her username in a message, as in
Hello @dystroy !
If the user checked the "Be notified on ping" checkbox, she'll see a silent notification.
By hovering the name of a user in the list at the left, you reveal a ping button which inserts the related ping in the message area.
If you choose to type the name instead of using the button, it's autocompleted. Hit the tab and esc keys to navigate through proposals. Users having been seen recently in the room are listed first but you can also ping somebody who never came to the room, she will get an invitation to join it.
By hovering the message of another user, you reveal a reply button. Replying inserts a specific type of ping, including a link to that message.
But the easiest way to reply to a message is usually to select it with an arrow button while holding the ctrl key down.
Some links are automatically rendered in Miaou messages:
The special formatting of Miaou messages allow other features. Some of them are even introduced by plugins.
Some examples:
!!stats rooms
command)The best to discover them is usually to ask other users.
⏎ | sends the message |
---|---|
alt⏎ | inserts a new line |
⇧⏎ | inserts a new line |
ctrl⏎ | inserts a new line |
ctrlI | sets the selection in italic |
ctrlB | sets the selection in bold |
ctrlQ | converts the selection or the just pasted text to citation |
ctrlK | converts the selection or the just pasted text to code (extend it to whole lines if there's a new line inside) |
ctrlL | makes a link from the selected text |
↑ | lets you edit your previous message, if it's not too old. Use ↓ to get back |
ctrl↑ | selects a message to reply to |
tab | navigates through autocompletion proposals |
esc | gets you out of an autocompletion proposal, or out of a message editing |
ctrlspace | opens the rooms panel |
Most often, the effect of a shorctut is reversed by redoing it. Some actions like replying or editing can be cancelled with the esc key
By hovering a message you reveal its date and a few buttons buttons allowing various actions.
There are 4 vote buttons :
Those buttons let you express an appreciation or ensure the visibility of important messages.
Downvoting means that you disagree with or don't appreciate the message. | |
Upvoting lets you show your appreciation or your agreement. | |
Starring a message gives it some visibility for a limited time. | |
Pinning a message ensure its visibility in a much greater way than a star. Only room admins can do that. |
By right-clicking thebutton, you can copy a permanent link to the message.
Thebutton lets you float a message in a window over the rest of the interface. Such a floating message isn't scrolled away when there's more messages coming in the chat, which is especially convenient for video or game messages. A floating message can be reduced to one of the four sides of the chat window. If the message is edited or changed, the reduced tab will take a yellow or red border.
To edit one of your recent messages, simply hover it to reveal the edit button, change it, and then resubmit it. It will appear with theicon to everybody.
Instead of going for the button, you can also use the ↑ arrow key to edit your last message.
Messages marked withicon can be edited by anybody. Those messages are "white boards" and are created by starting a message with!!whiteboard
Any user can create a new room, by clicking the relevant link on the home page. By creating a room you become its owner. You can then nominate admins or even owners.
A room is either
For both types of room, authorization levels can be managed using the Authorizations button.
A room can also be made "not listed" to prevent it to appear listed to people who don't have access to it.
If you want to invite in your room a user who's already connected and in another room, the simplest solution is to ping her by typing @hisusername
.
If the room is private and you're one of the admins, then you may type !!summon @hisusername
: not only will the user be invited but you'll also have a dialog offering you to grant that user the right to enter, with the opportunity to see her profile.
If you want to invite somebody's who's not connected or maybe not even a user, simply give her the URL of the room.
When a user wants to enter a private room before he has the right, she's offered the opportunity to request access. Users in the room see the requests and the room admins may accept or deny the request.
When you hover the name of a user in the left column of the window, you see a PM button. This button lets you enter a special room created for you and the other user and in which you can discuss privately.
You'll be able to get back to this room later, either by using the same PM button or by looking in the Dialog Rooms tab of Miaou's home page.
Some commands can be issued by typing their name after !!
. They have various effects. To get the complete list, type!!help
Here are some examples of commands :
Those commands are used to notify connected users in all the rooms you're in (including the ones you watch) that you're leaving ("away from keyboard") or that you're back. You may add a few words.
Use !!pm @someotheruser
to start discussing privately with another user.
adds to your message an abstract of the wikipedia.org page in the language of the room. For example :
!!wiki Albert Einstein
Note that you may also directly insert in a message a link to a wikipedia page (in the language of your choice).
This lets you make a message that anybody can edit.
!!tribo @someuser
lets you start a game of Tribo. Just try it.
You may launch a video chat with another connected user. Simply type
!!video @somebody
Note that both the command (video
) and the user name (somebody
) are autocompleted as you type (hit tab to navigate through proposals).
If you don't want to see or being seen, you may launch a simple audio chat using
!!audio @somebody
In both case, no plugin is needed in the browser, it also works on most mobile phones.
Some enterprise proxies block streaming. In that case you'll only see a black rectangle instead of the other chatter.
Miaou is mostly coded in JavaScript. Stuff includes Node.js with express, PostgreSQL, OAuth2, socket.io, WebRTC, Bluebird, Pug, Passport.js, jQuery, sass/scss, Redis, hu.js, Jest, Gulp, and nginx.
Miaou has a clean and organized source code and should remain so. You may easily dive into the code which is shared on GitHub : Canop/miaou. If you'd like to help, contact @dystroy
in the Miaou chat room.
Miaou accepts server-side plugins. If you want to contribute a new feature, it probably should be done as a plugin, especially if it doesn't feel like a core feature.
You can, of course, it's open-source for a reason. See the installation documentation. Miaou also provides a vagrant configuration to help you quickly set up a development environment. It is based on puppet, so you can as well reuse it.