# Model

## Concept

Every script would need to be well defined while keeping their respective concept logic

## Model

* **\[📂]** Basic *(Every concepts of JavaScript and node.js there)*
  * **\[📁]** Variable *(🔏)*
  * **\[📁]** Function *(🔏 (**Missing Block**: \[🧱] Return {any}) )*
  * **\[📁]** Custom Object
  * **\[📁]** Loop
    * **\[🧱]** Repeat \[ Forever / Times {Integer} / While {Condition} ] {Scratch} *(🔓)*
    * **\[🧱]** Count with {variable} from {number} to {number} with increment {number}
    * **\[🧱]** For each item {Variable} in list {Array} {Scratch}
    * **\[🧱]** \[Break out/Continue with next iteration] of loop *(🔒)*
  * **\[📁]** Logic
    * **\[🧱]** \[ If / Else if / Else ] do {Scratch}
    * **\[🧱]** {Condition} \[ = / != / > / < / >= / <= / and / or ] {Condition}
    * **\[🧱]** {Condition} \[and / or] {Condition}
    * **\[🧱]** Not {Condition}
    * **\[🧱]** \[True / False]
    * **\[🧱]** Null
    * **\[🧱]** Test {argument} if true {value} if false {value}
    * **\[🧱]** Is {value} a \[ number / string ]
  * **\[📁]** Math
    * **\[🧱]** {number}
    * **\[🧱]** {number} \[ + / - / ÷ / \* / ^] {number}
    * **\[🧱]** \[square root / absolute / -(negative number) / ln / log10 / e^ / 10^] {number}
    * **\[🧱]** \[ cos / sin / tan / arccos / arcsin / arctan ] {number}
    * **\[🧱]** \[ π / e / φ / square root(2) / square root(½) / ∞ ]
    * **\[🧱]** {number} is \[ even / odd / prime / whole / positive / negative / divisible by {number} ]
    * **\[🧱]** Round \[ up / down ] {number}
    * **\[🧱]** \[ sum / min / max / average / median / modes / standart deviation / random item ] of list {Array}
    * **\[🧱]** Remainder of {number} ÷ {number}
    * **\[🧱]** Constrain {number} low {number} high {number}
    * **\[🧱]** Random integer from {number} to {number}
    * **\[🧱]** Random fraction
  * **\[📁]** List
    * **\[🧱]** Create list ⚙️{item}
    * **\[🧱]** Create list with item {any but objects} repeated {number} times
    * **\[🧱]** Length of {array}
    * **\[🧱]** is {tangible} empty
    * **\[🧱]** List {array} contains {item}
    * **\[🧱]** sort \[ numeric / aplhabetic / alphabetic *(ignore case)* ] \[ ascending / descending ] {array}
    * **\[🧱]** Reverse {array}
    * **\[🧱]** In list {array} find \[ First / Last ] occurence of item {item}
    * **\[🧱]** In list {array} \[ Get / Get & Remove / Remove ] \[ #{number} / #{number *(from end)*} / first / last /random ]
    * **\[🧱]** In list {array} \[ set / insert at ] \[ #{number} / #{number *(from end)*} / first / last / random ] as {number}
    * **\[🧱]** In list {array} get sub-list from \[ #{number} / #{number} *(from end)* / first ] to \[ #{number} / #{number} *(from end)* / last ]
    * **\[🧱]** In list {array} push {item}
    * **\[🧱]** Make \[ List from text / Text from list ] {array} with delimiter {string}
  * **\[📁]** Text
    * **\[🧱]** {string} *consider new lines*
    * **\[🧱]** Create text with ⚙️{any}
    * **\[🧱]** Replace {string} with {string} in {string}
    * **\[🧱]** is {tangible} empty
    * **\[🧱]** reverse {string}
    * **\[🧱]** New Line *(\n)*
    * **\[🧱]** To \[ Variable / array ] append text {string}
    * **\[🧱]** Length of {string}
    * **\[🧱]** {string} ends with {string}
    * **\[🧱]** {string} starts with {string}
    * **\[🧱]** {string} includes {string}
    * **\[🧱]** {string} is empty
    * **\[🧱]** In text {variable/array} find \[ First / Last] occurence of text {string}
    * **\[🧱]** In text {variable / array} get \[Letter #{number} / Letter #{number \_(from end} / First leter / Last leter / random letter ]
    * **\[🧱]** In text {Variable / Array} get substring from \[Letter #{number} / Letter #{number *(from end)*} / first letter ] to \[Letter #{number} / Letter #{number *(from end)*} / Last letter ]
    * **\[🧱]** To \[ Uppercase / Lowercase / Title case] {string}
    * **\[🧱]** Trim space from \[ Both sides / Left side / Right side ] of {string}
    * **\[🧱]** Count {string} in {string}
    * **\[🧱]** Is {string} boolean
    * **\[🧱]** Boolean from text {string}
    * **\[🧱]** Does text {string} contain numbers
    * **\[🧱]** Convert text {string} to number
  * **\[📁]** Color
    * **\[🧱]** {color}
    * **\[🧱]** Random Color
    * **\[🧱]** Color {Hex value}
    * **\[🧱]** RGB color {number (red)} {number (green)} {number (blue)}
    * **\[🧱]** Blend color 1 {color} with color 2 {color} ratio {number}
  * **\[📁]** Database
    * **\[📁]** Database
      * **\[🧱]** Get {string} from the database
      * **\[🧱]** Does {string} exist in the database
      * **\[🧱]** Get all data from the database
      * **\[🧱]** Set {string} to {string} in the database
      * **\[🧱]** Delete {string} from the database
      * **\[🧱]** Add {number} to {string} in database
      * **\[🧱]** Substract {number} to {string} in database
      * **\[🧱]** Delete all data from the database
    * **\[📁]** Dootabase *(awaiting for devs guidance to know what to do with it)*
      * **\[🧱]** Set current database to {string} .json
      * **\[🧱]** Get {string} from dootabse
      * **\[🧱]** Does {string} exist in dootabase
      * **\[🧱]** Get all data from dootabase
      * **\[🧱]** Set {string} to {string} in dootabase
      * **\[🧱]** Delete {string} from dootabase
      * **\[🧱]** In dootabase add {number} to {string}
      * **\[🧱]** In dootabase substract {number} to {string}
      * **\[🧱]** In dootabase multiply {string} by {number}
      * **\[🧱]** In dootabase divide {string} by {number}
      * **\[🧱]** Delete current dootabase
  * **\[📁]** Custom Event
  * **\[📁]** Terminal
    * **\[🧱]** Try {Scratch} If Error {Scratch} *(= Try Catch)*
    * **\[🧱]** Error
    * **\[🧱]** Print {Any}
    * **\[🧱]** Wait {Duration}
    * **\[🧱]** Stop Script
    * **\[🧱]** Do {scratch} and save output in {variable}
    * **\[🧱]** Run Code {Any} *(= Eval)*
    * **\[🧱]** Insert Code {Typing} *(= Insert)*
    * **\[🧱]** Create Webserver with text {string}
* **\[📂]** Discord *(Every concepts of Discord.js there)*
  * **\[📁]** Object
    * **\[📁]** Guild
      * **\[🧱]** {object -Guild-}
      * **\[🧱]** Get {object -Guild-} \[property]
      * **\[🧱]** Set {object -Guild-} \[property] to {parameter}
    * **\[📁]** Member
      * **\[🧱]** {object -Member-}
      * **\[🧱]** Get {object -Member-} \[property] with reason
      * **\[🧱]** Set {object -Member-} \[ nickname ] to {parameter}
    * **\[📁]** User
      * **\[🧱]** {object -User-}
      * **\[🧱]** Get {object -User-} \[property]
      * **\[🧱]** Set {object -User-} \[property] to {parameter}
    * **\[📁]** Channel
      * **\[🧱]** {object -Channel-}
      * **\[🧱]** Get {object -Channel-} \[property]
      * **\[🧱]** Set {object -Channel-} \[property] to {parameter}
    * **\[📁]** Thread
      * **\[🧱]** {object -Thread-}
      * **\[🧱]** Get {object -Thread-} \[property]
      * **\[🧱]** Set {object -Thread-} \[property] to {parameter}
    * **\[📁]** Role
      * **\[🧱]** {object -Role-}
      * **\[🧱]** Get {object -Role-} \[property]
      * **\[🧱]** Set {object -Role-} \[property] to {parameter}
    * **\[📁]** Message
      * **\[🧱]** {object -Message-}
      * **\[🧱]** Get {object -Message-} \[property]
      * **\[🧱]** Set {object -Message-} \[property] to {parameter}
    * **\[📁]** Reaction
      * **\[🧱]** {object -Reaction-}
      * **\[🧱]** Get {object -Reaction-} \[property]
      * **\[🧱]** Set {object -Reaction-} \[property] to {parameter}
    * **\[📁]** Typing
      * **\[🧱]** {object -Typing-}
      * **\[🧱]** Get {object -Typing-} \[property]
      * **\[🧱]** Set {object -Typing-} \[property] to {parameter}
    * **\[📁]** Invite
      * **\[🧱]** {object -Invite-}
      * **\[🧱]** Get {object -Invite-} \[property]
      * **\[🧱]** Set {object -Invite-} \[property] to {parameter}
    * **\[📁]** Emoji
      * **\[🧱]** {object -Emoji-}
      * **\[🧱]** Get {object -Emoji-} \[property]
      * **\[🧱]** Set {object -Emoji-} \[property] to {parameter}
    * **\[📁]** Sticker
      * **\[🧱]** {object -Sticker-}
      * **\[🧱]** Get {object -Sticker-} \[property]
      * **\[🧱]** Set {object -Sticker-} \[property] to {parameter}
    * **\[📁]** Scheduled Event
      * **\[🧱]** {object -Scheduled Event-}
      * **\[🧱]** Get {object -Scheduled Event-} \[property]
      * **\[🧱]** Set {object -Scheduled Event-} \[property] to {parameter}
    * **\[📁]** Stage
      * **\[🧱]** {object -Stage-}
      * **\[🧱]** Get {object -Stage-} \[property]
      * **\[🧱]** Set {object -Stage-} \[property] to {parameter}
    * **\[📁]** Interaction
      * **\[🧱]** {object -Interaction-}
      * **\[🧱]** Get {object -Interaction-} \[property]
      * **\[🧱]** Set {object -Interaction-} \[property] to {parameter}
    * **\[📁]** API
      * **\[🧱]** {object -API-}
      * **\[🧱]** Get {object -API-} \[property]
      * **\[🧱]** Set {object -API-} \[property] to {parameter}
    * **\[📁]** Client
      * **\[🧱]** {object -Client-}
      * **\[🧱]** Get {object -Client-} \[property]
      * **\[🧱]** Set {object -Client-} \[property] to {parameter}
    * **\[📁]** Shard
      * **\[🧱]** {object -Shard-}
      * **\[🧱]** Get {object -Shard-} \[property]
      * **\[🧱]** Set {object -Shard-} \[property] to {parameter}
  * **\[📁]** Event
    * **\[📁]** Guild
    * **\[📁]** Member
    * **\[📁]** User
    * **\[📁]** Channel
    * **\[📁]** Thread
    * **\[📁]** Role
    * **\[📁]** Message
    * **\[📁]** Reaction
    * **\[📁]** Typing
    * **\[📁]** Invite
    * **\[📁]** Emoji
    * **\[📁]** Sticker
    * **\[📁]** Scheduled Event
    * **\[📁]** Stage
    * **\[📁]** Interaction
    * **\[📁]** API
    * **\[📁]** Client
    * **\[📁]** Shard
  * **\[📁]** Action
    * **\[📁]** Guild
    * **\[📁]** Member
    * **\[📁]** User
    * **\[📁]** Channel
    * **\[📁]** Thread
    * **\[📁]** Role
    * **\[📁]** Message
    * **\[📁]** Reaction
    * **\[📁]** Typing
    * **\[📁]** Invite
    * **\[📁]** Emoji
    * **\[📁]** Sticker
    * **\[📁]** Scheduled Event
    * **\[📁]** Stage
    * **\[📁]** Interaction
    * **\[📁]** API
    * **\[📁]** Client
      * **\[🧱]** Connect the bot with the token {string}
      * **\[🧱]** Set bot status to \[ Online / Offline / Idle / Do Not Disturb ] custom status {string} type \[ Listening / Watching / Competing / Playing ]
      * **\[🧱]** Set status streaming url {string}
      * **\[🧱]** Shutdown the bot
      * **\[🧱]** Set bot \[ username / avatar ] to {string}
    * **\[📁]** Shard
* **\[📁]** Community *(for "pre-marketplace" blocks before real marketplace release)*
  * **\[📁]** Message
  * **\[📁]** Database
    * **\[📁]** MongoDB
    * **\[📁]** Firebase
  * **\[📁]** Image Editing
  * **\[📁]** Hosts
    * **\[📁]** GitHub
    * **\[📁]** Repl.it
* **\[📁]** Marketplace *(where marketplace blocks will go)*
* **\[📁]** Developing *(only for dev, never released)*
  * **\[📁]** To Rework *(moved from release Toolbox with above their previous location as label)*
  * **\[📁]** In Rework
  * **\[📁]** To Deploy *(to implement in release Toolbox)*

## Definitions

### Categories

* **📂** : Block Category: Defaultly Opened
* **📁** : Block Category: Defaultly Closed
* **🏷️** : Label (informative text in toolbox)
* **🧱** : Block
* **🔒** : Blockly: Locked (bound to blockly and cannot be modified unless customly reworked)
* **🔏** : Blockly: Problem (Locked but might be customly reworked to better fit S4D (often annoted with its respective reason))
* **🔓** : Blockly: Custom Reworked (formerly bound to blockly but have been customly reworked to better fit S4D)

### Blocks Parameters

* **⚙️** : Mutator
* **\[ ]** : Dropdown
* **{ }** : Input
* **/** : Logical "or"
* **- -** : Input Default Value: Block
* **\~ \~** : Input Default Value: Shadow

### Wording

* **Tangible** : Has a lenght
* **Color** : "color" not "colour"

## Links

* [JavaScript Documentation](https://devdocs.io/javascript/)
* [Node.js Documentation](https://devdocs.io/node/)
* [Discord.js Documentation](https://discord.js.org/#/docs/)
* ["S4D x 469" Discord Server Thread](https://discord.com/channels/826739682230272002/933537179030917171/)
