Advertisement
DryRoastedLemon

Auto-Cycler Module for Koalabot

Apr 5th, 2016
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.   Auto-Cycler
  3.   By: DryRoastedLemon/JoshTheSquid
  4.   This module allows you to set up number of messages that are cycled through automatically.
  5.   The interval at which the messages are cycled through (and sent) can be changed from within Koalabot,
  6.   as can each message. The module can also be enabled and disabled.
  7. */
  8.  
  9. var modAutoCycler = (function() {
  10.   // Basic mod information
  11.   var _modName = "autoCycler";
  12.   var _tabName = "Auto-Cycler";
  13.   var _saveFile = "autoCycler.ini";
  14.   var _settings =  {};
  15.   var _curMsg = 0;
  16.   var _timer;
  17.  
  18.   // Save function
  19.   var _saveSettings = function() {
  20.     apiWriteFile(_saveFile, JSON.stringify(_settings));
  21.   };
  22.  
  23.   // Load Settings
  24.   if (apiOpenFile(_saveFile) === null) {
  25.     _settings = {
  26.       enabled: false,
  27.       time: 10 * 60 * 1000,
  28.       messages: ["This is message 1.", "This is message 2."]
  29.     };
  30.     _saveSettings();
  31.   } else {
  32.     _settings = $.parseJSON(apiOpenFile(_saveFile));
  33.   }
  34.  
  35.   // Create tab
  36.   var _tab = apiAddTab(_tabName);
  37.   $(_tab).html(`
  38.     <div class="row-fluid">
  39.       <div class="col-sm-12">
  40.         <div class="panel panel-default">
  41.           <div class="panel-heading">
  42.             <h2 class="panel-title">${_tabName}</h2>
  43.           </div>
  44.           <ul class="list-group">
  45.             <li class="list-group-item">
  46.               <p><strong>Enabled: </strong>
  47.               <button id="mod${_modName}Toggle" class="btn btn-xs"></button></p>
  48.               <p>Current Message: <span id="mod${_modName}CurMsg"></span></p>
  49.               <p><button id="mod${_modName}Reset" class="btn btn-default btn-xs">Restart Cycler</button></p>
  50.             </li>
  51.             <li class="list-group-item">
  52.               <strong>Time: </strong>
  53.               <input id="mod${_modName}Time" type="text" size="4"> minutes.
  54.             </li>
  55.             <li class="list-group-item">
  56.               <p><strong>Messages:</strong></p>
  57.               <div id="mod${_modName}MsgList">
  58.               </div>
  59.               <p><button class="btn btn-default btn-sm" id="mod${_modName}AddMsg">Add Message</button></p>
  60.             </li>
  61.           </ul>
  62.         </div>
  63.       </div>
  64.     </div>
  65.     `);
  66.  
  67.   // Tab functionality
  68.   if (_settings.enabled) $("#mod" + _modName + "Toggle").addClass("btn-info").html("On");
  69.   if (!_settings.enabled) $("#mod" + _modName + "Toggle").addClass("btn-danger").html("Off");
  70.   $("#mod" + _modName + "CurMsg").html(_curMsg);
  71.   $("#mod" + _modName + "Time").val(_settings.time / 60000);
  72.  
  73.   $("#mod" + _modName + "Toggle").click(function() {
  74.     if (_settings.enabled) {
  75.       _settings.enabled = false;
  76.       $(this).addClass("btn-danger").removeClass("btn-info").html("Off");
  77.       _saveSettings();
  78.       _updateCycler();
  79.     } else {
  80.       _settings.enabled = true;
  81.       $(this).addClass("btn-info").removeClass("btn-danger").html("On");
  82.       _saveSettings();
  83.       _updateCycler();
  84.     }
  85.   });
  86.  
  87.   $("#mod" + _modName + "Time").change(function() {
  88.     _settings.time = $(this).val() * 60000;
  89.     _saveSettings();
  90.     _updateCycler();
  91.   });
  92.  
  93.   $("#mod" + _modName + "AddMsg").click(function() {
  94.     _settings.messages.push("");
  95.     _saveSettings();
  96.     _updateMsgs();
  97.   });
  98.  
  99.   $("#mod" + _modName + "Reset").click(function() {
  100.     _curMsg = 0;
  101.     $("#mod" + _modName + "CurMsg").html(_curMsg);
  102.   });
  103.  
  104.   function _updateMsgs() {
  105.     var content = "";
  106.     var newelement;
  107.     for (var i = 0; i < _settings.messages.length; i++) {
  108.       newelement = "<p><input class='mod" + _modName + "Msg' value='" + _settings.messages[i].replace(/"/, "&quot;").replace(/'/, "&apos;") + "' size='80'> <button class='mod" + _modName + "DelMsg btn btn-xs btn-danger'>-</button></p>";
  109.       content = content + newelement;
  110.     }
  111.     $("#mod" + _modName + "MsgList").html(content);
  112.  
  113.     $(".mod" + _modName + "Msg").each(function(i) {
  114.       $(this).change(function() {
  115.         _settings.messages[i] = $(this).val();
  116.         _saveSettings();
  117.         _updateMsgs();
  118.       });
  119.     });
  120.  
  121.     $(".mod" + _modName + "DelMsg").each(function(i) {
  122.       $(this).click(function() {
  123.         _settings.messages.splice(i, 1);
  124.         if (_curMsg > _settings.messages.length - 1) _curMsg = 0;
  125.         _saveSettings();
  126.         _updateMsgs();
  127.       });
  128.     });
  129.   }
  130.  
  131.   _updateMsgs();
  132.   _updateCycler();
  133.  
  134.   // Main Auto-Cycler Function
  135.   function _updateCycler() {
  136.     if (_settings.enabled) {
  137.       clearInterval(_timer);
  138.       _timer = setInterval(function() {
  139.         apiSay(_settings.messages[_curMsg]);
  140.         if (_curMsg < _settings.messages.length - 1)
  141.           _curMsg += 1;
  142.         else {
  143.           _curMsg = 0;
  144.         }
  145.         $("#mod" + _modName + "CurMsg").html(_curMsg);
  146.       }, _settings.time);
  147.     } else {
  148.       clearInterval(_timer);
  149.     }
  150.   }
  151. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement