MagicMirror² v2.4.1 is available! For more information about this release, check out this topic.
Please read the release notes carefully since this update requires adjustments to your Raspberry Pi configuration!

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 to this.slackMessages.length - 1 instead of 0.



  • @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 😃 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.