mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-23 03:24:20 +00:00
roll
: Improve and fix everything
This commit is contained in:
parent
d6c32c908b
commit
cb86e0923d
3 changed files with 61 additions and 24 deletions
|
@ -111,7 +111,7 @@ register_telegram(tg_router, commands.fiorygi_bury, ["bury"],
|
|||
register_telegram(tg_router, commands.version, ["version"])
|
||||
register_telegram(tg_router, commands.cv, ["cv", "civù"])
|
||||
register_telegram(tg_router, commands.rocoinflip, ["rocoinflip"], r'"(?P<teama>[^"]+)"\s+"(?P<teamb>[^"]+)"')
|
||||
register_telegram(tg_router, commands.roll, ["roll"], r"(?P<qty>[0-9]*)d(?P<die>[0-9]+)(?P<mod>[+-][0-9]+)")
|
||||
register_telegram(tg_router, commands.roll, ["roll"], r"(?P<qty>[0-9]*)d(?P<die>[0-9]+)(?P<mod>[+-][0-9]+)?")
|
||||
register_telegram(tg_router, commands.diobot, ["diobot", "phrase"])
|
||||
register_telegram(tg_router, commands.loginprogress, ["loginprogress"])
|
||||
|
||||
|
|
|
@ -21,3 +21,4 @@ from .smecds import *
|
|||
from .spell import *
|
||||
from .version import *
|
||||
from .whoami import *
|
||||
from .roll import *
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import typing as t
|
||||
import datetime
|
||||
import random
|
||||
|
||||
|
@ -8,41 +9,76 @@ import royalpack.bolts as rb
|
|||
|
||||
@rb.capture_errors
|
||||
@engi.TeleportingConversation
|
||||
async def roll(*, _msg: engi.Message, qty: int, die: int, mod: int, **__):
|
||||
async def roll(*, _msg: engi.Message, qty: int, die: int, mod: t.Optional[int], **__):
|
||||
"""
|
||||
Tira un dado nel formato di D&D: `1d20+1`, ad esempio.
|
||||
|
||||
Non perfettamente casuale, **non usare per competizioni o altre cose serie**!
|
||||
"""
|
||||
|
||||
# modificatore supersegreto della fortuna. Ooooh! Questo è Top Secret!
|
||||
# Steffo: hol up
|
||||
r = random.Random(x=hash(datetime.date.today()))
|
||||
luck = r.randrange(-100, 100)/100*die/3
|
||||
# modificatore supersegreto della fortuna. ooooh! questo è top secret!
|
||||
# "blame cate for this" --steffo
|
||||
|
||||
random.seed(datetime.datetime.now())
|
||||
# usa il giorno attuale come seed
|
||||
seed = hash(datetime.date.today())
|
||||
lrand = random.Random(x=seed)
|
||||
# la variazione massima del risultato deve essere di un sesto del tiro
|
||||
luck = lrand.triangular(low=-0.17, high=0.17, mode=0.0)
|
||||
|
||||
# rolliamo i dadi richiesti
|
||||
roll = []
|
||||
for i in range(quantity):
|
||||
extracted = random.randint(1, die)
|
||||
# veniamo al dunque
|
||||
|
||||
result = int(round(extracted+luck, 0))
|
||||
# resetta il seed
|
||||
drand = random.Random()
|
||||
|
||||
# tiriamo i dadi richiesti!
|
||||
rolls = []
|
||||
for i in range(qty):
|
||||
# trova il risultato base del tiro
|
||||
result = drand.randint(1, die)
|
||||
|
||||
# tira il valore di fortuna per vedere l'effetto sul dado
|
||||
result += (drand.random() * luck) * die
|
||||
|
||||
# arrotonda il risultato
|
||||
result = round(result)
|
||||
|
||||
# limita il risultato tra massimo e minimo per non destare sospetti
|
||||
result = min(result, die)
|
||||
result = max(result, 1)
|
||||
|
||||
roll.append(result)
|
||||
rolls.append(result)
|
||||
|
||||
# decidi un'emoji da mostrare
|
||||
if luck > 0:
|
||||
emoji = "🔆"
|
||||
else:
|
||||
emoji = "🔅"
|
||||
|
||||
# formuliamo una risposta da mostrare all'utente
|
||||
answer = f"🎲 {qty}d{die}{mod:+} = {roll}"
|
||||
if mod:
|
||||
answer +=" "
|
||||
if mod > 0:
|
||||
answer += "+"
|
||||
answer +=str(mod)
|
||||
|
||||
answer += " = "+str(sum(roll)+mod)
|
||||
# usando una lista di stringhe che uniremo per inviare il messaggio
|
||||
# perchè? performance!
|
||||
answer = [
|
||||
f"{emoji} {qty}d{die}",
|
||||
]
|
||||
|
||||
await _msg.reply(text=answer)
|
||||
if mod and mod != 0:
|
||||
answer.append(f"{mod:+}")
|
||||
|
||||
answer.append(" = ")
|
||||
|
||||
total = 0
|
||||
for index, result in enumerate(rolls):
|
||||
if index != 0:
|
||||
answer.append("+")
|
||||
answer.append(f"{result}")
|
||||
total += result
|
||||
|
||||
answer.append(f" = \uE01B{total}\uE00B")
|
||||
|
||||
await _msg.reply(text="".join(answer))
|
||||
|
||||
|
||||
|
||||
__all__ = ("roll",)
|
||||
__all__ = (
|
||||
"roll",
|
||||
)
|
Loading…
Reference in a new issue