Read the statement by Michael Teeuw here.
MMM-Slack stop randomise messages
-
I am trying to get rid of the randomiser in MMM-Slack module. I want the messages to show in order from oldest to newest. I’m sure I’m approaching it the wrong way but I just can’t get it to work without the randomiser. Pls help!
-
if(this.slackMessages.length > 0) { var randomMessageId = Math.floor(Math.random() * this.slackMessages.length); var randomMessage = this.slackMessages[randomMessageId].message;
I want just ‘x’ instead of the ‘randomMessageId’ on the last line and can’t figure out how to do it.
-
Hi @saibam,
Just change:
var randomMessageId = Math.floor(Math.random() * this.slackMessages.length);
to the following:
var randomMessageId = 0;
It should work (unrandomizing the order), so long as the
slackMessages
array is in ascending order. If not, and it’s in descending order, set tothis.slackMessages.length - 1
instead of0
. -
@ninjabreadman thanks for the answer but this will only show the latest message. I solved it in a rather long but still nice way. The idea is to show the latest 10 messages and when a new message is sent it will show it instantly.
currentMessageCount and currentMessgeId are global variables instantiated to 0. emoji_replace is my own function to include emojis in the message.if (currentMessageCount < this.slackMessages.length || currentMessageCount == 0){ currentMessageId = 0; currentMessageCount = this.slackMessages.length; } var maxAllowed = 10; var topMessages = this.slackMessages.slice(0, (maxAllowed - 1)); var maxCount = Math.min(maxAllowed, topMessages.length); if (currentMessageId == maxCount - 1) { currentMessageId = 0; } var currentMessage = topMessages[currentMessageId].message; currentMessage = emoji_replace(currentMessage); messageElement.innerHTML = currentMessage; currentMessageId ++;
-
@saibam That sounds pretty good. I wanted to achive the same for the last 5 messages. So i would simpley exchange the 10 for a 5. But where do I have to put the code into ? In the mmm-slack.js ?
I would relay appreciate any help. -
@gekberlin Yes. Change maxAllowed to 5. Put it in MMM-Slack.js under the getDom: function() where it creates the html elements. I also noticed that it didnt work as expected where I had (maxCount -1) and (maxAllowed - 1). I removed the -1 and it worked like a charm.
-
@saibam Thanks for your fast reply!
I’ve put in the code but then I didn’t get any message displayed anymore.
Did I have done something wrong ?getDom: function() { var messageElement = document.createElement('div'); if (currentMessageCount < this.slackMessages.length || currentMessageCount == 0){ currentMessageId = 0; currentMessageCount = this.slackMessages.length; } var maxAllowed = 5; var topMessages = this.slackMessages.slice(0, (maxAllowed 0)); var maxCount = Math.min(maxAllowed, topMessages.length); if (currentMessageId == maxCount 0) { currentMessageId = 0; } var currentMessage = topMessages[currentMessageId].message; currentMessage = emoji_replace(currentMessage); messageElement.innerHTML = currentMessage; currentMessageId ++; } return messageElement; } });
-
@gekberlin Yes.
currentMessage = emoji_replace(currentMessage);
will not work as emoji_replace is my own function for replacing :smiley: with an emoji.
so just get rid of that line and it will work.And you will also have to instantiate currentMessageId and currentMessageCount globally. I.e.
var currentMessageId = 0 var currentMessageCount = 0
at the top of the js file.
-
@saibam Which Slack token do you use to connect to slack and do you have to put the leading # hash sign in the config file for the channel where it listens?
-
@mediathreat we followed the link in the readme https://api.slack.com/tokens and from there we created our own app. I’m sorry I can’t find where I found the token in there, you will have to try and error your way :) I will keep looking some but can’t guarantee I find anything. Slack API pages are a mess imo. And no you don’t need the leading # in the config file.