module.exports = {

//---------------------------------------------------------------------
// Action Name
//
// This is the name of the action displayed in the editor.
//---------------------------------------------------------------------

name: "Create Voice Channel",

//---------------------------------------------------------------------
// Action Section
//
// This is the section the action will fall into.
//---------------------------------------------------------------------

section: "Channel Control",

//---------------------------------------------------------------------
// Action Subtitle
//
// This function generates the subtitle displayed next to the name.
//---------------------------------------------------------------------

subtitle: function(data) {
	return `${data.channelName}`;
},

//---------------------------------------------------------------------
// Action Storage Function
//
// Stores the relevant variable info for the editor.
//---------------------------------------------------------------------

variableStorage: function(data, varType) {
	const type = parseInt(data.storage);
	if(type !== varType) return;
	return ([data.varName, 'Voice Channel']);
},

//---------------------------------------------------------------------
// Action Fields
//
// These are the fields for the action. These fields are customized
// by creating elements with corresponding IDs in the HTML. These
// are also the names of the fields stored in the action's JSON data.
//---------------------------------------------------------------------

fields: ["channelName", "categoryID", "bitrate", "userLimit", "storage", "varName"],

//---------------------------------------------------------------------
// Command HTML
//
// This function returns a string containing the HTML used for
// editting actions. 
//
// The "isEvent" parameter will be true if this action is being used
// for an event. Due to their nature, events lack certain information, 
// so edit the HTML to reflect this.
//
// The "data" parameter stores constants for select elements to use. 
// Each is an array: index 0 for commands, index 1 for events.
// The names are: sendTargets, members, roles, channels, 
//                messages, servers, variables
//---------------------------------------------------------------------

html: function(isEvent, data) {
	return `
Name:<br>
<input id="channelName" class="round" type="text" style="width: 95%"><br>

Category ID:<br>
<input id= "categoryID" class="round" type="text" placeholder="Keep this empty if you don't want to put it into a category" style="width: 95%"><br>

<div style="float: left; width: 50%;">
	Bitrate:<br>
	<input id="bitrate" class="round" type="text" placeholder="Leave blank for default!" style="width: 90%;"><br>
</div>

<div style="float: right; width: 50%;">
	User Limit:<br>
	<input id="userLimit" class="round" type="text" placeholder="Leave blank for default!" style="width: 90%;"><br>
</div>

<div>
	<div style="float: left; width: 45%;">
		Store In:<br>
		<select id="storage" class="round" onchange="glob.variableChange(this, 'varNameContainer')">
			${data.variables[0]}
		</select>
	</div>
	<div id="varNameContainer" style="display: none; float: right; width: 50%;">
		Variable Name:<br>
		<input id="varName" class="round" type="text" style="width: 90%"><br>
	</div>
</div>`
},

//---------------------------------------------------------------------
// Action Editor Init Code
//
// When the HTML is first applied to the action editor, this code
// is also run. This helps add modifications or setup reactionary
// functions for the DOM elements.
//---------------------------------------------------------------------

init: function() {
	const {glob, document} = this;

	glob.variableChange(document.getElementById('storage'), 'varNameContainer');
},

//---------------------------------------------------------------------
// Action Bot Function
//
// This is the function for the action within the Bot's Action class.
// Keep in mind event calls won't have access to the "msg" parameter, 
// so be sure to provide checks for variable existance.
//---------------------------------------------------------------------

action: function(cache) {
	const data = cache.actions[cache.index];
	const server = cache.server;
	const catid = this.evalMessage(data.categoryID, cache);
	const bitrate = parseInt(this.evalMessage(data.bitrate, cache));
	const userLimit = parseInt(this.evalMessage(data.userLimit, cache));
	if(server && server.createChannel) {
		const name = this.evalMessage(data.channelName, cache);
		const storage = parseInt(data.storage);
		server.createChannel(name, {type: 'voice', bitrate: bitrate, userLimit: userLimit, parent: catid}).then(function(channel) {
			const varName = this.evalMessage(data.varName, cache);
			this.storeValue(channel, storage, varName, cache);
			this.callNextAction(cache);
		}.bind(this)).catch(this.displayError.bind(this, data, cache));
	} else {
		this.callNextAction(cache);
	}
},

//---------------------------------------------------------------------
// Action Bot Mod
//
// Upon initialization of the bot, this code is run. Using the bot's
// DBM namespace, one can add/modify existing functions if necessary.
// In order to reduce conflictions between mods, be sure to alias
// functions you wish to overwrite.
//---------------------------------------------------------------------

mod: function(DBM) {
}

}; // End of module

@@ -4628,16 +4628,369 @@
 orage);%0A
+%09%09if (!catid) %7B%0A%09%09%09server.createChannel(name, %7Btype: 'voice', bitrate: bitrate, userLimit: userLimit%7D).then(function(channel) %7B%0A%09%09%09%09const varName = this.evalMessage(data.varName, cache);%0A%09%09%09%09this.storeValue(channel, storage, varName, cache);%0A%09%09%09%09this.callNextAction(cache);%0A%09%09%09%7D.bind(this)).catch(this.displayError.bind(this, data, cache));%0A%09%09%7D else %7B%0A%09
 %09%09server
@@ -5110,16 +5110,17 @@
 l) %7B%0A%09%09%09
+%09
 const va
@@ -5165,24 +5165,25 @@
  cache);%0A%09%09%09
+%09
 this.storeVa
@@ -5221,16 +5221,17 @@
 cache);%0A
+%09
 %09%09%09this.
@@ -5255,16 +5255,17 @@
 che);%0A%09%09
+%09
 %7D.bind(t
@@ -5320,16 +5320,20 @@
 ache));%0A
+%09%09%7D%0A
 %09%7D else 

Fix not working without catID