def __init__(self, userdata): self.nickname = userdata.nickname self.tag = userdata.tag self.gender = userdata.gender self.height = userdata.height self.baseheight = userdata.baseheight self.viewscale = userdata.viewscale self.scale = userdata.scale self.formattedscale = userdata.getFormattedScale(verbose=True) self.baseweight = userdata.baseweight self.weight = userdata.weight self.formattedweightscale = userdata.getFormattedScale( scaletype="weight", verbose=True) self.averageheightmult = self.height / defaultheight self.averageweightmult = self.weight / defaultweight if userdata.hairlength is None: self.hairlength = None else: self.hairlength = SV(userdata.hairlength / self.viewscale) if userdata.taillength is None: self.taillength = None else: self.taillength = SV(userdata.taillength / self.viewscale) if userdata.footlength is None: self.footlength = SV(self.height * self.footfactor) else: self.footlength = SV(userdata.footlength / self.viewscale) self.shoesize = formatShoeSize(self.footlength, self.gender == "f") self.footwidth = SV(self.height * self.footwidthfactor) self.toeheight = SV(self.height * self.toeheightfactor) self.shoeprintdepth = SV(self.height * self.toeheightfactor) self.pointerlength = SV(self.height * self.pointerfactor) self.thumbwidth = SV(self.height * self.thumbfactor) self.fingerprintdepth = SV(self.height * self.fingerprintfactor) defaultthreadthickness = SV.parse("1.016mm") self.threadthickness = SV(defaultthreadthickness * self.averageheightmult) self.hairwidth = SV(self.height * self.hairfactor) self.nailthickness = SV(self.height * self.nailthickfactor) self.eyewidth = SV(self.height * self.eyewidthfactor) self.avgheightcomp = SV(defaultheight * self.viewscale) self.avgweightcomp = WV(defaultweight * self.viewscale**3) viewangle = calcViewAngle(self.height, defaultheight) self.avglookangle = abs(viewangle) self.avglookdirection = "up" if viewangle >= 0 else "down" defaultwalkspeed = SV.parse("2.5mi") defaultrunspeed = SV.parse("7.5mi") self.walkperhour = SV(defaultwalkspeed * self.averageheightmult) self.runperhour = SV(defaultrunspeed * self.averageheightmult)
def WV_format(): value = Decimal(request.args.get("value")) system = request.args.get("system") try: val = WV(value) except InvalidSizeValue: abort(404) return json.dumps({"formatted": format(val, system)})
async def setstrength(self, ctx, *, newstrength): """Set your current lift/carry strength.""" userdata = userdb.load(ctx.guild.id, ctx.author.id, allow_unreg=True) userdata.liftstrength = WV( WV.parse(newstrength) * (userdata.viewscale**3)) userdb.save(userdata) await ctx.send( f"{userdata.nickname}'s base lift strength is now {userdata.liftstrength:mu} long, " f"or {SV(userdata.liftstrength):mu} currently.") await showNextStep(ctx, userdata)
async def setweight(self, ctx, *, newweight): """Set your current weight.""" userdata = userdb.load(ctx.guild.id, ctx.author.id) userdata.baseweight = WV(WV.parse(newweight) * (userdata.viewscale**3)) userdb.save(userdata) logger.info( f"User {ctx.author.id} ({ctx.author.display_name}) changed their weight to {newweight}." ) await ctx.send( f"<@{ctx.author.id}>'s weight is now {userdata.weight:mu}") await proportions.nickUpdate(ctx.author)
def __init__(self, name, dimension, aliases=[], symbol=None, height=None, length=None, width=None, diameter=None, depth=None, thickness=None, weight=None): self.name = name self.namePlural = getPlural(name) self.singularNames = aliases + [self.name] self.aliases = aliases + [getPlural(a) for a in aliases] self.article = getIndefiniteArticle(self.name).split(" ")[0] self.symbol = symbol or None self.height = height and SV(height) self.length = length and SV(length) self.width = width and SV(width) self.diameter = diameter and SV(diameter) self.depth = depth and SV(depth) self.thickness = thickness and SV(thickness) self.weight = weight and WV(weight) dimensionmap = { "h": "height", "l": "length", "w": "width", "d": "diameter", "p": "depth", "t": "thickness" } self.unitlength = getattr(self, dimensionmap[dimension])
def weight(self): return WV(self.baseweight * (self.scale**3))
def baseweight(self, value): value = WV(value) if value < 0: value = WV(0) self._baseweight = value
from functools import total_ordering import importlib.resources as pkg_resources from typing import Literal import arrow import sizebot.data from sizebot.lib import errors, paths from sizebot.lib.decimal import Decimal from sizebot.lib.diff import Diff, Rate as ParseableRate from sizebot.lib.units import SV, WV from sizebot.lib.utils import isURL, truncate # Defaults defaultheight = SV("1.754") # meters defaultweight = WV("66760") # grams defaultterminalvelocity = SV("63.63") # meters/second falllimit = SV("7.73") # meters/second defaultliftstrength = WV("18143.7") # grams modelJSON = json.loads(pkg_resources.read_text(sizebot.data, "models.json")) @total_ordering class User: # __slots__ declares to python what attributes to expect. __slots__ = [ "guildid", "id", "nickname", "lastactive", "_picture_url", "description", "_gender", "display", "_height", "_baseheight", "_baseweight", "_footlength", "_pawtoggle", "_furtoggle", "_hairlength", "_taillength", "_earheight", "_liftstrength",
def __init__(self, userdata): self.nickname = userdata.nickname self.tag = userdata.tag self.gender = userdata.autogender self.height = userdata.height self.baseheight = userdata.baseheight self.viewscale = userdata.viewscale self.scale = userdata.scale self.formattedscale = userdata.getFormattedScale(verbose=True) self.baseweight = userdata.baseweight self.weight = userdata.weight self.formattedweightscale = userdata.getFormattedScale( scaletype="weight", verbose=True) self.footname = userdata.footname self.hairname = userdata.hairname self.pawtoggle = userdata.pawtoggle self.furtoggle = userdata.furtoggle self.macrovision_model = userdata.macrovision_model self.macrovision_view = userdata.macrovision_view self.averageheightmult = self.height / defaultheight self.averageweightmult = self.weight / defaultweight if userdata.hairlength is None: self.hairlength = None else: self.hairlength = SV(userdata.hairlength / self.viewscale) if userdata.taillength is None: self.taillength = None else: self.taillength = SV(userdata.taillength / self.viewscale) if userdata.earheight is None: self.earheight = None else: self.earheight = SV(userdata.earheight / self.viewscale) if userdata.liftstrength is None: self.liftstrength = WV(defaultliftstrength / (self.viewscale**3)) else: self.liftstrength = WV(userdata.liftstrength / (self.viewscale**3)) if userdata.footlength is None: self.footlength = SV(self.height * self.footfactor) else: self.footlength = SV(userdata.footlength / self.viewscale) self.shoesize = formatShoeSize(self.footlength, self.gender == "f") self.footwidth = SV(self.height * self.footwidthfactor) self.toeheight = SV(self.height * self.toeheightfactor) self.shoeprintdepth = SV(self.height * self.toeheightfactor) self.pointerlength = SV(self.height * self.pointerfactor) self.thumbwidth = SV(self.height * self.thumbfactor) self.fingerprintdepth = SV(self.height * self.fingerprintfactor) self.threadthickness = SV(self.defaultthreadthickness * self.averageheightmult) self.hairwidth = SV( (self.baseheight * self.hairfactor) / self.viewscale) self.nailthickness = SV( (self.baseheight * self.nailthickfactor) / self.viewscale) self.eyewidth = SV(self.height * self.eyewidthfactor) self.avgheightcomp = SV(defaultheight * self.viewscale) self.avgweightcomp = WV(defaultweight * self.viewscale**3) viewangle = calcViewAngle(self.height, defaultheight) self.avglookangle = abs(viewangle) self.avglookdirection = "up" if viewangle >= 0 else "down" if userdata.walkperhour is None: self.walkperhour = SV(self.defaultwalkspeed * self.averageheightmult) else: self.walkperhour = SV(userdata.walkperhour * self.averageheightmult) if userdata.runperhour is None: self.runperhour = SV(self.defaultrunspeed * self.averageheightmult) else: self.runperhour = SV(userdata.runperhour * self.averageheightmult) self.walksteplength = SV(self.walkperhour / self.walkstepsperhour) self.runsteplength = SV(self.runperhour / self.runstepsperhour) self.horizondistance = SV( math.sqrt(math.pow(self.height + 6378137, 2) - 40680631590769)) self.terminalvelocity = SV(defaultterminalvelocity * Decimal(math.sqrt(self.scale))) self.fallproof = self.terminalvelocity < falllimit self.fallproofcheck = emojis.voteyes if self.fallproof else emojis.voteno
def test_negative_WV_parse(): result = WV.parse("-12kg") assert result == WV("-12000")
def baseweight(self, value): self._baseweight = WV(max(0, WV(value)))
import json from copy import copy from functools import total_ordering from typing import Literal from sizebot import conf from sizebot.lib import errors from sizebot.lib.units import SV, WV # Defaults defaultheight = SV("1.754") # meters defaultweight = WV("66760") # grams # Map the deprecated user array constants to the new names # TODO: This is used never, I think? # NICK DISP CHEI BHEI BWEI UNIT SPEC DEPRECATED_NAME_MAP = [ "nickname", "display", "height", "baseheight", "baseweight", "unitsystem", "species" ] @total_ordering class User: # __slots__ declares to python what attributes to expect. __slots__ = [ "guildid", "id", "nickname", "_gender", "display", "_height", "_baseheight", "_baseweight", "_footlength", "_hairlength", "_taillength", "_unitsystem", "species" ]