async def get_address(self) -> str: """Get account address of user""" if isinstance(self.account, acct.Account): return self.account.address account = await self.account.first() if account is not None: return account.address # Create an account address = await RPCClient.instance().account_create() if address is None: raise Exception("RPC account create failed") account = acct.Account(user=self, address=address) async with in_transaction() as conn: await account.save(using_db=conn) return address
async def create_or_fetch_user(cls, user: discord.User) -> 'User': """Create a user if they don't exist, raises OperationalError if database error occurs""" dbuser: '******' = await cls.filter( id=user.id).prefetch_related('account').first() if dbuser is None: async with in_transaction() as conn: # Create user and return them dbuser = User(id=user.id, name=user.name.replace("`", "")) await dbuser.save(using_db=conn) # Create an account address = await RPCClient.instance().account_create() if address is None: raise Exception("RPC account create failed") account = acct.Account(user=dbuser, address=address) await account.save(using_db=conn) return dbuser