So, randomInteger() does not actually use QuantumRoll. The reason for this is that when we say "QuantumRoll", we're referring to not only the actual RNG itself, but also the things surrounding that RNG, including the source of entropy that seeds it and the fact that we sign the roll with our private key so that the client can verify it is a random, non-manipulated roll that was generated by our server. randomInteger() does use a very similar system to QuantumRoll (it's actually the same system we fall back to on the local client if we can't contact QuantumRoll), but since it's not outputting a fully-signed roll the way that sendChat() does, you won't for example get the little dice icon in the chat, it's not verified as non-manipulated, etc. So feel free to use randomInteger if you'd like, it's definitely random, but you just won't get all the extras that go with using QuantumRoll and sendChat(). I would say that if you are just wanting to generate a quick random number to use for something simple (e.g. picking a random card from a deck, rolling a random side on a multi-sided token, choosing a random item from a table, etc.) then randomInteger() is totally fine. If you are actually outputting a dice result that is similar to someone rolling "/r 1d20" in chat themselves, they I would recommend using sendChat() if possible since that is the closest match from an end-user perspective.