Preface: This version of recent-messages has been superseded by recent-messages2.
Twitch IRC bot and web service that serves the last N (by default 500) messages for chat clients to use when they join a channel.
If you are a twitch user and you are concerned about your privacy and how to opt out, see the privacy statement and the automated optout service at https://www.twitch.tv/recent_messages
If you want to use the API/service, see below for the API docs.
If you plan to host a modified variant of this service yourself, please remember
it is licensed under the GNU AGPL v3 (or later). Please see the LICENSE
file for more details and
this quick summary.
API Base URL: https://recent-messages.robotty.de
CORS is enabled for all origins.
I kindly ask consumers/clients of this API to set the User-Agent
HTTP header
properly to the name of their application.
-
GET
/api/v2/recent-messages/:channelName
Get the recent messages in the given channel. Response is JSON of this format:
{ "messages": [ "@rm-received-ts=1566417979914;historical=1;badge-info=subscriber/15;badges=moderator/1,subscriber/12,bits-charity/1;color=#9ACD32;display-name=Leppunen;emotes=;flags=;id=3c33033a-e957-4ffe-a426-5334f8161127;mod=1;room-id=11148817;subscriber=1;tmi-sent-ts=1566417979702;turbo=0;user-id=42239452;user-type=mod :leppunen!leppunen@leppunen.tmi.twitch.tv PRIVMSG #pajlada :!braize", "@rm-received-ts=1566417980441;historical=1;badge-info=subscriber/44;badges=moderator/1,subscriber/36;color=#2E8B57;display-name=pajbot;emotes=;flags=;id=fd183a1a-71f2-4da9-9480-dd4fd0750547;mod=1;room-id=11148817;subscriber=1;tmi-sent-ts=1566417980207;turbo=0;user-id=82008718;user-type=mod :pajbot!pajbot@pajbot.tmi.twitch.tv PRIVMSG #pajlada :C2 API Cache Uptime: 22h31m54.25816048s - Memory: Alloc=408 MiB, TotalAlloc=433524 MiB, Sys=1876 MiB, NumGC=1416", "... and so on" ], "error": null }
The API returns
PRIVMSG
,CLEARCHAT
,CLEARMSG
,USERNOTICE
,NOTICE
andROOMSTATE
messages.This format is always returned, even on error (
messages
may be empty, though).error
is eithernull
or a string with an error message. The API will return200 OK
but with anerror
value set in conditions where messages can still exist/ be retrieved, but there might be an error preventing the service from collecting messages from that channel. (E.g. when you try to fetch messages for a suspended channel, or while the service is reconnecting to that channel)However, if the input
channelName
is of invalid format, you will get a400 Bad Request
error:{ "status": 400, "statusMessage": "Bad Request", "error": "Invalid channel name format" }
If the input
channelName
is ignored by the bot, you will get a403 Forbidden
error:{ "status": 403, "statusMessage": "Forbidden", "error": "This channel is excluded from this service" }
This endpoint supports the following optional query parameters:
-
?clearchatToNotice=true
- ConvertsCLEARCHAT
messages intoNOTICE
messages similar to how chatterino2 displays timeouts:@msg-id=rm-timeout :tmi.twitch.tv NOTICE #forsen :randers has been timed out for 10m20s. @msg-id=rm-permaban :tmi.twitch.tv NOTICE #forsen :randers has been permanently banned. @msg-id=rm-clearchat :tmi.twitch.tv NOTICE #forsen :Chat has been cleared by a moderator.
-
?hideModerationMessages=true
- Omit allCLEARCHAT
andCLEARMSG
messages. This option can be combined with other options altering the message rendering such asclearchatToNotice
. -
?hideModeratedMessages=true
- Omit all messages that were deleted byCLEARCHAT
orCLEARMSG
messages.
Additionally, all messages have the extra
rm-received-ts
(Time when the service received the message, milliseconds since the UTC epoch) and thehistorical
tag:@rm-received-ts=1566418175808;historical=1;badge-info=subscriber...
Deleted messages (deleted by
CLEARCHAT
orCLEARMSG
) additionally carry therm-deleted=1
tag:@rm-deleted=1;rm-received-ts=1566418181479;historical=1;badge-info=subscriber...
-
-
GET
/metrics
Dump a list of metrics to be consumed by a prometheus instance.
sudo -u postgres psql
#> CREATE USER recent_messages;
#> CREATE DATABASE recent_messages OWNER recent_messages;
#> \q
sudo adduser --system --home /opt/recent-messages \
--shell /bin/false --no-create-home --group \
--disabled-password --disabled-login \
recent_messages
npm i --production
sudo cp ./recent-messages.service /etc/systemd/system/recent-messages.service
sudo systemctl daemon-reload
sudo systemctl enable recent-messages
sudo systemctl start recent-messages
sudo cp ./install/nginx/recent-messages.example.com /etc/nginx/sites-available/recent-messages.yourdomain.com
# edit in your variables
sudo editor /etc/nginx/sites-available/recent-messages.yourdomain.com
sudo nginx -t
sudo systemctl reload nginx
Import ./install/grafana/recent-messages.json
via the "Import dashboard" page.