Fancy Commands for Counters, Math, & Coin Toss

Want to manually change a command’s count? Reset the count? Maybe you want to count by 5s or count to 10 & then reset. This is the right place.

Reset a command’s counter
!reset
!$(1) -c=0
owner/moderator
!editcom
I like to explain each command here. !editcom is shorthand for !command, & you’d have to type !edit before the command which is not ideal. Owner or moderator makes it so you don’t have to invoke stringquery, & it’s not like you’d want your viewers changing your !deaths counter to 69420.
“!reset fall” will change the !fall command’s counter to be 0. Nothing else is changed.

Change a counter to a specific non-0 value
!redo
!$(1) -c=$(2)
owner/moderator
!editcom
Same as above but usage is “!redo fall 7” in lieu of a command that decrements the counter by 1. Sadly, this seems to be the only way to do it.

!countby5
$(eval var max = 5; var C = $(count); C - max * Math.trunc((C - 1) / max))
everyone, owner/moderator
no alias
Latetsicario suggested this a while back & I finally figured out a way to do it. The solution is not to actually reset the counter, but to display a reset counter. If you play around with it, what it’s doing is counting up to 5 (you can change 5 to whatever number you’d like) & then when it gets to 6, it subtracts 5 from it. When it gets to 11, it subtracts 10. & so on. So the internal counter goes up forever, but Nightbot comments the count modulus 5, but adjusted so it doesn’t say “0”.

Choose a random number between X & Y
!random
Random number: $(eval var min = Number(decodeURIComponent('$(querystring $(1))')); var max = Number(decodeURIComponent('$(querystring $(2))')); var result; if (isNaN(min) || isNaN(max)) { result = "Type '!random x y', where x & y are integers."; } else { Math.floor(Math.random() * (max - min + 1) + min) } )
everyone
no alias
Chooses an integer between 1 & 10, including both 1 & 10. This also works if you choose 1 & 100, 1 & 2, -56 & 1234, whatever you’d like!

Coin toss
!cointoss
🪙 $(eval var sides = ['Heads!','Tails!']; sides[Math.floor(Math.random() * 2)])
everyone
no alias
This is a simple adjustment of the !8ball command to display a coin toss instead. Uses a coin emoji!

Die roll
!die
🎲 $(eval var die = ['1','2','3','4','5','6']; die[Math.floor(Math.random() * 6)])
everyone
no alias
Same as above but for the roll of a die.

Dice roll
!dice
🎲🎲 $(eval var d1 = ['1','2','3','4','5','6']; var d2 = ['1','2','3','4','5','6']; d1 = d1[Math.floor(Math.random() * 6)]; d2 = d2[Math.floor(Math.random() * 6)]; var dice = Number(d1) + Number(d2); dice = "You rolled a " + dice + "!")
everyone
no alias
2 dice with possible rolls of 2–12 & the same probabilities you’d expect from real dice.

Math stuff
Preface: I won’t really explain the next ones too much, but the command tells you the syntax. Unfortunately, fractions don’t work, but positive, negative, & decimals work just fine! The long complicated commands are to ensure security, as using $(1) in JavaScript is a no-no. I also wanted to tell the user how to use the command without flooding chat every time someone uses it correctly.
All of these commands are available to everyone & have no alias. Just need to copy/paste twice each.

Addition/subtraction (with negative numbers)
!add
Sum: $(eval var x = Number(decodeURIComponent('$(querystring $(1))')); var y = Number(decodeURIComponent('$(querystring $(2))')); var result; if (isNaN(x) || isNaN(y)) { result = "Type '!add x y', where x & y are integers or decimals."; } else { x + y } )

Multiplication
!mult
Product: $(eval var x = Number(decodeURIComponent('$(querystring $(1))')); var y = Number(decodeURIComponent('$(querystring $(2))')); var result; if (isNaN(x) || isNaN(y)) { result = "Type '!mult x y', where x & y are integers or decimals."; } else { x * y } )

Division
!div
Quotient: $(eval var x = Number(decodeURIComponent('$(querystring $(1))')); var y = Number(decodeURIComponent('$(querystring $(2))')); var result; if (isNaN(x) || isNaN(y)) { result = "Type '!div x y', where x & y are integers or decimals."; } else { x / y } )

Exponentiation
!exp
Power: $(eval var x = Number(decodeURIComponent('$(querystring $(1))')); var y = Number(decodeURIComponent('$(querystring $(2))')); var result; if (isNaN(x) || isNaN(y)) { result = "Type '!exp x y', where x & y are integers or decimals."; } else { Math.pow(x, y) } )

Hypotenuse for 2 sides
!hypot
2D Hypotenuse: $(eval var x = Number(decodeURIComponent('$(querystring $(1))')); var y = Number(decodeURIComponent('$(querystring $(2))')); var result; if (isNaN(x) || isNaN(y)) { result = "Type '!hypot x y', where x & y are integers or decimals."; } else { Math.hypot(x, y) } )

Hypotenuse for 3 sides
!hypot3
3D Hypotenuse: $(eval var x = Number(decodeURIComponent('$(querystring $(1))')); var y = Number(decodeURIComponent('$(querystring $(2))')); var z = Number(decodeURIComponent('$(querystring $(2))')); var result; if (isNaN(x) || isNaN(y) || isNaN(z)) { result = "Type '!hypot3 x y z', where x, y, & z are integers or decimals."; } else { Math.hypot(x, y, z) } )

More mathy stuff such as trigonometric functions & logarithms can be found at the JavaScript docs
I make use of the Number() function to ensure the inputs are the right type for JavaScript to do its thing; non-formated numbers like fractions won’t work & will result in null & NaN. At the top of the link you’ll also find constants like e, pi, log(10), & sqrt(2). Fun stuff!

I was unfortunately not able to figure out how to use a single command as a calculator, allowing “4 + 6” & “7 * 12” as inputs. Thus, I had to create separate commands for arithmetic. Subtraction I ignored as you can just use “!add 5 -2” to the same effect as “!sub 5 2”.

In the coming days, I want to create commands that take userlevel into account for the response. I also want to scroll through the forums for unanswered questions from years past to see if I can work my magic, but that may be overambitious. If you have any more complex commands you think would be helpful for the community, I’d like to make this a resource of sorts.

Great stuff!
However, I’d suggest editing your post so it’s formatted more clearly, code blocks are necessary for example. If you don’t know how to format your post, I suggest this tutorial, it’ll only take you about 10 minutes.

1 Like

Formatted according to the tutorial. Thanks.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.